web-interface.assets.1255d548-5534.890176091ac76b162587.js.map Maven / Gradle / Ivy
{"version":3,"file":"1255d548-5534.890176091ac76b162587.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/indices/Types.ts","webpack://graylog-web-interface/./src/components/streamrules/HumanReadableStreamRule.tsx","webpack://graylog-web-interface/./src/components/streamrules/StreamRule.tsx","webpack://graylog-web-interface/./src/components/streamrules/StreamRuleList.tsx","webpack://graylog-web-interface/./src/components/streamrules/StreamRuleModal.tsx","webpack://graylog-web-interface/./src/components/streams/hooks/useStreamRuleTypes.ts","webpack://graylog-web-interface/./src/components/common/EntityFilters/FiltersForQueryParams.ts","webpack://graylog-web-interface/./src/components/streams/hooks/useStreams.ts","webpack://graylog-web-interface/./src/logic/streams/streamRuleTypes.ts","webpack://graylog-web-interface/./src/components/streams/IndexSetSelect.tsx","webpack://graylog-web-interface/./src/components/streams/StreamModal.tsx","webpack://graylog-web-interface/./src/components/streams/CreateStreamButton.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/Constants.ts","webpack://graylog-web-interface/./src/components/common/EntityFilters/helpers/AttributeIdentification.ts","webpack://graylog-web-interface/./src/components/common/EntityFilters/FilterConfiguration/StaticOptionsList.tsx","webpack://graylog-web-interface/./src/hooks/useIsKeyHeld.ts","webpack://graylog-web-interface/./src/components/common/EntityFilters/hooks/useFilterValueSuggestions.ts","webpack://graylog-web-interface/./src/components/common/EntityFilters/FilterConfiguration/SuggestionsList.tsx","webpack://graylog-web-interface/./src/components/common/EntityFilters/helpers/timeRange.ts","webpack://graylog-web-interface/./src/components/common/EntityFilters/FilterConfiguration/DateRangeForm.tsx","webpack://graylog-web-interface/./src/components/common/EntityFilters/FilterConfiguration/FilterConfiguration.tsx","webpack://graylog-web-interface/./src/components/common/EntityFilters/FilterConfiguration/index.ts","webpack://graylog-web-interface/./src/components/common/EntityFilters/CreateFilterDropdown.tsx","webpack://graylog-web-interface/./src/components/common/EntityFilters/ActiveFilter.tsx","webpack://graylog-web-interface/./src/components/common/EntityFilters/Constants.ts","webpack://graylog-web-interface/./src/components/common/EntityFilters/ActiveFilters.tsx","webpack://graylog-web-interface/./src/components/common/EntityFilters/hooks/useFiltersWithTitle.ts","webpack://graylog-web-interface/./src/components/common/EntityFilters/EntityFilters.tsx","webpack://graylog-web-interface/./src/components/common/EntityFilters/index.ts","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/FilterValueRenderers.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/StreamActions.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/BulkActions/AssignIndexSetAction.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/BulkActions/StopStreamsAction.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/BulkActions/SearchStreamsAction.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/BulkActions/StartStreamsAction.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/BulkActions/index.ts","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/BulkActions/BulkActions.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/ExpandedRulesSection.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/ExpandedRulesActions.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/hooks/useTableComponents.tsx","webpack://graylog-web-interface/./src/components/common/EntityFilters/hooks/useUrlQueryFilters.ts","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/cells/IndexSetCell.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/cells/ThroughputCell.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/cells/StatusCell.tsx","webpack://graylog-web-interface/./src/components/common/EntityDataTable/hooks/useExpandedSections.ts","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/cells/StreamRulesCell.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/ColumnRenderers.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/hooks/useTableEventHandlers.ts","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/StreamsOverview.tsx","webpack://graylog-web-interface/./src/components/streams/StreamsOverview/index.ts","webpack://graylog-web-interface/./src/pages/StreamsPage.tsx","webpack://graylog-web-interface/./src/stores/indices/IndexSetsStore.ts","webpack://graylog-web-interface/./src/stores/inputs/StreamRulesInputsStore.ts","webpack://graylog-web-interface/./src/stores/streams/StreamRulesStore.ts"],"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 PropTypes from 'prop-types';\n\nexport type MaintenanceOptions = {\n strategies: Array\n}\n\nexport type IndicesConfigurationActionsType = {\n loadRotationStrategies: () => Promise,\n loadRetentionStrategies: () => Promise,\n};\n\nexport interface RotationStrategyContext {\n time_size_optimizing_retention_fixed_leeway?: string,\n}\n\nexport type IndicesConfigurationStoreState = {\n activeRotationConfig: any,\n rotationStrategies: any,\n activeRetentionConfig: any,\n retentionStrategies: any,\n retentionStrategiesContext: RetentionStrategyContext,\n rotationStrategiesContext: RotationStrategyContext,\n}\nexport type SizeBasedRotationStrategyConfig = {\n type: string,\n max_size: number,\n}\nexport type MessageCountRotationStrategyConfig = {\n type: string,\n max_docs_per_index: number,\n}\nexport type TimeBasedRotationStrategyConfig = {\n type: string,\n rotation_period?: string,\n max_rotation_period?: string,\n rotate_empty_index_set?: boolean,\n}\nexport type TimeBasedSizeOptimizingRotationStrategyConfig = {\n type: string,\n index_lifetime_max?: string,\n index_lifetime_min?: string,\n}\nexport type RotationStrategyConfig =\n SizeBasedRotationStrategyConfig\n | MessageCountRotationStrategyConfig\n | TimeBasedRotationStrategyConfig;\nexport type RetentionStrategyConfig = {\n type?: string,\n max_number_of_indices?: number,\n index_action?: string,\n}\n\nexport interface JsonSchemaStringPropertyType {\n type: string,\n}\n\nexport interface JsonSchemaIndexActionPropertyType {\n type: string,\n\n enum: Array,\n}\n\nexport interface JsonSchemaBooleanPropertyType {\n type: string;\n}\n\nexport interface RotationProperties {\n rotation_period?: JsonSchemaStringPropertyType,\n\n max_rotation_period?: JsonSchemaStringPropertyType,\n\n type: JsonSchemaStringPropertyType,\n\n max_size?: JsonSchemaStringPropertyType,\n\n rotate_empty_index_set?: JsonSchemaBooleanPropertyType,\n\n index_lifetime_max?: JsonSchemaBooleanPropertyType,\n\n index_lifetime_min?: JsonSchemaBooleanPropertyType,\n}\n\nexport interface RotationJsonSchema {\n type: string,\n\n id: string,\n\n properties: RotationProperties,\n}\n\nexport interface RetentionProperties {\n max_number_of_indices: JsonSchemaStringPropertyType,\n\n type: JsonSchemaStringPropertyType,\n\n index_action?: JsonSchemaIndexActionPropertyType,\n}\n\nexport interface RetentionJsonSchema {\n type: string,\n\n id: string,\n\n properties: RetentionProperties,\n}\n\nexport interface RotationStrategy {\n type: string,\n\n default_config: RotationStrategyConfig,\n\n json_schema: RotationJsonSchema,\n}\n\nexport interface RetentionStrategy {\n type?: string,\n\n default_config?: RetentionStrategyConfig,\n\n json_schema?: RetentionJsonSchema,\n}\n\nexport interface RetentionStrategyContext {\n max_index_retention_period?: string,\n}\n\nexport interface RotationStrategyResponse {\n total: number,\n\n context: RotationStrategyContext,\n\n strategies: Array,\n}\n\nexport interface RetentionStrategyResponse {\n total: number,\n\n strategies: Array,\n\n context: RetentionStrategyContext,\n}\n\nexport type JsonSchema = RotationJsonSchema | RetentionJsonSchema\n\nexport type Strategy = RotationStrategy | RetentionStrategy\n\nexport type Strategies = Array\n\nexport type StrategyConfig = RotationStrategyConfig | RetentionStrategyConfig\n\nexport const RetentionStrategiesContextPropType = PropTypes.exact({\n max_index_retention_period: PropTypes.string,\n});\nexport const SizeBasedRotationStrategyConfigPropType = PropTypes.exact({\n type: PropTypes.string,\n max_size: PropTypes.number,\n});\nexport const MessageCountRotationStrategyConfigPropType = PropTypes.exact({\n type: PropTypes.string,\n max_docs_per_index: PropTypes.number,\n});\nexport const TimeBasedRotationStrategyConfigPropType = PropTypes.exact({\n type: PropTypes.string,\n rotation_period: PropTypes.string,\n max_rotation_period: PropTypes.string,\n rotate_empty_index_set: PropTypes.bool,\n});\n\nexport const TimeBasedSizePtimizingRotationStrategyConfigPropType = PropTypes.exact({\n type: PropTypes.string,\n index_lifetime_max: PropTypes.string,\n index_lifetime_min: PropTypes.string,\n});\nexport const RotationStrategyConfigPropType = PropTypes.oneOfType([\n SizeBasedRotationStrategyConfigPropType,\n MessageCountRotationStrategyConfigPropType,\n TimeBasedRotationStrategyConfigPropType,\n TimeBasedSizePtimizingRotationStrategyConfigPropType,\n]);\n\nexport const IndexActionPropType = PropTypes.string;\nexport const RetentionStrategyConfigPropType = PropTypes.shape({\n type: PropTypes.string.isRequired,\n max_number_of_indices: PropTypes.number,\n index_action: PropTypes.string,\n});\n\nexport const JsonSchemaStringPropertyTypePropType = PropTypes.exact({\n type: PropTypes.string.isRequired,\n});\nexport const JsonSchemaIndexActionPropertyTypePropType = PropTypes.exact({\n type: PropTypes.string.isRequired,\n enum: PropTypes.arrayOf(PropTypes.string).isRequired,\n});\nexport const RotationPropertiesPropType = PropTypes.exact({\n rotation_period: JsonSchemaStringPropertyTypePropType,\n max_rotation_period: JsonSchemaStringPropertyTypePropType,\n type: JsonSchemaStringPropertyTypePropType.isRequired,\n max_size: JsonSchemaStringPropertyTypePropType,\n max_docs_per_index: JsonSchemaStringPropertyTypePropType,\n rotate_empty_index_set: JsonSchemaStringPropertyTypePropType,\n index_lifetime_max: JsonSchemaStringPropertyTypePropType,\n index_lifetime_min: JsonSchemaStringPropertyTypePropType,\n});\nexport const RotationJsonSchemaPropType = PropTypes.exact({\n type: PropTypes.string.isRequired,\n id: PropTypes.string,\n properties: RotationPropertiesPropType.isRequired,\n});\nexport const RetentionPropertiesPropType = PropTypes.exact({\n max_number_of_indices: JsonSchemaStringPropertyTypePropType.isRequired,\n type: JsonSchemaStringPropertyTypePropType.isRequired,\n index_action: JsonSchemaIndexActionPropertyTypePropType,\n});\nexport const RetentionJsonSchemaPropType = PropTypes.exact({\n type: PropTypes.string.isRequired,\n id: PropTypes.string,\n properties: RetentionPropertiesPropType,\n});\nexport const RotationStrategyPropType = PropTypes.exact({\n type: PropTypes.string.isRequired,\n default_config: RotationStrategyConfigPropType.isRequired,\n json_schema: RotationJsonSchemaPropType.isRequired,\n});\nexport const RetentionStrategyPropType = PropTypes.exact({\n type: PropTypes.string.isRequired,\n default_config: RetentionStrategyConfigPropType.isRequired,\n json_schema: RetentionJsonSchemaPropType.isRequired,\n});\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport type { Input } from 'components/messageloaders/Types';\nimport type { StreamRule } from 'stores/streams/StreamsStore';\nimport STREAM_RULE_TYPES from 'logic/streams/streamRuleTypes';\nimport useStreamRuleTypes from 'components/streams/hooks/useStreamRuleTypes';\n\nconst EMPTY_TAG = '';\n\nconst formatRuleValue = (inputs: Array, streamRule: Partial) => {\n if (streamRule.type === STREAM_RULE_TYPES.MATCH_INPUT) {\n const input = inputs.find(({ id }) => id === streamRule.value);\n\n if (input) {\n return `${input.title} (${input.name}: ${input.id})`;\n }\n\n return `: ${streamRule.value})`;\n }\n\n if (streamRule.type !== STREAM_RULE_TYPES.FIELD_PRESENCE) {\n if (streamRule.value) {\n return streamRule.value;\n }\n\n return EMPTY_TAG;\n }\n\n return null;\n};\n\nconst formatRuleField = (streamRule: Partial) => {\n if (streamRule.field) {\n return streamRule.field;\n }\n\n if (streamRule.type === STREAM_RULE_TYPES.MATCH_INPUT) {\n return 'gl_source_input';\n }\n\n return EMPTY_TAG;\n};\n\ntype Props = {\n streamRule: Partial,\n inputs: Array,\n}\n\nconst HumanReadableStreamRule = ({ streamRule, inputs = [] }: Props) => {\n const { data: streamRuleTypes } = useStreamRuleTypes();\n const streamRuleType = streamRuleTypes?.find(({ id }) => id === streamRule.type);\n const negation = (streamRule.inverted ? 'not ' : null);\n const longDesc = (streamRuleType ? streamRuleType.long_desc : null);\n\n if (streamRule.type === STREAM_RULE_TYPES.ALWAYS_MATCHES) {\n return (\n Rule always matches\n );\n }\n\n return (\n \n {formatRuleField(streamRule)} must {negation}{longDesc} {formatRuleValue(inputs, streamRule)}\n \n );\n};\n\nHumanReadableStreamRule.propTypes = {\n streamRule: PropTypes.object.isRequired,\n inputs: PropTypes.array.isRequired,\n};\n\nexport default HumanReadableStreamRule;\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, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\nimport styled from 'styled-components';\n\nimport HumanReadableStreamRule from 'components/streamrules/HumanReadableStreamRule';\nimport { useStore } from 'stores/connect';\nimport { Icon } from 'components/common';\nimport { Button, ListGroupItem } from 'components/bootstrap';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport StreamRuleModal from 'components/streamrules/StreamRuleModal';\nimport UserNotification from 'util/UserNotification';\nimport { StreamRulesInputsActions, StreamRulesInputsStore } from 'stores/inputs/StreamRulesInputsStore';\nimport { StreamRulesStore } from 'stores/streams/StreamRulesStore';\nimport type { StreamRule as StreamRuleTypeDefinition, Stream } from 'stores/streams/StreamsStore';\n\nimport useCurrentUser from '../../hooks/useCurrentUser';\n\nconst ActionButtonsWrap = styled.span`\n margin-right: 6px;\n`;\n\ntype Props = {\n matchData: {\n matches: boolean,\n rules: { [id: string]: false },\n },\n stream: Stream,\n onDelete: (ruleId: string) => void,\n onSubmit: (ruleId: string, data: unknown) => void,\n streamRule: StreamRuleTypeDefinition\n}\n\nconst StreamRule = ({ matchData, stream, streamRule, onSubmit, onDelete }: Props) => {\n const { permissions } = useCurrentUser();\n const [showStreamRuleForm, setShowStreamRuleForm] = useState(false);\n const { inputs } = useStore(StreamRulesInputsStore);\n\n useEffect(() => {\n StreamRulesInputsActions.list();\n }, []);\n\n const _onEdit = (event) => {\n event.preventDefault();\n setShowStreamRuleForm(true);\n };\n\n const _onDelete = (event) => {\n event.preventDefault();\n\n /* TODO: Replace with custom confirmation dialog */\n // eslint-disable-next-line no-alert\n if (window.confirm('Do you really want to delete this stream rule?')) {\n StreamRulesStore.remove(stream.id, streamRule.id, () => {\n if (onDelete) {\n onDelete(streamRule.id);\n }\n\n UserNotification.success('Stream rule has been successfully deleted.', 'Success');\n });\n }\n };\n\n const _onSubmit = (streamRuleId, data) => StreamRulesStore.update(stream.id, streamRuleId, data, () => {\n if (onSubmit) {\n onSubmit(streamRuleId, data);\n }\n\n UserNotification.success('Stream rule has been successfully updated.', 'Success');\n });\n\n const _formatActionItems = () => (\n \n \n \n \n );\n\n const matchDataStyle = () => (matchData.rules[streamRule.id] ? 'success' : 'danger');\n const actionItems = isPermitted(permissions, [`streams:edit:${stream.id}`]) ? _formatActionItems() : null;\n const description = streamRule.description ? {' '}({streamRule.description}) : null;\n const listGroupStyle = !isEmpty(matchData) ? matchDataStyle() : null;\n\n return (\n \n {actionItems}\n \n {showStreamRuleForm && (\n setShowStreamRuleForm(false)}\n title=\"Edit Stream Rule\"\n submitButtonText=\"Update Rule\"\n submitLoadingText=\"Updating Rule...\"\n onSubmit={_onSubmit} />\n )}\n {description}\n \n );\n};\n\nStreamRule.propTypes = {\n matchData: PropTypes.shape({\n matches: PropTypes.bool,\n rules: PropTypes.object,\n }),\n onDelete: PropTypes.func,\n onSubmit: PropTypes.func,\n stream: PropTypes.object.isRequired,\n streamRule: PropTypes.object.isRequired,\n};\n\nStreamRule.defaultProps = {\n matchData: {},\n onSubmit: () => {},\n onDelete: () => {},\n};\n\nexport default StreamRule;\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport type { Stream, MatchData } from 'src/stores/streams/StreamsStore';\n\nimport StreamRule from 'components/streamrules/StreamRule';\nimport { Spinner } from 'components/common';\nimport { ListGroup, ListGroupItem } from 'components/bootstrap';\n\ntype Props = {\n matchData: MatchData,\n onDelete: (ruleId: string) => void,\n onSubmit: (ruleId: string, data: unknown) => void,\n stream: Stream | undefined,\n}\n\nconst StreamRuleList = ({\n matchData,\n onDelete,\n onSubmit,\n stream,\n}: Props) => {\n if (!stream) {\n return ;\n }\n\n const hasStreamRules = !!stream.rules.length;\n\n return (\n \n {hasStreamRules && stream.rules.map((streamRule) => (\n \n ))}\n\n {!hasStreamRules && No rules defined. }\n \n );\n};\n\nStreamRuleList.propTypes = {\n matchData: PropTypes.shape({\n matches: PropTypes.bool,\n rules: PropTypes.object,\n }),\n onSubmit: PropTypes.func,\n onDelete: PropTypes.func,\n stream: PropTypes.object.isRequired,\n};\n\nStreamRuleList.defaultProps = {\n matchData: {},\n onSubmit: () => {},\n onDelete: () => {},\n};\n\nexport default StreamRuleList;\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';\nimport { Formik, Form, Field } from 'formik';\nimport { useCallback, useMemo, useEffect } from 'react';\n\nimport Version from 'util/Version';\nimport type { StreamRule } from 'stores/streams/StreamsStore';\nimport {\n Icon,\n TypeAheadFieldInput,\n FormikInput,\n Select,\n ModalSubmit,\n InputOptionalInfo,\n Spinner,\n} from 'components/common';\nimport HumanReadableStreamRule from 'components/streamrules//HumanReadableStreamRule';\nimport { Col, Well, Input, Modal, Row } from 'components/bootstrap';\nimport { DocumentationLink } from 'components/support';\nimport DocsHelper from 'util/DocsHelper';\nimport { useStore } from 'stores/connect';\nimport { StreamRulesInputsStore, StreamRulesInputsActions } from 'stores/inputs/StreamRulesInputsStore';\nimport STREAM_RULE_TYPES from 'logic/streams/streamRuleTypes';\nimport useStreamRuleTypes from 'components/streams/hooks/useStreamRuleTypes';\n\ntype FormValues = Partial>\n\nconst shouldDisplayValueInput = (type: number) => type !== STREAM_RULE_TYPES.FIELD_PRESENCE && type !== STREAM_RULE_TYPES.ALWAYS_MATCHES;\nconst shouldDisplayFieldInput = (type: number) => type !== STREAM_RULE_TYPES.ALWAYS_MATCHES && type !== STREAM_RULE_TYPES.MATCH_INPUT;\n\nconst validate = (values: FormValues) => {\n let errors = {};\n\n if (!values.type) {\n errors = { ...errors, type: 'Type is required' };\n }\n\n if (shouldDisplayValueInput(values.type) && !values.value) {\n errors = { ...errors, value: 'Value is required' };\n }\n\n if (shouldDisplayFieldInput(values.type) && !values.field) {\n errors = { ...errors, field: 'Field is required' };\n }\n\n return errors;\n};\n\ntype Props = {\n onSubmit: (streamRuleId: string | undefined | null, currentStreamRule: FormValues) => Promise,\n initialValues?: Partial,\n title: string,\n onClose: () => void,\n submitButtonText: string\n submitLoadingText: string\n};\n\nconst StreamRuleModal = ({\n title,\n onClose,\n submitButtonText,\n submitLoadingText,\n onSubmit,\n initialValues,\n}: Props) => {\n const { inputs } = useStore(StreamRulesInputsStore);\n const { data: streamRuleTypes } = useStreamRuleTypes();\n\n useEffect(() => {\n StreamRulesInputsActions.list();\n }, []);\n\n const _onSubmit = useCallback(\n (values: FormValues) => onSubmit(initialValues?.id, values).then(() => onClose()),\n [onSubmit, initialValues?.id, onClose],\n );\n\n const streamRuleTypesOptions = useMemo(\n () => streamRuleTypes?.map(({ id, short_desc }) => ({\n value: id,\n label: short_desc,\n })),\n\n [streamRuleTypes],\n );\n\n const inputOptions = useMemo(\n () => inputs?.map(({ id, title: inputTitle, name }) => ({ label: `${inputTitle} (${name})`, value: id })),\n [inputs],\n );\n\n return (\n \n initialValues={initialValues} onSubmit={_onSubmit} validate={validate}>\n {({ values, setFieldValue, isSubmitting, isValidating }) => (\n \n )}\n \n \n );\n};\n\nStreamRuleModal.defaultProps = {\n initialValues: {\n field: '',\n type: 1,\n value: '',\n inverted: false,\n description: '',\n },\n};\n\nexport default StreamRuleModal;\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 { useQuery } from '@tanstack/react-query';\n\nimport type { StreamRuleType } from 'stores/streams/StreamsStore';\nimport { StreamRulesStore } from 'stores/streams/StreamRulesStore';\nimport UserNotification from 'util/UserNotification';\n\nconst useStreamRuleTypes = (): { data: Array | undefined } => {\n const { data } = useQuery(\n ['streams', 'rule-types'],\n () => StreamRulesStore.types(),\n {\n onError: (errorThrown) => {\n UserNotification.error(`Loading stream rule types failed with status: ${errorThrown}`,\n 'Could not load stream rule types');\n },\n keepPreviousData: true,\n staleTime: 60 * (60 * 1000), // 1 hour\n },\n );\n\n return ({ data });\n};\n\nexport default useStreamRuleTypes;\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 type { UrlQueryFilters } from 'components/common/EntityFilters/types';\n\n// Transform filters, so they can be used as URL query params, for example for the PaginationURL helper.\nconst FiltersForQueryParams = (filters: UrlQueryFilters) => {\n if (!filters) {\n return undefined;\n }\n\n return filters.entrySeq().flatMap(([attributeId, filterValues]) => (\n filterValues.map((value) => `${attributeId}:${value}`)\n )).toArray();\n};\n\nexport default FiltersForQueryParams;\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 { useQuery } from '@tanstack/react-query';\n\nimport UserNotification from 'util/UserNotification';\nimport type { SearchParams, Attribute } from 'stores/PaginationTypes';\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport StreamsStore from 'stores/streams/StreamsStore';\nimport FiltersForQueryParams from 'components/common/EntityFilters/FiltersForQueryParams';\n\nconst INITIAL_DATA = {\n pagination: { total: 0 },\n elements: [],\n attributes: [],\n};\n\ntype Options = {\n enabled: boolean,\n}\n\nconst useStreams = (searchParams: SearchParams, { enabled }: Options = { enabled: true }): {\n data: {\n elements: Array,\n pagination: { total: number }\n attributes: Array\n },\n refetch: () => void,\n isInitialLoading: boolean,\n} => {\n const { data, refetch, isInitialLoading } = useQuery(\n ['streams', 'overview', searchParams],\n () => StreamsStore.searchPaginated(\n searchParams.page,\n searchParams.pageSize,\n searchParams.query,\n {\n sort: searchParams?.sort.attributeId,\n order: searchParams?.sort.direction,\n filters: FiltersForQueryParams(searchParams.filters),\n },\n ),\n {\n onError: (errorThrown) => {\n UserNotification.error(`Loading streams failed with status: ${errorThrown}`,\n 'Could not load streams');\n },\n keepPreviousData: true,\n enabled,\n },\n );\n\n return ({\n data: data ?? INITIAL_DATA,\n refetch,\n isInitialLoading,\n });\n};\n\nexport default useStreams;\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 */\n\n// The actual stream types will be provided by the backend.\n// This map is only being used for frontend related logic.\nconst STREAM_RULE_TYPES = {\n FIELD_PRESENCE: 5,\n ALWAYS_MATCHES: 7,\n MATCH_INPUT: 8,\n};\n\nexport default STREAM_RULE_TYPES;\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';\nimport { Field } from 'formik';\nimport { useMemo } from 'react';\n\nimport Select from 'components/common/Select';\nimport { Input } from 'components/bootstrap';\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\n\ntype Props = {\n indexSets: Array\n help?: string,\n}\n\nconst IndexSetSelect = ({ indexSets, help }: Props) => {\n const indexSetOptions = useMemo(\n () => indexSets\n .filter((indexSet) => indexSet.can_be_default)\n .map(({ id, title }) => ({\n value: id,\n label: title,\n })),\n [indexSets],\n );\n\n return (\n \n {({ field: { name, value, onChange, onBlur }, meta: { error, touched } }) => (\n \n \n );\n};\n\nIndexSetSelect.defaultProps = {\n help: 'Messages that match this stream will be written to the configured index set.',\n};\n\nexport default IndexSetSelect;\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 */\n\nimport React, { useMemo, useCallback } from 'react';\nimport type { Stream } from 'src/stores/streams/StreamsStore';\nimport { Formik, Form } from 'formik';\n\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\nimport { FormikInput, ModalSubmit, InputOptionalInfo } from 'components/common';\nimport { Modal } from 'components/bootstrap';\nimport IndexSetSelect from 'components/streams/IndexSetSelect';\n\ntype FormValues = Partial>\n\nconst prepareInitialValues = (initialValues: FormValues, indexSets: Array) => ({\n index_set_id: initialValues.index_set_id ?? indexSets?.find((indexSet) => indexSet.default)?.id,\n description: initialValues.description ?? undefined,\n title: initialValues.title ?? undefined,\n remove_matches_from_default_stream: initialValues.remove_matches_from_default_stream ?? undefined,\n});\n\nconst validate = (values: FormValues) => {\n let errors = {};\n\n if (!values.title) {\n errors = { ...errors, title: 'Title is required' };\n }\n\n if (!values.index_set_id) {\n errors = { ...errors, index_set_id: 'Index set is required' };\n }\n\n return errors;\n};\n\ntype Props = {\n initialValues?: FormValues\n title: string,\n submitButtonText: string,\n submitLoadingText: string,\n onClose: () => void,\n onSubmit: (values: FormValues) => Promise\n indexSets: Array,\n}\n\nconst StreamModal = ({\n initialValues,\n title: modalTitle,\n submitButtonText,\n submitLoadingText,\n onClose,\n onSubmit,\n indexSets,\n}: Props) => {\n const _initialValues = useMemo(\n () => prepareInitialValues(initialValues, indexSets),\n [indexSets, initialValues],\n );\n\n const _onSubmit = useCallback(\n (values: FormValues) => onSubmit(values).then(() => onClose()),\n [onClose, onSubmit],\n );\n\n return (\n \n initialValues={_initialValues}\n onSubmit={_onSubmit}\n validate={validate}>\n {({ isSubmitting, isValidating }) => (\n \n )}\n \n \n );\n};\n\nStreamModal.defaultProps = {\n initialValues: {\n title: '',\n description: '',\n remove_matches_from_default_stream: false,\n },\n};\n\nexport default StreamModal;\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 PropTypes from 'prop-types';\nimport React, { useCallback, useState } from 'react';\n\nimport { Button } from 'components/bootstrap';\nimport StreamModal from 'components/streams/StreamModal';\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\ntype Props = {\n bsSize?: string\n bsStyle?: string,\n buttonText?: string,\n className?: string,\n indexSets: Array\n onCreate: (values: Partial) => Promise\n}\n\nconst CreateStreamButton = ({ bsSize, bsStyle, buttonText, className, indexSets, onCreate }: Props) => {\n const [showCreateModal, setShowCreateModal] = useState(false);\n const sendTelemetry = useSendTelemetry();\n\n const toggleCreateModal = useCallback(() => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.STREAMS.CREATE_FORM_MODAL_OPENED, {\n app_pathname: 'streams',\n });\n\n return setShowCreateModal((cur) => !cur);\n }, [sendTelemetry]);\n\n return (\n <>\n \n {showCreateModal && (\n \n )}\n >\n );\n};\n\nCreateStreamButton.propTypes = {\n buttonText: PropTypes.string,\n bsStyle: PropTypes.string,\n bsSize: PropTypes.string,\n className: PropTypes.string,\n onCreate: PropTypes.func.isRequired,\n indexSets: PropTypes.array.isRequired,\n};\n\nCreateStreamButton.defaultProps = {\n buttonText: 'Create stream',\n bsSize: undefined,\n bsStyle: undefined,\n className: undefined,\n};\n\nexport default CreateStreamButton;\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 */\n\nimport type { Sort } from 'stores/PaginationTypes';\n\nexport const ENTITY_TABLE_ID = 'streams';\nexport const DEFAULT_LAYOUT = {\n pageSize: 20,\n sort: { attributeId: 'title', direction: 'asc' } as Sort,\n displayedColumns: ['title', 'description', 'index_set_title', 'rules', 'throughput', 'disabled'],\n columnsOrder: ['title', 'description', 'index_set_title', 'rules', 'throughput', 'disabled', 'created_at'],\n};\n\nexport const ADDITIONAL_ATTRIBUTES = [\n { id: 'index_set_title', title: 'Index Set', sortable: true, permissions: ['indexsets:read'] },\n { id: 'throughput', title: 'Throughput' },\n { id: 'rules', title: 'Rules' },\n];\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 type { Attribute } from 'stores/PaginationTypes';\n\nexport const isDateAttribute = ({ type }: Attribute) => type === 'DATE';\nexport const isAttributeWithFilterOptions = ({ filter_options }: Attribute) => !!filter_options?.length;\nexport const isAttributeWithRelatedCollection = ({ related_collection }: Attribute) => !!related_collection;\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 type { Attribute } from 'stores/PaginationTypes';\nimport MenuItem from 'components/bootstrap/MenuItem';\nimport { defaultCompare } from 'logic/DefaultCompare';\nimport type { Filters } from 'components/common/EntityFilters/types';\n\ntype Props = {\n allActiveFilters: Filters | undefined,\n attribute: Attribute,\n filterValueRenderer: (value: unknown, title: string) => React.ReactNode | undefined,\n onSubmit: (filter: { title: string, value: string }) => void,\n}\n\nconst StaticOptionsList = ({ allActiveFilters, attribute, filterValueRenderer, onSubmit }: Props) => (\n <>\n {attribute.filter_options\n .sort(({ title: title1 }, { title: title2 }) => defaultCompare(title1.toLowerCase(), title2.toLowerCase()))\n .map(({ title, value }) => {\n const disabled = !!allActiveFilters?.get(attribute.id)?.find(({ value: filterValue }) => value === filterValue);\n\n return (\n \n );\n })}\n >\n);\n\nexport default StaticOptionsList;\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 */\n\nimport { useState, useEffect } from 'react';\n\nconst useIsKeyHeld = (buttonKey: string) => {\n const [shiftHeld, setShiftHeld] = useState(false);\n\n useEffect(() => {\n function downHandler({ key }) {\n if (key === buttonKey) {\n setShiftHeld(true);\n }\n }\n\n function upHandler({ key }) {\n if (key === buttonKey) {\n setShiftHeld(false);\n }\n }\n\n window.addEventListener('keydown', downHandler);\n window.addEventListener('keyup', upHandler);\n\n return () => {\n window.removeEventListener('keydown', downHandler);\n window.removeEventListener('keyup', upHandler);\n };\n }, [setShiftHeld, buttonKey]);\n\n return shiftHeld;\n};\n\nexport default useIsKeyHeld;\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 { useQuery } from '@tanstack/react-query';\n\nimport UserNotification from 'util/UserNotification';\nimport PaginationURL from 'util/PaginationURL';\nimport fetch from 'logic/rest/FetchProvider';\nimport { qualifyUrl } from 'util/URLUtils';\n\nconst DEFAULT_DATA = {\n pagination: {\n total: 0,\n },\n suggestions: [],\n};\n\ntype SearchParams = {\n page: number,\n pageSize: number,\n query: string,\n}\n\ntype PaginatedSuggestions = {\n pagination: { total: number }\n suggestions: Array<{ id: string, value: string }>,\n}\n\nconst fetchFilterValueSuggestions = async (collection: string, { query, page, pageSize }: SearchParams): Promise => {\n const additional = {\n collection,\n column: 'title',\n };\n const url = PaginationURL('entity_suggestions', page, pageSize, query, additional);\n\n return fetch('GET', qualifyUrl(url));\n};\n\nconst useFilterValueSuggestions = (\n attributeId: string,\n collection: string,\n searchParams: SearchParams,\n): {\n data: PaginatedSuggestions | undefined\n isInitialLoading: boolean\n} => {\n if (!collection) {\n throw Error(`Attribute meta data for attribute \"${attributeId}\" is missing related collection.`);\n }\n\n const { data, isInitialLoading } = useQuery(['filters', 'suggestions', searchParams], () => fetchFilterValueSuggestions(collection, searchParams), {\n onError: (errorThrown) => {\n UserNotification.error(`Loading suggestions for filter failed with status: ${errorThrown}`,\n 'Could not load filter suggestions');\n },\n retry: 0,\n keepPreviousData: true,\n });\n\n return {\n data: data ?? DEFAULT_DATA,\n isInitialLoading,\n };\n};\n\nexport default useFilterValueSuggestions;\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, { useState, useCallback } from 'react';\nimport debounce from 'lodash/debounce';\nimport styled, { css } from 'styled-components';\n\nimport { Input, ListGroupItem } from 'components/bootstrap';\nimport type { Attribute } from 'stores/PaginationTypes';\nimport type { Filters, Filter } from 'components/common/EntityFilters/types';\nimport { PaginatedList, NoSearchResult } from 'components/common';\nimport useIsKeyHeld from 'hooks/useIsKeyHeld';\nimport useFilterValueSuggestions from 'components/common/EntityFilters/hooks/useFilterValueSuggestions';\nimport Spinner from 'components/common/Spinner';\n\nconst DEFAULT_SEARCH_PARAMS = {\n query: '',\n pageSize: 10,\n page: 1,\n};\n\nconst Container = styled.div(({ theme }) => css`\n color: ${theme.colors.global.textDefault};\n padding: 3px 10px;\n`);\n\nconst SearchInput = styled(Input)`\n margin-bottom: 6px;\n`;\n\nconst StyledListGroup = styled.div`\n margin-bottom: 0;\n`;\n\nconst Hint = styled.div(({ theme }) => css`\n margin-top: 9px;\n font-size: ${theme.fonts.size.small};\n`);\n\ntype Props = {\n allActiveFilters: Filters | undefined,\n attribute: Attribute,\n filter: Filter | undefined\n filterValueRenderer: (value: unknown, title: string) => React.ReactNode | undefined,\n onSubmit: (filter: { title: string, value: string }, closeDropdown: boolean) => void,\n}\n\nconst SuggestionsList = ({ attribute, filterValueRenderer, onSubmit, allActiveFilters, filter }: Props) => {\n const isShiftHeld = useIsKeyHeld('Shift');\n const [searchParams, setSearchParams] = useState(DEFAULT_SEARCH_PARAMS);\n const { data: { pagination, suggestions }, isInitialLoading } = useFilterValueSuggestions(attribute.id, attribute.related_collection, searchParams);\n const handleSearchChange = useCallback((newSearchQuery: string) => {\n setSearchParams((cur) => ({ ...cur, page: DEFAULT_SEARCH_PARAMS.page, query: newSearchQuery }));\n }, [setSearchParams]);\n\n const handlePaginationChange = useCallback((page: number) => {\n setSearchParams((cur) => ({ ...cur, page }));\n }, []);\n\n const debounceOnSearch = debounce((value: string) => handleSearchChange(value), 1000);\n\n return (\n \n debounceOnSearch(value)} />\n {isInitialLoading && }\n\n {!!suggestions?.length && (\n \n \n {suggestions.map((suggestion) => {\n const disabled = !!allActiveFilters?.get(attribute.id)?.find(({ value }) => value === suggestion.id);\n\n const onClick = () => {\n if (disabled) {\n return;\n }\n\n onSubmit({\n value: suggestion.id,\n title: suggestion.value,\n }, !isShiftHeld);\n };\n\n return (\n \n {filterValueRenderer ? filterValueRenderer(suggestion.id, suggestion.value) : suggestion.value}\n \n );\n })}\n \n \n )}\n\n {!suggestions?.length && No entities found }\n\n {!filter && (\n \n \n Hold Shift to select multiple\n \n \n )}\n \n );\n};\n\nexport default SuggestionsList;\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 */\nexport const DATE_SEPARATOR = '><';\nexport const extractRangeFromString = (timeRange: string) => timeRange.split(DATE_SEPARATOR);\n// from and until need to be in the user time zone.\nexport const timeRangeTitle = (from: string, until: string) => `${from || 'All time'} - ${until || 'Now'}`;\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 styled, { css } from 'styled-components';\nimport { Formik, Form, Field } from 'formik';\nimport moment from 'moment/moment';\n\nimport useUserDateTime from 'hooks/useUserDateTime';\nimport AbsoluteDateInput from 'views/components/searchbar/time-range-filter/time-range-picker/AbsoluteDateInput';\nimport { ModalSubmit } from 'components/common';\nimport { Checkbox } from 'components/bootstrap';\nimport { isValidDate, toUTCFromTz, adjustFormat } from 'util/DateTime';\nimport { DATE_SEPARATOR, extractRangeFromString, timeRangeTitle } from 'components/common/EntityFilters/helpers/timeRange';\n\nimport type { Filter } from '../types';\n\ntype FormValues = {\n from: string | undefined,\n until: string | undefined,\n}\n\nconst Container = styled.div`\n padding: 3px 10px;\n max-width: 250px;\n`;\n\nconst Info = styled.p(({ theme }) => css`\n font-size: ${theme.fonts.size.small};\n margin: 0 0 10px;\n`);\n\nconst Sections = styled.div`\n margin-bottom: 10px;\n`;\n\nconst Section = styled.div`\n &:not(:last-child) {\n margin-bottom: 10px;\n }\n`;\n\nconst SectionHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 3px;\n`;\n\nconst StyledLabel = styled.label`\n margin: 0;\n`;\n\nconst StyledCheckbox = styled(Checkbox)`\n &.checkbox {\n margin: 0;\n }\n`;\n\nconst DateTimeFormat = styled.code`\n padding: 0;\n`;\n\nconst ErrorMessage = styled.span(({ theme }) => css`\n color: ${theme.colors.variant.dark.danger};\n font-size: ${theme.fonts.size.small};\n font-style: italic;\n padding: 3px 3px 9px;\n height: 1.5em;\n`);\n\nconst DateConfiguration = ({ name: fieldName, label, checkboxLabel }: {\n name: string,\n label: string,\n checkboxLabel: string\n}) => {\n const { formatTime } = useUserDateTime();\n\n return (\n \n {({ field: { value, onChange, name }, meta: { error } }) => {\n const _onChange = (newValue: string) => onChange({ target: { name, value: newValue } });\n const onChangeAllTime = () => _onChange(value ? undefined : formatTime(new Date(), 'complete'));\n\n return (\n \n \n {label} \n {checkboxLabel} \n \n \n {error && {error} }\n \n );\n }}\n \n );\n};\n\nconst useInitialValues = (filter: Filter | undefined) => {\n const { formatTime } = useUserDateTime();\n\n if (filter) {\n const [from, until] = extractRangeFromString(filter.value);\n\n return ({\n from: from ? formatTime(from, 'complete') : undefined,\n until: until ? formatTime(until, 'complete') : undefined,\n });\n }\n\n return {\n from: formatTime(moment().subtract(5, 'minutes'), 'complete'),\n until: undefined,\n };\n};\n\nconst formatError = 'Format must be: YYYY-MM-DD [HH:mm:ss[.SSS]].';\nconst rangeError = 'The \"Until\" date must come after the \"From\" date.';\n\nconst validate = (values: FormValues) => {\n let errors: {\n from?: string,\n until?: string,\n } = {};\n\n if (values.from && !isValidDate(values.from)) {\n errors = { ...errors, from: formatError };\n }\n\n if (values.until && !isValidDate(values.until)) {\n errors = { ...errors, until: formatError };\n }\n\n if (values.from >= values.until) {\n errors = { ...errors, until: rangeError };\n }\n\n if (!values.from && !values.until) {\n errors = { ...errors, from: 'Remove filter to search from \"All time\" until \"Now\".' };\n }\n\n return errors;\n};\n\ntype Props = {\n onSubmit: (filter: { title: string, value: string }) => void,\n filter: Filter | undefined,\n}\n\nconst DateRangeForm = ({ filter, onSubmit }: Props) => {\n const { userTimezone } = useUserDateTime();\n const initialValues = useInitialValues(filter);\n\n const _onSubmit = (formValues: FormValues) => {\n const toInternalTime = (date: string) => adjustFormat(toUTCFromTz(date, userTimezone), 'internal');\n const utcFrom = formValues.from ? toInternalTime(formValues.from) : '';\n const utcUntil = formValues.until ? toInternalTime(formValues.until) : '';\n\n onSubmit({\n title: timeRangeTitle(formValues.from, formValues.until),\n value: `${utcFrom}${DATE_SEPARATOR}${utcUntil}`,\n });\n };\n\n return (\n \n \n {({ isValid }) => (\n \n )}\n \n \n );\n};\n\nexport default DateRangeForm;\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 type { Attribute } from 'stores/PaginationTypes';\nimport type { Filters, Filter } from 'components/common/EntityFilters/types';\nimport MenuItem from 'components/bootstrap/MenuItem';\nimport {\n isAttributeWithFilterOptions,\n isAttributeWithRelatedCollection, isDateAttribute,\n} from 'components/common/EntityFilters/helpers/AttributeIdentification';\n\nimport StaticOptionsList from './StaticOptionsList';\nimport SuggestionsList from './SuggestionsList';\nimport DateRangeForm from './DateRangeForm';\n\ntype Props = {\n attribute: Attribute,\n filter?: Filter,\n filterValueRenderer: (value: Filter['value'], title: string) => React.ReactNode | undefined,\n onSubmit: (filter: { title: string, value: string }, closeDropdown?: boolean) => void,\n allActiveFilters: Filters | undefined,\n}\n\nexport const FilterConfiguration = ({\n allActiveFilters,\n attribute,\n filter,\n filterValueRenderer,\n onSubmit,\n}: Props) => (\n <>\n \n {isAttributeWithFilterOptions(attribute) && (\n \n )}\n {isAttributeWithRelatedCollection(attribute) && (\n \n )}\n {isDateAttribute(attribute) && (\n \n )}\n >\n);\n\nFilterConfiguration.defaultProps = {\n filter: undefined,\n};\n\nexport default FilterConfiguration;\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 FilterConfiguration from './FilterConfiguration';\n\nexport default FilterConfiguration;\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, { useState } from 'react';\nimport styled from 'styled-components';\n\nimport OverlayDropdownButton from 'components/common/OverlayDropdownButton';\nimport MenuItem from 'components/bootstrap/MenuItem';\nimport { HoverForHelp, Icon } from 'components/common';\nimport type { Attributes } from 'stores/PaginationTypes';\nimport type { Filters, Filter } from 'components/common/EntityFilters/types';\nimport FilterConfiguration from 'components/common/EntityFilters/FilterConfiguration';\n\nconst Container = styled.div`\n margin-left: 5px;\n`;\n\nconst AttributeSelect = ({\n attributes,\n setSelectedAttributeId,\n activeFilters,\n}: {\n attributes: Attributes,\n activeFilters: Filters | undefined,\n setSelectedAttributeId: React.Dispatch>\n}) => (\n <>\n \n {attributes.map(({ id, title, type }) => {\n const hasActiveFilter = !!activeFilters?.get(id)?.length;\n const disabled = type === 'BOOLEAN' ? hasActiveFilter : false;\n\n return (\n \n );\n })}\n >\n);\n\ntype Props = {\n filterableAttributes: Attributes,\n activeFilters: Filters | undefined,\n onCreateFilter: (attributeId: string, filter: Filter) => void,\n filterValueRenderers: { [attributeId: string]: (value: Filter['value'], title: string) => React.ReactNode } | undefined;\n}\n\nconst CreateFilterDropdown = ({ filterableAttributes, filterValueRenderers, onCreateFilter, activeFilters }: Props) => {\n const [selectedAttributeId, setSelectedAttributeId] = useState();\n const selectedAttribute = filterableAttributes.find(({ id }) => id === selectedAttributeId);\n const onToggleDropdown = () => setSelectedAttributeId(undefined);\n\n return (\n \n }\n bsSize=\"small\"\n buttonTitle=\"Create Filter\"\n onToggle={onToggleDropdown}\n closeOnSelect={false}\n dropdownMinWidth={120}\n dropdownZIndex={1000}>\n {({ toggleDropdown }) => {\n const _onCreateFilter = (filter: { title: string, value: string }, closeDropdown = true) => {\n if (closeDropdown) {\n toggleDropdown();\n }\n\n onCreateFilter(selectedAttributeId, { value: filter.value, title: filter.title });\n };\n\n if (!selectedAttributeId) {\n return (\n \n );\n }\n\n return (\n \n );\n }}\n \n \n );\n};\n\nexport default CreateFilterDropdown;\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, { useState } from 'react';\nimport styled from 'styled-components';\n\nimport { Button } from 'components/bootstrap';\nimport type { Attribute } from 'stores/PaginationTypes';\nimport { Icon } from 'components/common';\nimport type { Filter, Filters } from 'components/common/EntityFilters/types';\nimport OverlayDropdown from 'components/common/OverlayDropdown';\nimport FilterConfiguration from 'components/common/EntityFilters/FilterConfiguration';\n\nconst Container = styled.div`\n display: flex;\n`;\n\nconst CenteredButton = styled(Button)`\n display: flex;\n align-items: center;\n`;\n\ntype FilterValueDropdownProps = {\n attribute: Attribute,\n allActiveFilters: Filters | undefined,\n filter: Filter,\n filterValueRenderer: (value: Filter['value'], title: string) => React.ReactNode | undefined,\n onChangeFilter: (attributeId: string, prevValue: string, newFilter: Filter) => void,\n}\n\nconst FilterValueDropdown = ({ attribute, allActiveFilters, onChangeFilter, filterValueRenderer, filter }: FilterValueDropdownProps) => {\n const [show, setShowDropdown] = useState(false);\n const { value, title } = filter;\n\n const _onToggle = () => {\n setShowDropdown((cur) => !cur);\n };\n\n const onSubmit = (newFilter: { title: string, value: string }) => {\n onChangeFilter(attribute.id, value, { value: newFilter.value, title: newFilter.title });\n _onToggle();\n };\n\n return (\n (\n \n {filterValueRenderer ? filterValueRenderer(value, title) : title}\n \n )}\n placement=\"bottom\"\n onToggle={_onToggle}>\n \n \n );\n};\n\ntype Props = {\n attribute: Attribute,\n filter: Filter,\n allActiveFilters: Filters | undefined\n filterValueRenderer: (value: string, title: string) => React.ReactNode | undefined,\n onChangeFilter: (attributeId: string, prevValue: string, newFilter: Filter) => void,\n onDeleteFilter: (attributeId: string, filterId: string) => void,\n}\n\nconst ActiveFilter = ({\n attribute,\n allActiveFilters,\n filter,\n filterValueRenderer,\n onDeleteFilter,\n onChangeFilter,\n}: Props) => {\n const { value, title } = filter;\n\n const onChangeBooleanValue = () => {\n if (attribute.type === 'BOOLEAN') {\n const oppositeFilterOption = attribute.filter_options.find(({ value: optionVal }) => optionVal !== value);\n onChangeFilter(attribute.id, value, { value: oppositeFilterOption.value, title: oppositeFilterOption.title });\n }\n };\n\n return (\n \n {attribute.type === 'BOOLEAN' && (\n \n {filterValueRenderer ? filterValueRenderer(value, title) : title}\n \n )}\n {attribute.type !== 'BOOLEAN' && (\n \n )}\n onDeleteFilter(attribute.id, value)} title=\"Delete filter\">\n \n \n \n );\n};\n\nexport default ActiveFilter;\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 */\n\n// eslint-disable-next-line import/prefer-default-export\nexport const ROW_MIN_HEIGHT = 34;\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 styled from 'styled-components';\n\nimport type { Filters, Filter } from 'components/common/EntityFilters/types';\nimport type { Attributes } from 'stores/PaginationTypes';\nimport ActiveFilter from 'components/common/EntityFilters/ActiveFilter';\nimport { ROW_MIN_HEIGHT } from 'components/common/EntityFilters/Constants';\n\nconst FilterGroup = styled.div`\n display: inline-flex;\n align-items: center;\n min-height: ${ROW_MIN_HEIGHT}px;\n gap: 3px;\n flex-wrap: wrap;\n`;\n\nconst FilterGroupTitle = styled.div`\n margin-right: 3px;\n`;\n\ntype Props = {\n attributes: Attributes,\n filterValueRenderers: { [attributeId: string]: (value: unknown, title: string) => React.ReactNode } | undefined,\n filters: Filters,\n onChangeFilter: (attributeId: string, prevValue: string, newFilter: Filter) => void,\n onDeleteFilter: (attributeId: string, filterValue: string) => void,\n}\n\nconst ActiveFilters = ({ attributes = [], filters, filterValueRenderers, onDeleteFilter, onChangeFilter }: Props) => (\n <>\n {filters.entrySeq().map(([attributeId, filterValues]) => {\n const attribute = attributes.find(({ id }) => id === attributeId);\n\n return (\n \n \n {attribute.title}:\n \n {filterValues.map((filter) => (\n \n ))}\n \n );\n })}\n >\n);\n\nexport default ActiveFilters;\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 { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useCallback } from 'react';\nimport { OrderedMap } from 'immutable';\n\nimport fetch from 'logic/rest/FetchProvider';\nimport URLUtils from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport useUserDateTime from 'hooks/useUserDateTime';\nimport type { UrlQueryFilters, Filters, Filter } from 'components/common/EntityFilters/types';\nimport type { Attributes, Attribute } from 'stores/PaginationTypes';\nimport type { DateTime } from 'util/DateTime';\nimport {\n isDateAttribute,\n isAttributeWithFilterOptions,\n isAttributeWithRelatedCollection,\n} from 'components/common/EntityFilters/helpers/AttributeIdentification';\nimport { timeRangeTitle, extractRangeFromString } from 'components/common/EntityFilters/helpers/timeRange';\n\ntype CollectionsByAttributeId = {\n [attributeId: string]: string | undefined\n}\n\ntype RequestedFilterTitles = Array<{\n id: string,\n title; string,\n type: string,\n}>\n\nconst _collectionsByAttributeId = (attributesMetaData: Attributes) => attributesMetaData?.reduce(\n (col, { id, related_collection }) => {\n if (!related_collection) {\n return col;\n }\n\n return {\n ...col,\n [id]: related_collection,\n };\n }, {});\n\nconst _urlQueryFiltersWithoutTitle = (filters: UrlQueryFilters, collectionsByAttributeId: CollectionsByAttributeId) => (\n filters.entrySeq().reduce((col, [attributeId, filterValues]) => {\n const relatedCollection = collectionsByAttributeId?.[attributeId];\n\n if (!relatedCollection) {\n return col;\n }\n\n return col.set(attributeId, filterValues);\n }, OrderedMap>())\n);\n\nconst filtersWithoutTitlePayload = (filtersWithoutTitle: UrlQueryFilters, collectionsByAttributeId: CollectionsByAttributeId) => ({\n entities: filtersWithoutTitle.entrySeq().reduce((col, [attributeId, filterValues]) => {\n const relatedCollection = collectionsByAttributeId[attributeId];\n\n return [\n ...col,\n ...filterValues.map((value) => ({\n id: value,\n type: relatedCollection,\n })),\n ];\n }, []),\n});\n\nconst filterTitle = (\n attribute: Attribute,\n requestedFilterTitles,\n filterValue: string,\n formatTime: (dateTime: DateTime) => string,\n notPermittedEntities: Array | undefined,\n isErrorFetchingTitles: boolean,\n) => {\n if (isDateAttribute(attribute)) {\n const [from, until] = extractRangeFromString(filterValue);\n\n const fromDate = from ? formatTime(from) : undefined;\n const untilDate = until ? formatTime(until) : undefined;\n\n return timeRangeTitle(fromDate, untilDate);\n }\n\n if (isAttributeWithFilterOptions(attribute)) {\n const relatedOption = attribute.filter_options.find(({ value }) => value === filterValue);\n\n return relatedOption?.title ?? filterValue;\n }\n\n if (isAttributeWithRelatedCollection(attribute)) {\n if (isErrorFetchingTitles || notPermittedEntities?.includes(filterValue)) {\n return filterValue;\n }\n\n const fetchedTitle = requestedFilterTitles?.find(({ id, type }) => (type === attribute.related_collection && id === filterValue))?.title;\n\n return fetchedTitle ?? 'Loading...';\n }\n\n return filterValue;\n};\n\nconst _allFiltersWithTitle = (\n urlQueryFilters: UrlQueryFilters,\n requestedFilterTitles: RequestedFilterTitles,\n attributesMetaData: Attributes,\n formatTime: (dateTime: DateTime) => string,\n notPermittedEntities: Array | undefined,\n isErrorFetchingTitles: boolean,\n): Filters => (\n urlQueryFilters.entrySeq().reduce((col, [attributeId, filterValues]) => {\n const relatedAttribute = attributesMetaData?.find(({ id }) => id === attributeId);\n const filtersWithTitle: Array = filterValues.map((value) => {\n const title = filterTitle(relatedAttribute, requestedFilterTitles, value, formatTime, notPermittedEntities, isErrorFetchingTitles);\n\n return ({\n title,\n value,\n });\n });\n\n return col.set(attributeId, filtersWithTitle);\n }, OrderedMap>())\n);\n\nconst filtersWithTitleToResponse = (filtersWithTitle: Filters, attributesMetaData: Attributes) => filtersWithTitle.entrySeq().reduce(\n (col, [_attributeId, filters]) => {\n const relatedCollection = attributesMetaData?.find(({ id }) => id === _attributeId)?.related_collection;\n\n if (!relatedCollection) {\n return col;\n }\n\n return [\n ...col,\n ...filters.map(({ value, title }) => ({ id: value, type: relatedCollection, title })),\n ];\n }, []);\n\nconst fetchFilterTitles = (payload: { entities: Array<{ id: string, type: string }> }) => (\n fetch('POST', URLUtils.qualifyUrl('/system/catalog/entities/titles'), payload)\n);\n\nconst useFiltersWithTitle = (\n urlQueryFilters: UrlQueryFilters,\n attributesMetaData: Attributes,\n enabled: boolean = true,\n): {\n data: Filters\n onChange: (newFiltersWithTitle: Filters, newUrlQueryFilters: UrlQueryFilters) => void,\n isInitialLoading: boolean,\n} => {\n const queryClient = useQueryClient();\n const { formatTime } = useUserDateTime();\n const collectionsByAttributeId = _collectionsByAttributeId(attributesMetaData);\n const urlQueryFiltersWithoutTitle = _urlQueryFiltersWithoutTitle(urlQueryFilters, collectionsByAttributeId);\n const payload = filtersWithoutTitlePayload(urlQueryFiltersWithoutTitle, collectionsByAttributeId);\n const { data, isInitialLoading, isError } = useQuery(\n ['entity_titles', payload],\n () => fetchFilterTitles(payload),\n {\n onError: (errorThrown) => {\n UserNotification.error(`Loading filter titles failed with status: ${errorThrown}`,\n 'Could not load streams');\n },\n keepPreviousData: true,\n enabled: enabled && !!payload.entities.length,\n },\n );\n\n const cachedResponse = queryClient.getQueryData(['entity_titles', payload]);\n const requestedFilterTitles = (cachedResponse ?? data)?.entities;\n const allFiltersWithTitle = _allFiltersWithTitle(urlQueryFilters, requestedFilterTitles, attributesMetaData, formatTime, data?.not_permitted_to_view, isError);\n\n const onChange = useCallback((newFiltersWithTitle: Filters, newUrlQueryFilters: UrlQueryFilters) => {\n const newURLQueryFiltersWithoutTitle = _urlQueryFiltersWithoutTitle(newUrlQueryFilters, collectionsByAttributeId);\n const newPayload = filtersWithoutTitlePayload(newURLQueryFiltersWithoutTitle, collectionsByAttributeId);\n const newResponse = filtersWithTitleToResponse(newFiltersWithTitle, attributesMetaData);\n\n queryClient.setQueryData(['entity_titles', newPayload], { entities: newResponse });\n }, [attributesMetaData, collectionsByAttributeId, queryClient]);\n\n return ({\n data: allFiltersWithTitle,\n isInitialLoading,\n onChange,\n });\n};\n\nexport default useFiltersWithTitle;\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, { useCallback } from 'react';\nimport styled from 'styled-components';\nimport { OrderedMap } from 'immutable';\n\nimport CreateFilterDropdown from 'components/common/EntityFilters/CreateFilterDropdown';\nimport type { Attributes } from 'stores/PaginationTypes';\nimport type { Filters, Filter, UrlQueryFilters } from 'components/common/EntityFilters/types';\nimport ActiveFilters from 'components/common/EntityFilters/ActiveFilters';\nimport useFiltersWithTitle from 'components/common/EntityFilters/hooks/useFiltersWithTitle';\n\nimport { ROW_MIN_HEIGHT } from './Constants';\n\nconst SUPPORTED_ATTRIBUTE_TYPES = ['STRING', 'BOOLEAN', 'DATE'];\n\nconst FilterCreation = styled.div`\n display: inline-flex;\n height: ${ROW_MIN_HEIGHT}px;\n align-items: center;\n margin-left: 5px;\n \n && {\n margin-right: 10px;\n }\n`;\n\ntype Props = {\n attributes: Attributes,\n\n urlQueryFilters: UrlQueryFilters | undefined,\n setUrlQueryFilters: (urlQueryFilters: UrlQueryFilters) => void,\n filterValueRenderers?: { [attributeId: string]: (value: Filter['value'], title: string) => React.ReactNode };\n}\n\nconst EntityFilters = ({ attributes = [], filterValueRenderers, urlQueryFilters, setUrlQueryFilters }: Props) => {\n const {\n data: activeFilters,\n onChange: onChangeFiltersWithTitle,\n } = useFiltersWithTitle(\n urlQueryFilters,\n attributes,\n !!attributes,\n );\n\n const filterableAttributes = attributes.filter(({ filterable, type }) => filterable && SUPPORTED_ATTRIBUTE_TYPES.includes(type));\n\n const onChangeFilters = useCallback((newFilters: Filters) => {\n const newUrlQueryFilters = newFilters.entrySeq().reduce((col, [attributeId, filterCol]) => (\n col.set(attributeId, [...col.get(attributeId) ?? [], ...filterCol.map(({ value }) => value)])\n ), OrderedMap>());\n\n onChangeFiltersWithTitle(newFilters, newUrlQueryFilters);\n setUrlQueryFilters(newUrlQueryFilters);\n }, [onChangeFiltersWithTitle, setUrlQueryFilters]);\n\n const onCreateFilter = useCallback((attributeId: string, filter: Filter) => {\n onChangeFilters(OrderedMap(activeFilters).set(\n attributeId,\n [...(activeFilters?.get(attributeId) ?? []), filter],\n ));\n }, [activeFilters, onChangeFilters]);\n\n const onDeleteFilter = useCallback((attributeId: string, filterId: string) => {\n const filterGroup = activeFilters.get(attributeId);\n const updatedFilterGroup = filterGroup.filter(({ value }) => value !== filterId);\n\n if (updatedFilterGroup.length) {\n return onChangeFilters(activeFilters.set(attributeId, updatedFilterGroup));\n }\n\n return onChangeFilters(activeFilters.remove(attributeId));\n }, [activeFilters, onChangeFilters]);\n\n const onChangeFilter = useCallback((attributeId: string, prevValue: string, newFilter: Filter) => {\n const filterGroup = activeFilters.get(attributeId);\n const targetFilterIndex = filterGroup.findIndex(({ value }) => value === prevValue);\n const updatedFilterGroup = [...filterGroup];\n updatedFilterGroup[targetFilterIndex] = newFilter;\n\n onChangeFilters(activeFilters.set(attributeId, updatedFilterGroup));\n }, [activeFilters, onChangeFilters]);\n\n if (!filterableAttributes.length) {\n return null;\n }\n\n return (\n <>\n \n Filters\n \n\n \n {activeFilters && (\n \n )}\n >\n );\n};\n\nEntityFilters.defaultProps = {\n filterValueRenderers: undefined,\n};\n\nexport default EntityFilters;\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 EntityFilters from './EntityFilters';\n\nexport default EntityFilters;\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';\nimport styled, { css } from 'styled-components';\n\nconst StatusIndicator = styled.div<{ $disabled: 'true' | 'false' }>(({ $disabled, theme }) => css`\n display: flex;\n border-radius: 50%;\n height: 10px;\n width: 10px;\n background-color: ${$disabled === 'true' ? theme.colors.variant.warning : theme.colors.variant.success};\n margin-right: 3px;\n border: 1px solid ${theme.colors.gray[70]};\n`);\n\nconst FilterValueRenderers = {\n disabled: (value: 'true' | 'false', title: string) => (\n <>\n \n {title}\n >\n ),\n};\n\nexport default FilterValueRenderers;\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';\nimport { useState, useCallback } from 'react';\n\nimport { ShareButton, IfPermitted, HoverForHelp } from 'components/common';\nimport { ButtonToolbar, MenuItem } from 'components/bootstrap';\nimport type { Stream, StreamRule } from 'stores/streams/StreamsStore';\nimport StreamsStore from 'stores/streams/StreamsStore';\nimport { LinkContainer } from 'components/common/router';\nimport Routes from 'routing/Routes';\nimport HideOnCloud from 'util/conditional/HideOnCloud';\nimport { StartpageStore } from 'stores/users/StartpageStore';\nimport UserNotification from 'util/UserNotification';\nimport StreamRuleModal from 'components/streamrules/StreamRuleModal';\nimport EntityShareModal from 'components/permissions/EntityShareModal';\nimport { StreamRulesStore } from 'stores/streams/StreamRulesStore';\nimport useCurrentUser from 'hooks/useCurrentUser';\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\nimport OverlayDropdownButton from 'components/common/OverlayDropdownButton';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { MORE_ACTIONS_TITLE, MORE_ACTIONS_HOVER_TITLE } from 'components/common/EntityDataTable/Constants';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nimport StreamModal from '../StreamModal';\n\nconst DefaultStreamHelp = () => (\n Action not available for the default\n stream\n \n);\n\nconst StreamActions = ({\n stream,\n indexSets,\n}: {\n stream: Stream,\n indexSets: Array,\n}) => {\n const currentUser = useCurrentUser();\n const [showEntityShareModal, setShowEntityShareModal] = useState(false);\n const [showStreamRuleModal, setShowStreamRuleModal] = useState(false);\n const [showUpdateModal, setShowUpdateModal] = useState(false);\n const [showCloneModal, setShowCloneModal] = useState(false);\n const [changingStatus, setChangingStatus] = useState(false);\n const sendTelemetry = useSendTelemetry();\n const setStartpage = useCallback(() => StartpageStore.set(currentUser.id, 'stream', stream.id), [stream.id, currentUser.id]);\n\n const isDefaultStream = stream.is_default;\n const isNotEditable = !stream.is_editable;\n const onToggleStreamStatus = useCallback(async () => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.STREAMS.STREAM_ITEM_STATUS_TOGGLED, {\n app_pathname: 'streams',\n app_action_value: ' stream-item-status',\n event_details: {\n enabled: !stream.disabled,\n },\n });\n\n setChangingStatus(true);\n\n if (stream.disabled) {\n await StreamsStore.resume(stream.id, (response) => response);\n }\n\n // eslint-disable-next-line no-alert\n if (!stream.disabled && window.confirm(`Do you really want to pause stream '${stream.title}'?`)) {\n await StreamsStore.pause(stream.id, (response) => response);\n }\n\n setChangingStatus(false);\n }, [sendTelemetry, stream.disabled, stream.id, stream.title]);\n\n const toggleEntityShareModal = useCallback(() => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.STREAMS.STREAM_ITEM_SHARE_MODAL_OPENED, {\n app_pathname: 'streams',\n });\n\n setShowEntityShareModal((cur) => !cur);\n }, [sendTelemetry]);\n\n const toggleUpdateModal = useCallback(() => {\n setShowUpdateModal((cur) => !cur);\n }, []);\n\n const toggleCloneModal = useCallback(() => {\n setShowCloneModal((cur) => !cur);\n }, []);\n\n const toggleStreamRuleModal = useCallback(() => {\n setShowStreamRuleModal((cur) => !cur);\n }, []);\n\n const onDelete = useCallback(() => {\n // eslint-disable-next-line no-alert\n if (window.confirm('Do you really want to remove this stream?')) {\n sendTelemetry(TELEMETRY_EVENT_TYPE.STREAMS.STREAM_ITEM_DELETED, {\n app_pathname: 'streams',\n app_action_value: 'stream-item-delete',\n });\n\n StreamsStore.remove(stream.id, (response) => {\n UserNotification.success(`Stream '${stream.title}' was deleted successfully.`, 'Success');\n\n return response;\n }).catch((error) => {\n UserNotification.error(`An error occurred while deleting the stream. ${error}`);\n });\n }\n }, [sendTelemetry, stream.id, stream.title]);\n\n const onSaveStreamRule = useCallback((_streamRuleId: string, streamRule: StreamRule) => StreamRulesStore.create(stream.id, streamRule, () => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.STREAMS.STREAM_ITEM_RULE_SAVED, {\n app_pathname: 'streams',\n app_action_value: 'stream-item-rule',\n });\n\n UserNotification.success('Stream rule was created successfully.', 'Success');\n }), [sendTelemetry, stream.id]);\n\n const onUpdate = useCallback((newStream: Stream) => StreamsStore.update(stream.id, newStream, (response) => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.STREAMS.STREAM_ITEM_UPDATED, {\n app_pathname: 'streams',\n });\n\n UserNotification.success(`Stream '${newStream.title}' was updated successfully.`, 'Success');\n\n return response;\n }), [sendTelemetry, stream.id]);\n\n const onCloneSubmit = useCallback((newStream: Stream) => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.STREAMS.STREAM_ITEM_CLONED, {\n app_pathname: 'streams',\n });\n\n return StreamsStore.cloneStream(stream.id, newStream, (response) => {\n UserNotification.success(`Stream was successfully cloned as '${newStream.title}'.`, 'Success');\n\n return response;\n });\n }, [sendTelemetry, stream.id]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n\n \n \n \n\n \n \n \n \n {showUpdateModal && (\n \n )}\n {showCloneModal && (\n \n )}\n {showStreamRuleModal && (\n \n )}\n {showEntityShareModal && (\n \n )}\n \n );\n};\n\nexport default StreamActions;\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 */\n\nimport * as React from 'react';\nimport { useCallback, useState } from 'react';\nimport { Formik, Form } from 'formik';\n\nimport MenuItem from 'components/bootstrap/MenuItem';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\nimport StringUtils from 'util/StringUtils';\nimport type FetchError from 'logic/errors/FetchError';\nimport IndexSetSelect from 'components/streams/IndexSetSelect';\nimport UserNotification from 'util/UserNotification';\nimport { Streams } from '@graylog/server-api';\nimport { Modal } from 'components/bootstrap';\nimport ModalSubmit from 'components/common/ModalSubmit';\n\ntype ModalProps = {\n descriptor: string,\n indexSets: Array,\n refetchStreams: () => void,\n setSelectedStreamIds: (streamIds: Array) => void\n selectedStreamIds: Array,\n toggleShowModal: () => void,\n}\n\ntype AssignIndexSetFormValues = {\n index_set_id: string | undefined,\n}\n\nconst AssignIndexSetModal = ({\n selectedStreamIds,\n toggleShowModal,\n indexSets,\n refetchStreams,\n setSelectedStreamIds,\n descriptor,\n}: ModalProps) => {\n const modalTitle = `Assign Index Set To ${selectedStreamIds.length} ${StringUtils.capitalizeFirstLetter(descriptor)}`;\n const onSubmit = ({ index_set_id: indexSetId }: AssignIndexSetFormValues) => Streams.assignToIndexSet(indexSetId, selectedStreamIds).then(() => {\n refetchStreams();\n UserNotification.success(`Index set was assigned to ${selectedStreamIds.length} ${descriptor} successfully.`, 'Success');\n setSelectedStreamIds([]);\n toggleShowModal();\n }).catch((error: FetchError) => {\n UserNotification.error(`Assigning index set failed with status: ${error}`, 'Error');\n });\n\n const validate = ({ index_set_id }: AssignIndexSetFormValues) => {\n let errors = {};\n\n if (!index_set_id) {\n errors = { ...errors, index_set_id: 'Index set is required' };\n }\n\n return errors;\n };\n\n return (\n \n \n {({ isSubmitting, isValidating }) => (\n \n )}\n \n \n );\n};\n\ntype Props = {\n descriptor: string,\n indexSets: Array,\n onSelect?: () => void,\n refetchStreams: () => void,\n selectedStreamIds: Array\n setSelectedStreamIds: (streamIds: Array) => void,\n}\n\nconst AssignIndexSetAction = ({\n indexSets,\n selectedStreamIds,\n setSelectedStreamIds,\n descriptor,\n refetchStreams,\n onSelect,\n}: Props) => {\n const [showIndexSetModal, setShowIndexSetModal] = useState(false);\n\n const toggleAssignIndexSetModal = useCallback(() => {\n if (!showIndexSetModal && typeof onSelect === 'function') {\n onSelect();\n }\n\n setShowIndexSetModal((cur) => !cur);\n }, [onSelect, showIndexSetModal]);\n\n if (!isPermitted('indexsets:read')) {\n return null;\n }\n\n return (\n <>\n \n {showIndexSetModal && (\n \n )}\n >\n );\n};\n\nAssignIndexSetAction.defaultProps = {\n onSelect: undefined,\n};\n\nexport default AssignIndexSetAction;\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 { useCallback } from 'react';\nimport * as React from 'react';\n\nimport fetch from 'logic/rest/FetchProvider';\nimport { qualifyUrl } from 'util/URLUtils';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport MenuItem from 'components/bootstrap/MenuItem';\nimport UserNotification from 'util/UserNotification';\n\ntype Props = {\n descriptor: string,\n handleFailures: (failures: Array<{ entity_id: string }>, actionPastTense: string) => void,\n onSelect?: () => void\n refetchStreams: () => void,\n selectedStreamIds: Array,\n}\n\nconst StopStreamsAction = ({ selectedStreamIds, handleFailures, refetchStreams, descriptor, onSelect }: Props) => {\n const onStopStreams = useCallback(() => {\n if (typeof onSelect === 'function') {\n onSelect();\n }\n\n fetch(\n 'POST',\n qualifyUrl(ApiRoutes.StreamsApiController.bulk_pause().url),\n { entity_ids: selectedStreamIds },\n ).then(({ failures }) => handleFailures(failures, 'stopped'))\n .catch((error) => {\n UserNotification.error(`An error occurred while stopping streams. ${error}`);\n })\n .finally(() => {\n refetchStreams();\n });\n }, [handleFailures, onSelect, refetchStreams, selectedStreamIds]);\n\n return (\n \n );\n};\n\nStopStreamsAction.defaultProps = {\n onSelect: undefined,\n};\n\nexport default StopStreamsAction;\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 */\n\nimport * as React from 'react';\n\nimport MenuItem from 'components/bootstrap/MenuItem';\nimport { DEFAULT_TIMERANGE } from 'views/Constants';\nimport SearchLink from 'views/logic/search/SearchLink';\nimport { createElasticsearchQueryString } from 'views/logic/queries/Query';\n\nconst buildSearchLink = (streamIds: Array) => SearchLink.builder()\n .timerange(DEFAULT_TIMERANGE)\n .query(createElasticsearchQueryString())\n .streams(streamIds)\n .build()\n .toURL();\n\ntype Props = {\n selectedStreamIds: Array,\n}\n\nconst SearchStreamsAction = ({ selectedStreamIds }: Props) => {\n const link = buildSearchLink(selectedStreamIds);\n\n return (\n \n );\n};\n\nexport default SearchStreamsAction;\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 { useCallback } from 'react';\nimport * as React from 'react';\n\nimport fetch from 'logic/rest/FetchProvider';\nimport { qualifyUrl } from 'util/URLUtils';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport MenuItem from 'components/bootstrap/MenuItem';\nimport UserNotification from 'util/UserNotification';\n\ntype Props = {\n descriptor: string,\n handleFailures: (failures: Array<{ entity_id: string }>, actionPastTense: string) => void,\n onSelect?: () => void,\n refetchStreams: () => void,\n selectedStreamIds: Array,\n}\n\nconst StartStreamsActions = ({ selectedStreamIds, handleFailures, refetchStreams, descriptor, onSelect }: Props) => {\n const onStartStreams = useCallback(() => {\n if (typeof onSelect === 'function') {\n onSelect();\n }\n\n fetch(\n 'POST',\n qualifyUrl(ApiRoutes.StreamsApiController.bulk_resume().url),\n { entity_ids: selectedStreamIds },\n ).then(({ failures }) => handleFailures(failures, 'started'))\n .catch((error) => {\n UserNotification.error(`An error occurred while starting streams. ${error}`);\n })\n .finally(() => {\n refetchStreams();\n });\n }, [handleFailures, onSelect, refetchStreams, selectedStreamIds]);\n\n return (\n \n );\n};\n\nStartStreamsActions.defaultProps = {\n onSelect: undefined,\n};\n\nexport default StartStreamsActions;\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 BulkActions from './BulkActions';\n\nexport default BulkActions;\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';\nimport { useCallback } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport StringUtils from 'util/StringUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport { qualifyUrl } from 'util/URLUtils';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport UserNotification from 'util/UserNotification';\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\nimport MenuItem from 'components/bootstrap/MenuItem';\nimport BulkActionsDropdown from 'components/common/EntityDataTable/BulkActionsDropdown';\nimport AssignIndexSetAction from 'components/streams/StreamsOverview/BulkActions/AssignIndexSetAction';\nimport StopStreamsAction from 'components/streams/StreamsOverview/BulkActions/StopStreamsAction';\nimport SearchStreamsAction from 'components/streams/StreamsOverview/BulkActions/SearchStreamsAction';\n\nimport StartStreamsAction from './StartStreamsAction';\n\ntype Props = {\n selectedStreamIds: Array,\n setSelectedStreamIds: (streamIds: Array) => void,\n indexSets: Array\n}\n\nconst BulkActions = ({ selectedStreamIds, setSelectedStreamIds, indexSets }: Props) => {\n const queryClient = useQueryClient();\n\n const selectedItemsAmount = selectedStreamIds?.length;\n const descriptor = StringUtils.pluralize(selectedItemsAmount, 'stream', 'streams');\n const refetchStreams = useCallback(() => queryClient.invalidateQueries(['streams', 'overview']), [queryClient]);\n\n const handleFailures = useCallback((failures: Array<{ entity_id: string }>, actionPastTense: string) => {\n if (failures?.length) {\n const notDeletedStreamIds = failures.map(({ entity_id }) => entity_id);\n setSelectedStreamIds(notDeletedStreamIds);\n UserNotification.error(`${notDeletedStreamIds.length} out of ${selectedItemsAmount} selected ${descriptor} could not be ${actionPastTense}.`);\n } else {\n setSelectedStreamIds([]);\n UserNotification.success(`${selectedItemsAmount} ${descriptor} ${StringUtils.pluralize(selectedItemsAmount, 'was', 'were')} ${actionPastTense} successfully.`, 'Success');\n }\n }, [descriptor, selectedItemsAmount, setSelectedStreamIds]);\n\n const onDelete = useCallback(() => {\n // eslint-disable-next-line no-alert\n if (window.confirm(`Do you really want to remove ${selectedItemsAmount} ${descriptor}? This action cannot be undone.`)) {\n fetch(\n 'POST',\n qualifyUrl(ApiRoutes.StreamsApiController.bulk_delete().url),\n { entity_ids: selectedStreamIds },\n ).then(({ failures }) => handleFailures(failures, 'deleted')).catch((error) => {\n UserNotification.error(`An error occurred while deleting streams. ${error}`);\n }).finally(() => {\n refetchStreams();\n });\n }\n }, [descriptor, handleFailures, refetchStreams, selectedItemsAmount, selectedStreamIds]);\n\n return (\n \n \n \n \n\n \n\n \n \n );\n};\n\nexport default BulkActions;\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 */\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 */\n\nimport React from 'react';\n\nimport StreamRuleList from 'components/streamrules/StreamRuleList';\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport { Pluralize } from 'components/common';\n\nconst verbalMatchingType = (matchingType: 'OR' | 'AND') => {\n switch (matchingType) {\n case 'OR':\n return 'at least one';\n case 'AND':\n default:\n return 'all';\n }\n};\n\ntype Props = {\n stream: Stream\n}\n\nconst ExpandedRulesSection = ({ stream }: Props) => (\n <>\n \n Must match {verbalMatchingType(stream.matching_type)} of the {stream.rules.length} configured stream .\n
\n \n >\n);\n\nexport default ExpandedRulesSection;\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';\nimport { useCallback, useState } from 'react';\n\nimport type { Stream, StreamRule } from 'stores/streams/StreamsStore';\nimport { Button } from 'components/bootstrap';\nimport StreamRuleModal from 'components/streamrules/StreamRuleModal';\nimport { StreamRulesStore } from 'stores/streams/StreamRulesStore';\nimport UserNotification from 'util/UserNotification';\nimport Routes from 'routing/Routes';\nimport { LinkContainer } from 'components/common/router';\nimport { IfPermitted } from 'components/common';\n\ntype Props = {\n stream: Stream,\n};\n\nconst RulesSectionActions = ({ stream }: Props) => {\n const [showAddRuleModal, setShowAddRuleModal] = useState(false);\n\n const isDefaultStream = stream.is_default;\n const isNotEditable = !stream.is_editable;\n\n const toggleAddRuleModal = useCallback(() => {\n setShowAddRuleModal((cur) => !cur);\n }, []);\n\n const onSaveStreamRule = useCallback((_streamRuleId: string, streamRule: StreamRule) => (\n StreamRulesStore.create(stream.id, streamRule, () => UserNotification.success('Stream rule was created successfully.', 'Success'))\n ), [stream.id]);\n\n return (\n <>\n \n \n \n \n \n \n \n \n {showAddRuleModal && (\n \n )}\n >\n );\n};\n\nexport default RulesSectionActions;\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, { useCallback, useMemo } from 'react';\n\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport StreamActions from 'components/streams/StreamsOverview/StreamActions';\nimport BulkActions from 'components/streams/StreamsOverview/BulkActions';\nimport ExpandedRulesSection from 'components/streams/StreamsOverview/ExpandedRulesSection';\nimport ExpandedRulesActions from 'components/streams/StreamsOverview/ExpandedRulesActions';\n\nconst useTableElements = ({ indexSets }: { indexSets: Array }) => {\n const entityActions = useCallback((listItem: Stream) => (\n \n ), [indexSets]);\n\n const bulkActions = useCallback((\n selectedStreamIds: Array,\n setSelectedStreamIds: (streamIds: Array) => void,\n ) => (\n \n ), [indexSets]);\n\n const renderExpandedRules = useCallback((stream: Stream) => (\n \n ), []);\n const renderExpandedRulesActions = useCallback((stream: Stream) => (\n \n ), []);\n\n const expandedSections = useMemo(() => ({\n rules: {\n title: 'Rules',\n content: renderExpandedRules,\n actions: renderExpandedRulesActions,\n },\n }), [renderExpandedRules, renderExpandedRulesActions]);\n\n return {\n entityActions,\n bulkActions,\n expandedSections,\n };\n};\n\nexport default useTableElements;\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 { useQueryParam, ArrayParam } from 'use-query-params';\nimport { useMemo, useCallback } from 'react';\nimport { OrderedMap } from 'immutable';\n\nimport type { UrlQueryFilters } from 'components/common/EntityFilters/types';\n\nconst useUrlQueryFilters = (): [UrlQueryFilters, (filters: UrlQueryFilters) => void] => {\n const [pureUrlQueryFilters, setPureUrlQueryFilters] = useQueryParam('filters', ArrayParam);\n\n const filtersFromQuery = useMemo(() => (pureUrlQueryFilters ?? []).reduce((col, filter) => {\n const [attributeId, filterValue] = filter.split(/=(.*)/);\n\n return col.set(attributeId, [...(col.get(attributeId) ?? []), filterValue]);\n }, OrderedMap>()), [pureUrlQueryFilters]);\n\n const setFilterValues = useCallback((newFilters: UrlQueryFilters) => {\n const newPureUrlQueryFilters = newFilters.entrySeq().reduce((col, [attributeId, filters]) => (\n [...col, ...filters.map((value) => `${attributeId}=${value}`)]\n ), []);\n\n setPureUrlQueryFilters(newPureUrlQueryFilters);\n }, [setPureUrlQueryFilters]);\n\n return [filtersFromQuery, setFilterValues];\n};\n\nexport default useUrlQueryFilters;\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 type { Stream } from 'stores/streams/StreamsStore';\nimport useCurrentUser from 'hooks/useCurrentUser';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\nimport { Link } from 'components/common/router';\nimport Routes from 'routing/Routes';\n\ntype Props = {\n stream: Stream,\n indexSets: Array\n};\n\nconst IndexSetCell = ({ stream, indexSets }: Props) => {\n const currentUser = useCurrentUser();\n\n if (!isPermitted(currentUser.permissions, ['indexsets:read'])) {\n return null;\n }\n\n const indexSet = indexSets.find((is) => is.id === stream.index_set_id) || indexSets.find((is) => is.default);\n\n return (\n indexSet ? (\n \n {indexSet.title}\n \n ) : not found\n );\n};\n\nexport default IndexSetCell;\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';\nimport { useEffect } from 'react';\n\nimport { MetricsActions, MetricsStore } from 'stores/metrics/MetricsStore';\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport { Spinner } from 'components/common';\nimport { useStore } from 'stores/connect';\n\ntype Props = {\n stream: Stream,\n};\n\nconst ThroughputCell = ({ stream }: Props) => {\n const { metrics } = useStore(MetricsStore);\n const metricName = `org.graylog2.plugin.streams.Stream.${stream.id}.incomingMessages.1-sec-rate`;\n\n useEffect(() => {\n MetricsActions.addGlobal(metricName);\n\n return () => {\n MetricsActions.removeGlobal(metricName);\n };\n });\n\n if (!metrics) {\n return ;\n }\n\n const throughput = Object.keys(metrics)\n .map((nodeId) => {\n const metricDefinition = metrics[nodeId]?.[metricName];\n\n return (metricDefinition?.metric && 'value' in metricDefinition.metric) ? metricDefinition.metric.value : 0;\n })\n .reduce((throughput1, throughput2) => throughput1 + throughput2, 0);\n\n return (<>{throughput} msg/s>);\n};\n\nexport default ThroughputCell;\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';\nimport styled, { css } from 'styled-components';\nimport { useCallback } from 'react';\n\nimport { Icon } from 'components/common';\nimport { Label } from 'components/bootstrap';\nimport { StreamsStore } from 'stores/streams/StreamsStore';\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\n\nconst StatusLabel = styled(Label)(({ $clickable }: { $clickable: boolean }) => css`\n cursor: ${$clickable ? 'pointer' : 'default'};\n display: inline-flex;\n justify-content: center;\n gap: 4px;\n`);\n\nconst Spacer = styled.div`\n border-left: 1px solid currentColor;\n height: 1em;\n`;\n\nconst _title = (disabled: boolean, disabledChange: boolean, description: string) => {\n if (disabledChange) {\n return description;\n }\n\n return disabled ? 'Start stream' : 'Pause stream';\n};\n\ntype Props = {\n stream: Stream,\n};\n\nconst StatusCell = ({ stream }: Props) => {\n const disableChange = stream.is_default || !stream.is_editable;\n const description = stream.disabled ? 'Paused' : 'Running';\n const title = _title(stream.disabled, disableChange, description);\n const sendTelemetry = useSendTelemetry();\n\n const toggleStreamStatus = useCallback(async () => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.STREAMS.STREAM_ITEM_STATUS_TOGGLED, {\n app_pathname: 'streams',\n app_action_value: 'stream-item-status',\n event_details: {\n enabled: !stream.disabled,\n },\n });\n\n if (stream.disabled) {\n await StreamsStore.resume(stream.id, (response) => response);\n }\n\n // eslint-disable-next-line no-alert\n if (!stream.disabled && window.confirm(`Do you really want to pause stream '${stream.title}'?`)) {\n await StreamsStore.pause(stream.id, (response) => response);\n }\n }, [sendTelemetry, stream.disabled, stream.id, stream.title]);\n\n return (\n \n {stream.disabled ? 'Paused' : 'Running'}\n {!disableChange && (\n <>\n \n \n >\n )}\n \n );\n};\n\nexport default StatusCell;\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 { useContext } from 'react';\n\nimport ExpandedEntitiesSectionsContext from '../contexts/ExpandedSectionsContext';\n\nconst useExpandedSections = () => {\n const currentUser = useContext(ExpandedEntitiesSectionsContext);\n\n if (!currentUser) {\n throw new Error('useExpandedSections hook needs to be used inside ExpandedSectionsProvider');\n }\n\n return currentUser;\n};\n\nexport default useExpandedSections;\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 */\n\nimport { useRef, useCallback } from 'react';\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport useExpandedSections from 'components/common/EntityDataTable/hooks/useExpandedSections';\nimport { CountBadge } from 'components/common';\n\nconst StyledCountBadge = styled(CountBadge)`\n cursor: pointer;\n`;\n\ntype Props = {\n stream: Stream\n}\n\nconst StreamRulesCell = ({ stream }: Props) => {\n const buttonRef = useRef();\n const { toggleSection, expandedSections } = useExpandedSections();\n\n const toggleRulesSection = useCallback(() => toggleSection(stream.id, 'rules'), [stream.id, toggleSection]);\n\n if (stream.is_default || !stream.is_editable) {\n return null;\n }\n\n const streamRulesSectionIsOpen = expandedSections?.[stream.id]?.includes('rules');\n\n return (\n \n {stream.rules.length}\n \n );\n};\n\nexport default StreamRulesCell;\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';\nimport styled from 'styled-components';\n\nimport type { Stream, StreamRule } from 'stores/streams/StreamsStore';\nimport { Label } from 'components/bootstrap';\nimport { Link } from 'components/common/router';\nimport Routes from 'routing/Routes';\nimport type { ColumnRenderers } from 'components/common/EntityDataTable';\nimport IndexSetCell from 'components/streams/StreamsOverview/cells/IndexSetCell';\nimport ThroughputCell from 'components/streams/StreamsOverview/cells/ThroughputCell';\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\n\nimport StatusCell from './cells/StatusCell';\nimport StreamRulesCell from './cells/StreamRulesCell';\n\nconst DefaultLabel = styled(Label)`\n display: inline-flex;\n margin-left: 5px;\n vertical-align: inherit;\n`;\n\nconst customColumnRenderers = (indexSets: Array): ColumnRenderers => ({\n attributes: {\n title: {\n renderCell: (title: string, stream) => (\n <>\n {title}\n {stream.is_default && Default }\n >\n ),\n },\n index_set_title: {\n renderCell: (_index_set_title: string, stream) => ,\n width: 0.7,\n },\n throughput: {\n renderCell: (_throughput: string, stream) => ,\n staticWidth: 120,\n },\n disabled: {\n renderCell: (_disabled: string, stream) => ,\n staticWidth: 100,\n },\n rules: {\n renderCell: (_rules: StreamRule[], stream) => ,\n staticWidth: 70,\n },\n },\n});\n\nexport default customColumnRenderers;\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 { useCallback } from 'react';\n\nimport type { Sort } from 'stores/PaginationTypes';\n\nconst useTableEventHandlers = ({ updateTableLayout, paginationQueryParameter, setQuery }: { updateTableLayout, paginationQueryParameter, setQuery }) => {\n const onPageSizeChange = useCallback((newPageSize: number) => {\n paginationQueryParameter.setPagination({ page: 1, pageSize: newPageSize });\n updateTableLayout({ perPage: newPageSize });\n }, [paginationQueryParameter, updateTableLayout]);\n\n const onSearch = useCallback((newQuery: string) => {\n paginationQueryParameter.resetPage();\n setQuery(newQuery);\n }, [paginationQueryParameter, setQuery]);\n\n const onSearchReset = useCallback(() => {\n onSearch('');\n }, [onSearch]);\n\n const onColumnsChange = useCallback((displayedAttributes: Array) => {\n updateTableLayout({ displayedAttributes });\n }, [updateTableLayout]);\n\n const onSortChange = useCallback((newSort: Sort) => {\n paginationQueryParameter.resetPage();\n updateTableLayout({ sort: newSort });\n }, [paginationQueryParameter, updateTableLayout]);\n\n return {\n onPageSizeChange,\n onSearch,\n onSearchReset,\n onColumnsChange,\n onSortChange,\n };\n};\n\nexport default useTableEventHandlers;\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 PropTypes from 'prop-types';\nimport React, { useEffect, useMemo, useCallback } from 'react';\nimport { useQueryParam, StringParam } from 'use-query-params';\n\nimport { PaginatedList, SearchForm, NoSearchResult } from 'components/common';\nimport Spinner from 'components/common/Spinner';\nimport QueryHelper from 'components/common/QueryHelper';\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport StreamsStore from 'stores/streams/StreamsStore';\nimport { StreamRulesStore } from 'stores/streams/StreamRulesStore';\nimport usePaginationQueryParameter from 'hooks/usePaginationQueryParameter';\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\nimport EntityDataTable from 'components/common/EntityDataTable';\nimport useStreams from 'components/streams/hooks/useStreams';\nimport useUpdateUserLayoutPreferences from 'components/common/EntityDataTable/hooks/useUpdateUserLayoutPreferences';\nimport useTableLayout from 'components/common/EntityDataTable/hooks/useTableLayout';\nimport {\n DEFAULT_LAYOUT,\n ENTITY_TABLE_ID,\n ADDITIONAL_ATTRIBUTES,\n} from 'components/streams/StreamsOverview/Constants';\nimport EntityFilters from 'components/common/EntityFilters';\nimport FilterValueRenderers from 'components/streams/StreamsOverview/FilterValueRenderers';\nimport useTableElements from 'components/streams/StreamsOverview/hooks/useTableComponents';\nimport useUrlQueryFilters from 'components/common/EntityFilters/hooks/useUrlQueryFilters';\nimport type { UrlQueryFilters } from 'components/common/EntityFilters/types';\n\nimport CustomColumnRenderers from './ColumnRenderers';\nimport useTableEventHandlers from './hooks/useTableEventHandlers';\n\nconst useRefetchStreamsOnStoreChange = (refetchStreams: () => void) => {\n useEffect(() => {\n StreamsStore.onChange(() => refetchStreams());\n StreamRulesStore.onChange(() => refetchStreams());\n\n return () => {\n StreamsStore.unregister(() => refetchStreams());\n StreamRulesStore.unregister(() => refetchStreams());\n };\n }, [refetchStreams]);\n};\n\ntype Props = {\n indexSets: Array\n}\n\nconst StreamsOverview = ({ indexSets }: Props) => {\n const [urlQueryFilters, setUrlQueryFilters] = useUrlQueryFilters();\n const [query, setQuery] = useQueryParam('query', StringParam);\n const { layoutConfig, isInitialLoading: isLoadingLayoutPreferences } = useTableLayout({\n entityTableId: ENTITY_TABLE_ID,\n defaultPageSize: DEFAULT_LAYOUT.pageSize,\n defaultDisplayedAttributes: DEFAULT_LAYOUT.displayedColumns,\n defaultSort: DEFAULT_LAYOUT.sort,\n });\n const paginationQueryParameter = usePaginationQueryParameter(undefined, layoutConfig.pageSize, false);\n const { mutate: updateTableLayout } = useUpdateUserLayoutPreferences(ENTITY_TABLE_ID);\n const { data: paginatedStreams, isInitialLoading: isLoadingStreams, refetch: refetchStreams } = useStreams({\n query: query,\n page: paginationQueryParameter.page,\n pageSize: layoutConfig.pageSize,\n sort: layoutConfig.sort,\n filters: urlQueryFilters,\n }, { enabled: !isLoadingLayoutPreferences });\n const { entityActions, expandedSections, bulkActions } = useTableElements({ indexSets });\n const {\n onPageSizeChange,\n onSearch,\n onSearchReset,\n onColumnsChange,\n onSortChange,\n } = useTableEventHandlers({\n paginationQueryParameter,\n updateTableLayout,\n setQuery,\n });\n\n const onChangeFilters = useCallback((newUrlQueryFilters: UrlQueryFilters) => {\n paginationQueryParameter.resetPage();\n setUrlQueryFilters(newUrlQueryFilters);\n }, [paginationQueryParameter, setUrlQueryFilters]);\n\n useRefetchStreamsOnStoreChange(refetchStreams);\n\n const columnRenderers = useMemo(() => CustomColumnRenderers(indexSets), [indexSets]);\n const columnDefinitions = useMemo(\n () => ([...(paginatedStreams?.attributes ?? []), ...ADDITIONAL_ATTRIBUTES]),\n [paginatedStreams?.attributes],\n );\n\n if (isLoadingLayoutPreferences || isLoadingStreams) {\n return ;\n }\n\n const { elements, attributes, pagination: { total } } = paginatedStreams;\n\n return (\n \n \n }>\n \n \n \n \n {elements?.length === 0 ? (\n No streams have been found \n ) : (\n data={elements}\n visibleColumns={layoutConfig.displayedAttributes}\n columnsOrder={DEFAULT_LAYOUT.columnsOrder}\n onColumnsChange={onColumnsChange}\n onSortChange={onSortChange}\n onPageSizeChange={onPageSizeChange}\n pageSize={layoutConfig.pageSize}\n bulkSelection={{ actions: bulkActions }}\n expandedSectionsRenderer={expandedSections}\n activeSort={layoutConfig.sort}\n rowActions={entityActions}\n actionsCellWidth={160}\n columnRenderers={columnRenderers}\n columnDefinitions={columnDefinitions}\n entityAttributesAreCamelCase={false} />\n )}\n \n \n );\n};\n\nStreamsOverview.propTypes = {\n indexSets: PropTypes.array.isRequired,\n};\n\nexport default StreamsOverview;\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 StreamsOverview from './StreamsOverview';\n\nexport default StreamsOverview;\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, { useEffect } from 'react';\n\nimport { Row, Col } from 'components/bootstrap';\nimport CreateStreamButton from 'components/streams/CreateStreamButton';\nimport StreamsOverview from 'components/streams/StreamsOverview';\nimport PageHeader from 'components/common/PageHeader';\nimport { DocumentTitle, IfPermitted, Spinner } from 'components/common';\nimport DocsHelper from 'util/DocsHelper';\nimport UserNotification from 'util/UserNotification';\nimport type { Stream } from 'stores/streams/StreamsStore';\nimport StreamsStore from 'stores/streams/StreamsStore';\nimport { IndexSetsActions, IndexSetsStore } from 'stores/indices/IndexSetsStore';\nimport { useStore } from 'stores/connect';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\nconst StreamsPage = () => {\n const { indexSets } = useStore(IndexSetsStore);\n const sendTelemetry = useSendTelemetry();\n\n const onSave = (stream: Stream) => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.STREAMS.NEW_STREAM_CREATED, {\n app_pathname: 'streams',\n });\n\n return StreamsStore.save(stream, () => {\n UserNotification.success('Stream has been successfully created.', 'Success');\n });\n };\n\n useEffect(() => {\n IndexSetsActions.list(false);\n }, []);\n\n const isLoading = !indexSets;\n\n if (isLoading) {\n return ;\n }\n\n return (\n \n \n \n \n )}>\n \n You can route incoming messages into streams by applying rules against them. Messages matching\n the rules of a stream are routed into it. A message can also be routed into multiple streams.\n \n \n\n \n \n \n \n
\n \n );\n};\n\nexport default StreamsPage;\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 Reflux from 'reflux';\nimport PropTypes from 'prop-types';\nimport isArray from 'lodash/isArray';\n\nimport ApiRoutes from 'routing/ApiRoutes';\nimport fetch from 'logic/rest/FetchProvider';\nimport { qualifyUrl } from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport { singletonStore, singletonActions } from 'logic/singleton';\nimport type { RetentionStrategyConfig, RotationStrategyConfig } from 'components/indices/Types';\nimport { RetentionStrategyConfigPropType, RotationStrategyConfigPropType } from 'components/indices/Types';\n\nexport const IndexSetPropType = PropTypes.shape({\n can_be_default: PropTypes.bool,\n id: PropTypes.string,\n title: PropTypes.string,\n description: PropTypes.string.isRequired,\n index_prefix: PropTypes.string.isRequired,\n shards: PropTypes.number.isRequired,\n replicas: PropTypes.number.isRequired,\n rotation_strategy_class: PropTypes.string.isRequired,\n rotation_strategy: RotationStrategyConfigPropType.isRequired,\n retention_strategy_class: PropTypes.string.isRequired,\n retention_strategy: RetentionStrategyConfigPropType.isRequired,\n creation_date: PropTypes.string,\n index_analyzer: PropTypes.string.isRequired,\n index_optimization_max_num_segments: PropTypes.number.isRequired,\n index_optimization_disabled: PropTypes.bool.isRequired,\n field_type_refresh_interval: PropTypes.number.isRequired,\n index_template_type: PropTypes.string,\n writable: PropTypes.bool.isRequired,\n default: PropTypes.bool.isRequired,\n});\n\nexport type IndexSet = {\n can_be_default?: boolean,\n id?: string,\n title: string,\n description: string,\n index_prefix: string,\n shards: number,\n replicas: number,\n rotation_strategy_class: string,\n rotation_strategy: RotationStrategyConfig,\n retention_strategy_class: string,\n retention_strategy: RetentionStrategyConfig\n creation_date?: string,\n index_analyzer: string,\n index_optimization_max_num_segments: number,\n index_optimization_disabled: boolean,\n field_type_refresh_interval: number,\n index_template_type?: string,\n writable: boolean,\n default?: boolean,\n};\n\nexport type IndexSetStats = {\n documents: number,\n indices: number,\n size: number,\n}\n\ntype IndexSetsStats = {\n [key: string]: IndexSetStats\n}\n\ntype IndexSetsResponseType = {\n total: number,\n index_sets: Array,\n stats: IndexSetsStats,\n};\n\nexport type IndexSetsStoreState = {\n indexSetsCount: number,\n indexSets: Array,\n indexSetStats: IndexSetsStats,\n indexSet: IndexSet,\n globalIndexSetStats: IndexSetStats\n}\n\ntype IndexSetsActionsType = {\n list: (stats: boolean) => Promise,\n listPaginated: (skip: number, limit: number, stats: boolean) => Promise,\n get: (indexSetId: string) => Promise,\n update: (indexSet: IndexSet) => Promise,\n create: (indexSet: IndexSet) => Promise,\n delete: (indexSet: IndexSet, deleteIndices: boolean) => Promise,\n searchPaginated: (searchTerm: string, skip: number, limit: number, stats: boolean) => Promise,\n setDefault: (indexSet: IndexSet) => Promise,\n stats: () => Promise,\n};\n\nexport const IndexSetsActions = singletonActions(\n 'core.IndexSets',\n () => Reflux.createActions({\n list: { asyncResult: true },\n listPaginated: { asyncResult: true },\n get: { asyncResult: true },\n update: { asyncResult: true },\n create: { asyncResult: true },\n delete: { asyncResult: true },\n searchPaginated: { asyncResult: true },\n setDefault: { asyncResult: true },\n stats: { asyncResult: true },\n }),\n);\n\nexport const IndexSetsStore = singletonStore(\n 'core.IndexSets',\n () => Reflux.createStore({\n listenables: [IndexSetsActions],\n indexSetsCount: undefined,\n indexSets: undefined,\n indexSetStats: undefined,\n indexSet: undefined,\n globalIndexSetStats: undefined,\n\n getInitialState() {\n return this.getState();\n },\n\n getState() {\n return {\n indexSetsCount: this.indexSetsCount,\n indexSets: this.indexSets,\n indexSetStats: this.indexSetStats,\n indexSet: this.indexSet,\n globalIndexSetStats: this.globalIndexSetStats,\n };\n },\n\n propagateChanges() {\n this.trigger(this.getState());\n },\n\n list(stats: boolean) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.list(stats).url);\n const promise = fetch('GET', url);\n\n promise\n .then(\n (response: IndexSetsResponseType) => {\n this.indexSetsCount = response.total;\n this.indexSets = response.index_sets;\n this.indexSetStats = response.stats;\n\n this.propagateChanges();\n\n return response;\n },\n (error) => {\n UserNotification.error(`Fetching index sets list failed: ${error.message}`,\n 'Could not retrieve index sets.');\n },\n );\n\n IndexSetsActions.list.promise(promise);\n },\n\n listPaginated(skip: number, limit: number, stats: boolean) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.listPaginated(skip, limit, stats).url);\n const promise = fetch('GET', url);\n\n promise\n .then(\n (response: IndexSetsResponseType) => {\n this.indexSetsCount = response.total;\n this.indexSets = response.index_sets;\n this.indexSetStats = response.stats;\n\n this.propagateChanges();\n\n return response;\n },\n (error) => {\n UserNotification.error(`Fetching index sets list failed: ${this._errorMessage(error)}`,\n 'Could not retrieve index sets.');\n },\n );\n\n IndexSetsActions.listPaginated.promise(promise);\n },\n\n searchPaginated(searchTerm: string, skip: number, limit: number, stats: boolean) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.searchPaginated(searchTerm, skip, limit, stats).url);\n const promise = fetch('GET', url);\n\n promise\n .then(\n (response: IndexSetsResponseType) => {\n this.indexSetsCount = response.total;\n this.indexSets = response.index_sets;\n this.indexSetStats = response.stats;\n\n this.propagateChanges();\n\n return response;\n },\n (error) => {\n UserNotification.error(`Fetching index sets list failed: ${this._errorMessage(error)}`,\n 'Could not retrieve index sets.');\n },\n );\n\n IndexSetsActions.searchPaginated.promise(promise);\n },\n\n get(indexSetId: string) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.get(indexSetId).url);\n const promise = fetch('GET', url);\n\n promise.then(\n (response: IndexSet) => {\n this.indexSet = response;\n\n this.propagateChanges();\n\n return response;\n },\n (error) => {\n UserNotification.error(`Fetching index set '${indexSetId}' failed with status: ${this._errorMessage(error)}`, 'Could not retrieve index set.');\n },\n );\n\n IndexSetsActions.get.promise(promise);\n },\n\n update(indexSet: IndexSet) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.get(indexSet.id).url);\n const promise = fetch('PUT', url, indexSet);\n\n promise.then(\n (response: IndexSet) => {\n UserNotification.success(`Successfully updated index set '${indexSet.title}'`, 'Success');\n\n this.indexSet = response;\n\n this.propagateChanges();\n\n return response;\n },\n (error) => {\n UserNotification.error(`Updating index set '${indexSet.title}' failed with status: ${this._errorMessage(error)}`, 'Could not update index set.');\n },\n );\n\n IndexSetsActions.update.promise(promise);\n },\n\n create(indexSet: IndexSet) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.create().url);\n const promise = fetch('POST', url, indexSet);\n\n promise.then(\n (response: IndexSet) => {\n UserNotification.success(`Successfully created index set '${indexSet.title}'`, 'Success');\n\n this.indexSet = response;\n\n this.propagateChanges();\n\n return response;\n },\n (error) => {\n UserNotification.error(`Creating index set '${indexSet.title}' failed with status: ${this._errorMessage(error)}`, 'Could not create index set.');\n },\n );\n\n IndexSetsActions.create.promise(promise);\n },\n\n delete(indexSet: IndexSet, deleteIndices: boolean) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.delete(indexSet.id, deleteIndices).url);\n const promise = fetch('DELETE', url);\n\n promise.then(\n () => {\n UserNotification.success(`Successfully deleted index set '${indexSet.title}'`, 'Success');\n },\n (error) => {\n UserNotification.error(`Deleting index set '${indexSet.title}' failed with status: ${this._errorMessage(error)}`, 'Could not delete index set.');\n },\n );\n\n IndexSetsActions.delete.promise(promise);\n },\n\n setDefault(indexSet: IndexSet) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.setDefault(indexSet.id).url);\n const promise = fetch('PUT', url);\n\n promise.then(\n () => {\n UserNotification.success(`Successfully set index set '${indexSet.title}' as default`, 'Success');\n },\n (error) => {\n UserNotification.error(`Setting index set '${indexSet.title}' as default failed with status: ${this._errorMessage(error)}`, 'Could not set default index set.');\n },\n );\n\n IndexSetsActions.setDefault.promise(promise);\n },\n\n stats() {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.stats().url);\n const promise = fetch('GET', url);\n\n promise\n .then(\n (response) => {\n this.globalIndexSetStats = {\n indices: response.indices,\n documents: response.documents,\n size: response.size,\n };\n\n this.propagateChanges();\n\n return response;\n },\n (error) => {\n UserNotification.error(`Fetching global index stats failed: ${error.message}`,\n 'Could not retrieve global index stats.');\n },\n );\n\n IndexSetsActions.stats.promise(promise);\n },\n\n _errorMessage(error) {\n try {\n if (isArray(error.additional.body)) {\n return error.additional.body.map(({ message, path }) => `${path ?? ''} ${message}.`).join(' ');\n }\n\n return error.additional.body.message;\n } catch (e) {\n return error.message;\n }\n },\n }),\n);\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 */\n\nimport Reflux from 'reflux';\n\nimport UserNotification from 'util/UserNotification';\nimport { qualifyUrl } from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\nimport type { Input } from 'components/messageloaders/Types';\n\nexport type PaginatedStreamRulesInputs = {\n list: Array,\n};\n\ntype StreamRulesInputsActionsType = {\n list: () => Promise<{ inputs: Array, total: number }>,\n}\n\ntype StreamRulesInputsStoreState = {\n inputs: Array | undefined,\n}\n\nexport const StreamRulesInputsActions = singletonActions(\n 'core.StreamRulesInputs',\n () => Reflux.createActions({\n list: { asyncResult: true },\n }),\n);\n\nexport const StreamRulesInputsStore = singletonStore(\n 'core.StreamRulesInputs',\n () => Reflux.createStore({\n listenables: [StreamRulesInputsActions],\n sourceUrl: '/streams/rules/inputs',\n inputs: undefined,\n\n init() {\n this.list();\n },\n\n _state() {\n return { inputs: this.inputs };\n },\n\n getInitialState() {\n return this._state();\n },\n\n list() {\n const promise = fetch('GET', qualifyUrl(this.sourceUrl));\n\n promise\n .then(\n (response) => {\n this.inputs = response.inputs;\n this.trigger(this._state());\n\n return this.inputs;\n },\n (error) => {\n UserNotification.error(`Fetching Stream Rule Inputs List failed with status: ${error}`,\n 'Could not retrieve Stream Rule Inputs');\n },\n );\n\n StreamRulesInputsActions.list.promise(promise);\n },\n }),\n);\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 Reflux from 'reflux';\nimport pull from 'lodash/pull';\n\nimport fetch from 'logic/rest/FetchProvider';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport * as URLUtils from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport { singletonStore } from 'logic/singleton';\n\ntype StreamRule = {\n field: string,\n type: number,\n value: string,\n inverted: boolean,\n description: string,\n};\n\ntype Callback = {\n (): void,\n};\n\n// eslint-disable-next-line import/prefer-default-export\nexport const StreamRulesStore = singletonStore(\n 'core.StreamRules',\n () => Reflux.createStore({\n callbacks: [],\n\n types() {\n const url = '/streams/null/rules/types';\n const promise = fetch('GET', URLUtils.qualifyUrl(url));\n\n return promise;\n },\n update(streamId: string, streamRuleId: string, data: StreamRule, callback: (() => void)) {\n const failCallback = (error) => {\n UserNotification.error(`Updating Stream Rule failed with status: ${error}`,\n 'Could not update Stream Rule');\n };\n\n const url = URLUtils.qualifyUrl(ApiRoutes.StreamRulesApiController.update(streamId, streamRuleId).url);\n const request = {\n field: data.field,\n type: data.type,\n value: data.value,\n inverted: data.inverted,\n description: data.description,\n };\n\n return fetch('PUT', url, request)\n .then(callback, failCallback)\n .then(this._emitChange.bind(this));\n },\n remove(streamId: string, streamRuleId: string, callback: (() => void)) {\n const failCallback = (error) => {\n UserNotification.error(`Deleting Stream Rule failed with status: ${error}`,\n 'Could not delete Stream Rule');\n };\n\n const url = URLUtils.qualifyUrl(ApiRoutes.StreamRulesApiController.delete(streamId, streamRuleId).url);\n\n fetch('DELETE', url)\n .then(callback, failCallback)\n .then(this._emitChange.bind(this));\n },\n create(streamId: string, data: StreamRule, callback: (() => void)) {\n const failCallback = (error) => {\n UserNotification.error(`Creating Stream Rule failed with status: ${error}`,\n 'Could not create Stream Rule');\n };\n\n const url = URLUtils.qualifyUrl(ApiRoutes.StreamRulesApiController.create(streamId).url);\n\n return fetch('POST', url, data)\n .then(callback, failCallback)\n .then(this._emitChange.bind(this));\n },\n onChange(callback: Callback) {\n this.callbacks.push(callback);\n },\n _emitChange() {\n this.callbacks.forEach((callback) => callback());\n },\n unregister(callback: Callback) {\n pull(this.callbacks, callback);\n },\n }),\n);\n"],"names":["RetentionStrategiesContextPropType","SizeBasedRotationStrategyConfigPropType","MessageCountRotationStrategyConfigPropType","TimeBasedRotationStrategyConfigPropType","TimeBasedSizePtimizingRotationStrategyConfigPropType","RotationStrategyConfigPropType","IndexActionPropType","RetentionStrategyConfigPropType","JsonSchemaStringPropertyTypePropType","JsonSchemaIndexActionPropertyTypePropType","RotationPropertiesPropType","RotationJsonSchemaPropType","RetentionPropertiesPropType","RetentionJsonSchemaPropType","RotationStrategyPropType","RetentionStrategyPropType","EMPTY_TAG","formatRuleValue","inputs","streamRule","input","id","formatRuleField","HumanReadableStreamRule","streamRuleTypes","streamRuleType","negation","longDesc","ActionButtonsWrap","StreamRule","matchData","stream","onSubmit","onDelete","permissions","useCurrentUser","showStreamRuleForm","setShowStreamRuleForm","StreamRulesInputsStore","_onEdit","event","_onDelete","StreamRulesStore","UserNotification","_onSubmit","streamRuleId","data","_formatActionItems","matchDataStyle","actionItems","description","listGroupStyle","StreamRuleModal","StreamRuleList","hasStreamRules","shouldDisplayValueInput","type","shouldDisplayFieldInput","validate","values","errors","title","onClose","submitButtonText","submitLoadingText","initialValues","streamRuleTypesOptions","short_desc","inputOptions","inputTitle","name","setFieldValue","isSubmitting","isValidating","value","onChange","onBlur","error","touched","newValue","errorThrown","filters","attributeId","filterValues","INITIAL_DATA","searchParams","enabled","refetch","isInitialLoading","StreamsStore","IndexSetSelect","indexSets","help","indexSetOptions","indexSet","Select","prepareInitialValues","StreamModal","modalTitle","_initialValues","CreateStreamButton","bsSize","bsStyle","buttonText","className","onCreate","showCreateModal","setShowCreateModal","sendTelemetry","useSendTelemetry","toggleCreateModal","cur","ENTITY_TABLE_ID","DEFAULT_LAYOUT","ADDITIONAL_ATTRIBUTES","isDateAttribute","isAttributeWithFilterOptions","filter_options","isAttributeWithRelatedCollection","related_collection","allActiveFilters","attribute","filterValueRenderer","title1","title2","disabled","filterValue","MenuItem","buttonKey","shiftHeld","setShiftHeld","downHandler","key","upHandler","DEFAULT_DATA","fetchFilterValueSuggestions","collection","query","page","pageSize","additional","url","PaginationURL","DEFAULT_SEARCH_PARAMS","Container","theme","SearchInput","StyledListGroup","Hint","filter","isShiftHeld","setSearchParams","pagination","suggestions","handleSearchChange","newSearchQuery","handlePaginationChange","debounceOnSearch","Spinner","suggestion","onClick","DATE_SEPARATOR","extractRangeFromString","timeRange","timeRangeTitle","from","until","Info","Sections","Section","SectionHeader","StyledLabel","StyledCheckbox","DateTimeFormat","ErrorMessage","DateConfiguration","fieldName","label","checkboxLabel","formatTime","useUserDateTime","_onChange","onChangeAllTime","AbsoluteDateInput","useInitialValues","formatError","rangeError","userTimezone","formValues","toInternalTime","date","utcFrom","utcUntil","isValid","FilterConfiguration","AttributeSelect","attributes","setSelectedAttributeId","activeFilters","hasActiveFilter","filterableAttributes","filterValueRenderers","onCreateFilter","selectedAttributeId","selectedAttribute","onToggleDropdown","OverlayDropdownButton","toggleDropdown","_onCreateFilter","closeDropdown","CenteredButton","FilterValueDropdown","onChangeFilter","show","setShowDropdown","_onToggle","newFilter","OverlayDropdown","onToggle","toggleTarget","onDeleteFilter","onChangeBooleanValue","oppositeFilterOption","optionVal","ROW_MIN_HEIGHT","FilterGroup","FilterGroupTitle","_collectionsByAttributeId","attributesMetaData","col","_urlQueryFiltersWithoutTitle","collectionsByAttributeId","filtersWithoutTitlePayload","filtersWithoutTitle","relatedCollection","filterTitle","requestedFilterTitles","notPermittedEntities","isErrorFetchingTitles","fromDate","untilDate","relatedOption","fetchedTitle","_allFiltersWithTitle","urlQueryFilters","relatedAttribute","filtersWithTitle","filtersWithTitleToResponse","_attributeId","fetchFilterTitles","payload","URLUtils","queryClient","urlQueryFiltersWithoutTitle","isError","cachedResponse","allFiltersWithTitle","newFiltersWithTitle","newUrlQueryFilters","newURLQueryFiltersWithoutTitle","newPayload","newResponse","SUPPORTED_ATTRIBUTE_TYPES","FilterCreation","EntityFilters","setUrlQueryFilters","onChangeFiltersWithTitle","filterable","onChangeFilters","newFilters","filterCol","filterId","updatedFilterGroup","prevValue","filterGroup","targetFilterIndex","StatusIndicator","$disabled","DefaultStreamHelp","currentUser","showEntityShareModal","setShowEntityShareModal","showStreamRuleModal","setShowStreamRuleModal","showUpdateModal","setShowUpdateModal","showCloneModal","setShowCloneModal","changingStatus","setChangingStatus","setStartpage","StartpageStore","isDefaultStream","isNotEditable","onToggleStreamStatus","response","toggleEntityShareModal","toggleUpdateModal","toggleCloneModal","toggleStreamRuleModal","onSaveStreamRule","_streamRuleId","onUpdate","newStream","onCloneSubmit","Routes","HideOnCloud","EntityShareModal","AssignIndexSetModal","selectedStreamIds","toggleShowModal","refetchStreams","setSelectedStreamIds","descriptor","StringUtils","indexSetId","index_set_id","ModalSubmit","AssignIndexSetAction","onSelect","showIndexSetModal","setShowIndexSetModal","toggleAssignIndexSetModal","StopStreamsAction","handleFailures","onStopStreams","ApiRoutes","failures","buildSearchLink","streamIds","SearchLink","link","StartStreamsActions","onStartStreams","selectedItemsAmount","actionPastTense","notDeletedStreamIds","entity_id","BulkActionsDropdown","StartStreamsAction","verbalMatchingType","matchingType","showAddRuleModal","setShowAddRuleModal","toggleAddRuleModal","entityActions","listItem","bulkActions","renderExpandedRules","renderExpandedRulesActions","ExpandedRulesActions","expandedSections","pureUrlQueryFilters","setPureUrlQueryFilters","filtersFromQuery","setFilterValues","newPureUrlQueryFilters","is","metrics","MetricsStore","metricName","throughput","nodeId","metricDefinition","throughput1","throughput2","StatusLabel","$clickable","Spacer","_title","disabledChange","disableChange","toggleStreamStatus","StyledCountBadge","buttonRef","toggleSection","toggleRulesSection","streamRulesSectionIsOpen","DefaultLabel","_index_set_title","_throughput","_disabled","_rules","updateTableLayout","paginationQueryParameter","setQuery","onPageSizeChange","newPageSize","onSearch","newQuery","onSearchReset","onColumnsChange","displayedAttributes","onSortChange","newSort","useRefetchStreamsOnStoreChange","StreamsOverview","layoutConfig","isLoadingLayoutPreferences","useTableLayout","usePaginationQueryParameter","useUpdateUserLayoutPreferences","paginatedStreams","isLoadingStreams","useStreams","columnRenderers","columnDefinitions","elements","total","QueryHelper","EntityDataTable","IndexSetsStore","onSave","PageHeader","DocsHelper","IndexSetPropType","IndexSetsActions","stats","promise","skip","limit","searchTerm","deleteIndices","message","path","StreamRulesInputsActions","streamId","callback","failCallback","request"],"sourceRoot":""}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy