mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 01:13:23 -04:00
[Threat Hunting Investigations][OpenAPI] Use timeline's generated enums (#189410)
## Summary Fixes https://github.com/elastic/security-team/issues/10132. This PR is the first on in a series of PRs to adopt the newly generate OpenAPI types in the timeline server code base. As a first step, we're migrating to the newly generated enums only. This has almost no impact on the schemas and is mostly a one-to-one change. Despite there being changes in more than 150 files, the review should be pretty straight-forward. The most changes come from the new distinction of enums and the actual type of an enum. Meaning a lot of imports and enum usages needed a simple change. In some places I found duplicate or unused types and the OpenAPI types still had a couple of minor mistakes. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
This commit is contained in:
parent
769fb994df
commit
13b15bd2e3
169 changed files with 1405 additions and 1219 deletions
|
@ -14,7 +14,36 @@ import type { Maybe } from '../../../search_strategy';
|
|||
import { Direction } from '../../../search_strategy';
|
||||
import type { PinnedEvent } from '../pinned_events/pinned_events_route';
|
||||
import { PinnedEventRuntimeType } from '../pinned_events/pinned_events_route';
|
||||
// TODO https://github.com/elastic/security-team/issues/7491
|
||||
import { ErrorSchema } from './error_schema';
|
||||
import type { DataProviderType } from './components.gen';
|
||||
import {
|
||||
DataProviderTypeEnum,
|
||||
RowRendererId,
|
||||
RowRendererIdEnum,
|
||||
SortFieldTimeline,
|
||||
SortFieldTimelineEnum,
|
||||
TemplateTimelineType,
|
||||
TemplateTimelineTypeEnum,
|
||||
TimelineStatus,
|
||||
TimelineStatusEnum,
|
||||
TimelineType,
|
||||
TimelineTypeEnum,
|
||||
} from './components.gen';
|
||||
|
||||
export {
|
||||
DataProviderType,
|
||||
DataProviderTypeEnum,
|
||||
RowRendererId,
|
||||
RowRendererIdEnum,
|
||||
SortFieldTimeline,
|
||||
SortFieldTimelineEnum,
|
||||
TemplateTimelineType,
|
||||
TemplateTimelineTypeEnum,
|
||||
TimelineStatus,
|
||||
TimelineStatusEnum,
|
||||
TimelineType,
|
||||
TimelineTypeEnum,
|
||||
};
|
||||
|
||||
/**
|
||||
* Outcome is a property of the saved object resolve api
|
||||
|
@ -40,8 +69,6 @@ export const SavedObjectResolveAliasPurpose = runtimeTypes.union([
|
|||
runtimeTypes.literal('savedObjectImport'),
|
||||
]);
|
||||
|
||||
import { ErrorSchema } from './error_schema';
|
||||
|
||||
export const BareNoteSchema = runtimeTypes.intersection([
|
||||
runtimeTypes.type({
|
||||
timelineId: runtimeTypes.string,
|
||||
|
@ -133,14 +160,9 @@ const SavedDataProviderQueryMatchRuntimeType = runtimeTypes.partial({
|
|||
queryMatch: unionWithNullType(SavedDataProviderQueryMatchBasicRuntimeType),
|
||||
});
|
||||
|
||||
export enum DataProviderType {
|
||||
default = 'default',
|
||||
template = 'template',
|
||||
}
|
||||
|
||||
export const DataProviderTypeLiteralRt = runtimeTypes.union([
|
||||
runtimeTypes.literal(DataProviderType.default),
|
||||
runtimeTypes.literal(DataProviderType.template),
|
||||
runtimeTypes.literal(DataProviderTypeEnum.default),
|
||||
runtimeTypes.literal(DataProviderTypeEnum.template),
|
||||
]);
|
||||
|
||||
const SavedDataProviderRuntimeType = runtimeTypes.partial({
|
||||
|
@ -251,93 +273,26 @@ export type Sort = runtimeTypes.TypeOf<typeof SavedSortRuntimeType>;
|
|||
* Timeline Statuses
|
||||
*/
|
||||
|
||||
export enum TimelineStatus {
|
||||
active = 'active',
|
||||
draft = 'draft',
|
||||
immutable = 'immutable',
|
||||
}
|
||||
|
||||
export const TimelineStatusLiteralRt = runtimeTypes.union([
|
||||
runtimeTypes.literal(TimelineStatus.active),
|
||||
runtimeTypes.literal(TimelineStatus.draft),
|
||||
runtimeTypes.literal(TimelineStatus.immutable),
|
||||
runtimeTypes.literal(TimelineStatusEnum.active),
|
||||
runtimeTypes.literal(TimelineStatusEnum.draft),
|
||||
runtimeTypes.literal(TimelineStatusEnum.immutable),
|
||||
]);
|
||||
|
||||
const TimelineStatusLiteralWithNullRt = unionWithNullType(TimelineStatusLiteralRt);
|
||||
export const RowRendererCount = Object.keys(RowRendererIdEnum).length;
|
||||
export const RowRendererValues = Object.values(RowRendererId.Values);
|
||||
|
||||
export type TimelineStatusLiteralWithNull = runtimeTypes.TypeOf<
|
||||
typeof TimelineStatusLiteralWithNullRt
|
||||
>;
|
||||
|
||||
export enum RowRendererId {
|
||||
/** event.kind: signal */
|
||||
alert = 'alert',
|
||||
/** endpoint alerts (created on the endpoint) */
|
||||
alerts = 'alerts',
|
||||
auditd = 'auditd',
|
||||
auditd_file = 'auditd_file',
|
||||
library = 'library',
|
||||
netflow = 'netflow',
|
||||
plain = 'plain',
|
||||
registry = 'registry',
|
||||
suricata = 'suricata',
|
||||
system = 'system',
|
||||
system_dns = 'system_dns',
|
||||
system_endgame_process = 'system_endgame_process',
|
||||
system_file = 'system_file',
|
||||
system_fim = 'system_fim',
|
||||
system_security_event = 'system_security_event',
|
||||
system_socket = 'system_socket',
|
||||
threat_match = 'threat_match',
|
||||
zeek = 'zeek',
|
||||
}
|
||||
|
||||
export const RowRendererCount = Object.keys(RowRendererId).length;
|
||||
|
||||
const RowRendererIdRuntimeType = stringEnum(RowRendererId, 'RowRendererId');
|
||||
const RowRendererIdRuntimeType = stringEnum(RowRendererIdEnum, 'RowRendererId');
|
||||
|
||||
/**
|
||||
* Timeline template type
|
||||
* Timeline types
|
||||
*/
|
||||
|
||||
export enum TemplateTimelineType {
|
||||
elastic = 'elastic',
|
||||
custom = 'custom',
|
||||
}
|
||||
|
||||
export const TemplateTimelineTypeLiteralRt = runtimeTypes.union([
|
||||
runtimeTypes.literal(TemplateTimelineType.elastic),
|
||||
runtimeTypes.literal(TemplateTimelineType.custom),
|
||||
]);
|
||||
|
||||
export const TemplateTimelineTypeLiteralWithNullRt = unionWithNullType(
|
||||
TemplateTimelineTypeLiteralRt
|
||||
);
|
||||
|
||||
export type TemplateTimelineTypeLiteral = runtimeTypes.TypeOf<typeof TemplateTimelineTypeLiteralRt>;
|
||||
export type TemplateTimelineTypeLiteralWithNull = runtimeTypes.TypeOf<
|
||||
typeof TemplateTimelineTypeLiteralWithNullRt
|
||||
>;
|
||||
|
||||
/*
|
||||
* Timeline Types
|
||||
*/
|
||||
|
||||
export enum TimelineType {
|
||||
default = 'default',
|
||||
template = 'template',
|
||||
}
|
||||
|
||||
export const TimelineTypeLiteralRt = runtimeTypes.union([
|
||||
runtimeTypes.literal(TimelineType.template),
|
||||
runtimeTypes.literal(TimelineType.default),
|
||||
runtimeTypes.literal(TimelineTypeEnum.template),
|
||||
runtimeTypes.literal(TimelineTypeEnum.default),
|
||||
]);
|
||||
|
||||
export const TimelineTypeLiteralWithNullRt = unionWithNullType(TimelineTypeLiteralRt);
|
||||
|
||||
export type TimelineTypeLiteral = runtimeTypes.TypeOf<typeof TimelineTypeLiteralRt>;
|
||||
export type TimelineTypeLiteralWithNull = runtimeTypes.TypeOf<typeof TimelineTypeLiteralWithNullRt>;
|
||||
|
||||
/**
|
||||
* This is the response type
|
||||
*/
|
||||
|
@ -483,18 +438,11 @@ export const TimelineErrorResponseType = runtimeTypes.union([
|
|||
export type TimelineErrorResponse = runtimeTypes.TypeOf<typeof TimelineErrorResponseType>;
|
||||
export type TimelineResponse = runtimeTypes.TypeOf<typeof TimelineResponseType>;
|
||||
|
||||
export enum SortFieldTimeline {
|
||||
title = 'title',
|
||||
description = 'description',
|
||||
updated = 'updated',
|
||||
created = 'created',
|
||||
}
|
||||
|
||||
export const sortFieldTimeline = runtimeTypes.union([
|
||||
runtimeTypes.literal(SortFieldTimeline.title),
|
||||
runtimeTypes.literal(SortFieldTimeline.description),
|
||||
runtimeTypes.literal(SortFieldTimeline.updated),
|
||||
runtimeTypes.literal(SortFieldTimeline.created),
|
||||
runtimeTypes.literal(SortFieldTimelineEnum.title),
|
||||
runtimeTypes.literal(SortFieldTimelineEnum.description),
|
||||
runtimeTypes.literal(SortFieldTimelineEnum.updated),
|
||||
runtimeTypes.literal(SortFieldTimelineEnum.created),
|
||||
]);
|
||||
|
||||
export const direction = runtimeTypes.union([
|
||||
|
@ -569,7 +517,6 @@ export const pageInfoTimeline = runtimeTypes.type({
|
|||
|
||||
export interface PageInfoTimeline {
|
||||
pageIndex: number;
|
||||
|
||||
pageSize: number;
|
||||
}
|
||||
|
||||
|
@ -661,16 +608,16 @@ export interface SerializedFilterQueryResult {
|
|||
filterQuery?: Maybe<SerializedKueryQueryResult>;
|
||||
}
|
||||
|
||||
export interface SerializedKueryQueryResult {
|
||||
kuery?: Maybe<KueryFilterQueryResult>;
|
||||
serializedQuery?: Maybe<string>;
|
||||
}
|
||||
|
||||
export interface KueryFilterQueryResult {
|
||||
kind?: Maybe<string>;
|
||||
expression?: Maybe<string>;
|
||||
}
|
||||
|
||||
export interface SerializedKueryQueryResult {
|
||||
kuery?: Maybe<KueryFilterQueryResult>;
|
||||
serializedQuery?: Maybe<string>;
|
||||
}
|
||||
|
||||
export interface TimelineResult {
|
||||
columns?: Maybe<ColumnHeaderResult[]>;
|
||||
created?: Maybe<number>;
|
||||
|
@ -717,11 +664,6 @@ export interface SortTimeline {
|
|||
sortOrder: Direction;
|
||||
}
|
||||
|
||||
export interface ExportTimelineNotFoundError {
|
||||
statusCode: number;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface GetAllTimelineVariables {
|
||||
pageInfo: PageInfoTimeline;
|
||||
search?: Maybe<string>;
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
* version: not applicable
|
||||
*/
|
||||
|
||||
import type { ZodTypeDef } from 'zod';
|
||||
import { z } from 'zod';
|
||||
|
||||
/**
|
||||
|
@ -33,6 +32,14 @@ export const DataProviderType = z.enum(['default', 'template']);
|
|||
export type DataProviderTypeEnum = typeof DataProviderType.enum;
|
||||
export const DataProviderTypeEnum = DataProviderType.enum;
|
||||
|
||||
/**
|
||||
* The type of the timeline template.
|
||||
*/
|
||||
export type TemplateTimelineType = z.infer<typeof TemplateTimelineType>;
|
||||
export const TemplateTimelineType = z.enum(['elastic', 'custom']);
|
||||
export type TemplateTimelineTypeEnum = typeof TemplateTimelineType.enum;
|
||||
export const TemplateTimelineTypeEnum = TemplateTimelineType.enum;
|
||||
|
||||
export type ColumnHeaderResult = z.infer<typeof ColumnHeaderResult>;
|
||||
export const ColumnHeaderResult = z.object({
|
||||
aggregatable: z.boolean().optional(),
|
||||
|
@ -50,46 +57,33 @@ export const ColumnHeaderResult = z.object({
|
|||
|
||||
export type QueryMatchResult = z.infer<typeof QueryMatchResult>;
|
||||
export const QueryMatchResult = z.object({
|
||||
field: z.string().optional(),
|
||||
displayField: z.string().optional(),
|
||||
value: z.string().optional(),
|
||||
displayValue: z.string().optional(),
|
||||
operator: z.string().optional(),
|
||||
field: z.string().nullable().optional(),
|
||||
displayField: z.string().nullable().optional(),
|
||||
value: z.string().nullable().optional(),
|
||||
displayValue: z.string().nullable().optional(),
|
||||
operator: z.string().nullable().optional(),
|
||||
});
|
||||
|
||||
export interface DataProviderResult {
|
||||
id?: string;
|
||||
name?: string;
|
||||
enabled?: boolean;
|
||||
excluded?: boolean;
|
||||
kqlQuery?: string;
|
||||
queryMatch?: QueryMatchResult;
|
||||
and?: DataProviderResult[];
|
||||
type?: DataProviderType;
|
||||
}
|
||||
export interface DataProviderResultInput {
|
||||
id?: string;
|
||||
name?: string;
|
||||
enabled?: boolean;
|
||||
excluded?: boolean;
|
||||
kqlQuery?: string;
|
||||
queryMatch?: QueryMatchResult;
|
||||
and?: DataProviderResultInput[];
|
||||
type?: DataProviderType;
|
||||
}
|
||||
export const DataProviderResult: z.ZodType<
|
||||
DataProviderResult,
|
||||
ZodTypeDef,
|
||||
DataProviderResultInput
|
||||
> = z.object({
|
||||
id: z.string().optional(),
|
||||
name: z.string().optional(),
|
||||
enabled: z.boolean().optional(),
|
||||
excluded: z.boolean().optional(),
|
||||
kqlQuery: z.string().optional(),
|
||||
export type DataProviderQueryMatch = z.infer<typeof DataProviderQueryMatch>;
|
||||
export const DataProviderQueryMatch = z.object({
|
||||
enabled: z.boolean().nullable().optional(),
|
||||
excluded: z.boolean().nullable().optional(),
|
||||
id: z.string().nullable().optional(),
|
||||
kqlQuery: z.string().nullable().optional(),
|
||||
name: z.string().nullable().optional(),
|
||||
queryMatch: QueryMatchResult.optional(),
|
||||
and: z.array(z.lazy(() => DataProviderResult)).optional(),
|
||||
type: DataProviderType.optional(),
|
||||
});
|
||||
|
||||
export type DataProviderResult = z.infer<typeof DataProviderResult>;
|
||||
export const DataProviderResult = z.object({
|
||||
and: z.array(DataProviderQueryMatch).nullable().optional(),
|
||||
enabled: z.boolean().nullable().optional(),
|
||||
excluded: z.boolean().nullable().optional(),
|
||||
id: z.string().nullable().optional(),
|
||||
kqlQuery: z.string().nullable().optional(),
|
||||
name: z.string().nullable().optional(),
|
||||
queryMatch: QueryMatchResult.nullable().optional(),
|
||||
type: DataProviderType.nullable().optional(),
|
||||
});
|
||||
|
||||
export type RowRendererId = z.infer<typeof RowRendererId>;
|
||||
|
@ -154,31 +148,33 @@ export const SerializedFilterQueryResult = z.object({
|
|||
.object({
|
||||
kuery: z
|
||||
.object({
|
||||
kind: z.string().optional(),
|
||||
expression: z.string().optional(),
|
||||
kind: z.string().nullable().optional(),
|
||||
expression: z.string().nullable().optional(),
|
||||
})
|
||||
.nullable()
|
||||
.optional(),
|
||||
serializedQuery: z.string().optional(),
|
||||
serializedQuery: z.string().nullable().optional(),
|
||||
})
|
||||
.nullable()
|
||||
.optional(),
|
||||
});
|
||||
|
||||
export type Sort = z.infer<typeof Sort>;
|
||||
export const Sort = z.object({
|
||||
export type SortObject = z.infer<typeof SortObject>;
|
||||
export const SortObject = z.object({
|
||||
columnId: z.string().nullable().optional(),
|
||||
columnType: z.string().nullable().optional(),
|
||||
sortDirection: z.string().nullable().optional(),
|
||||
});
|
||||
|
||||
export type Sort = z.infer<typeof Sort>;
|
||||
export const Sort = z.union([SortObject, z.array(SortObject)]);
|
||||
|
||||
export type SavedTimeline = z.infer<typeof SavedTimeline>;
|
||||
export const SavedTimeline = z.object({
|
||||
columns: ColumnHeaderResult.nullable().optional(),
|
||||
columns: z.array(ColumnHeaderResult).nullable().optional(),
|
||||
created: z.number().nullable().optional(),
|
||||
createdBy: z.string().nullable().optional(),
|
||||
dataProviders: z
|
||||
.array(z.lazy(() => DataProviderResult))
|
||||
.nullable()
|
||||
.optional(),
|
||||
dataProviders: z.array(DataProviderResult).nullable().optional(),
|
||||
dataViewId: z.string().nullable().optional(),
|
||||
dateRange: z
|
||||
.object({
|
||||
|
@ -190,9 +186,11 @@ export const SavedTimeline = z.object({
|
|||
description: z.string().nullable().optional(),
|
||||
eqlOptions: z
|
||||
.object({
|
||||
eventCategoryField: z.string().optional(),
|
||||
tiebreakerField: z.string().optional(),
|
||||
timestampField: z.string().optional(),
|
||||
eventCategoryField: z.string().nullable().optional(),
|
||||
query: z.string().nullable().optional(),
|
||||
size: z.union([z.string().nullable(), z.number().nullable()]).optional(),
|
||||
tiebreakerField: z.string().nullable().optional(),
|
||||
timestampField: z.string().nullable().optional(),
|
||||
})
|
||||
.nullable()
|
||||
.optional(),
|
||||
|
|
|
@ -21,12 +21,20 @@ components:
|
|||
# enum default value is temporarily unsupported by the code generator
|
||||
# default: default
|
||||
description: The type of data provider to create. Valid values are `default` and `template`.
|
||||
TemplateTimelineType:
|
||||
type: string
|
||||
enum:
|
||||
- elastic
|
||||
- custom
|
||||
description: The type of the timeline template.
|
||||
SavedTimeline:
|
||||
type: object
|
||||
properties:
|
||||
columns:
|
||||
$ref: '#/components/schemas/ColumnHeaderResult'
|
||||
type: array
|
||||
nullable: true
|
||||
items:
|
||||
$ref: '#/components/schemas/ColumnHeaderResult'
|
||||
created:
|
||||
type: number
|
||||
nullable: true
|
||||
|
@ -62,10 +70,22 @@ components:
|
|||
properties:
|
||||
eventCategoryField:
|
||||
type: string
|
||||
nullable: true
|
||||
query:
|
||||
type: string
|
||||
nullable: true
|
||||
size:
|
||||
oneOf:
|
||||
- type: string
|
||||
nullable: true
|
||||
- type: number
|
||||
nullable: true
|
||||
tiebreakerField:
|
||||
type: string
|
||||
nullable: true
|
||||
timestampField:
|
||||
type: string
|
||||
nullable: true
|
||||
eventType:
|
||||
type: string
|
||||
nullable: true
|
||||
|
@ -223,35 +243,68 @@ components:
|
|||
properties:
|
||||
field:
|
||||
type: string
|
||||
nullable: true
|
||||
displayField:
|
||||
type: string
|
||||
nullable: true
|
||||
value:
|
||||
type: string
|
||||
nullable: true
|
||||
displayValue:
|
||||
type: string
|
||||
nullable: true
|
||||
operator:
|
||||
type: string
|
||||
nullable: true
|
||||
DataProviderResult:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
enabled:
|
||||
type: boolean
|
||||
excluded:
|
||||
type: boolean
|
||||
kqlQuery:
|
||||
type: string
|
||||
queryMatch:
|
||||
$ref: '#/components/schemas/QueryMatchResult'
|
||||
and:
|
||||
type: array
|
||||
nullable: true
|
||||
items:
|
||||
$ref: '#/components/schemas/DataProviderResult'
|
||||
$ref: '#/components/schemas/DataProviderQueryMatch'
|
||||
enabled:
|
||||
type: boolean
|
||||
nullable: true
|
||||
excluded:
|
||||
type: boolean
|
||||
nullable: true
|
||||
id:
|
||||
type: string
|
||||
nullable: true
|
||||
kqlQuery:
|
||||
type: string
|
||||
nullable: true
|
||||
name:
|
||||
type: string
|
||||
nullable: true
|
||||
queryMatch:
|
||||
$ref: '#/components/schemas/QueryMatchResult'
|
||||
nullable: true
|
||||
type:
|
||||
$ref: '#/components/schemas/DataProviderType'
|
||||
nullable: true
|
||||
DataProviderQueryMatch:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
type: boolean
|
||||
nullable: true
|
||||
excluded:
|
||||
type: boolean
|
||||
nullable: true
|
||||
id:
|
||||
type: string
|
||||
nullable: true
|
||||
kqlQuery:
|
||||
type: string
|
||||
nullable: true
|
||||
name:
|
||||
type: string
|
||||
nullable: true
|
||||
queryMatch:
|
||||
$ref: '#/components/schemas/QueryMatchResult'
|
||||
BareNote:
|
||||
type: object
|
||||
required: [timelineId]
|
||||
|
@ -383,16 +436,21 @@ components:
|
|||
properties:
|
||||
filterQuery:
|
||||
type: object
|
||||
nullable: true
|
||||
properties:
|
||||
kuery:
|
||||
type: object
|
||||
nullable: true
|
||||
properties:
|
||||
kind:
|
||||
type: string
|
||||
nullable: true
|
||||
expression:
|
||||
type: string
|
||||
nullable: true
|
||||
serializedQuery:
|
||||
type: string
|
||||
nullable: true
|
||||
PinnedEvent:
|
||||
type: object
|
||||
required: [eventId, pinnedEventId, timelineId, version]
|
||||
|
@ -418,6 +476,12 @@ components:
|
|||
version:
|
||||
type: string
|
||||
Sort:
|
||||
oneOf:
|
||||
- $ref: '#/components/schemas/SortObject'
|
||||
- type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/SortObject'
|
||||
SortObject:
|
||||
type: object
|
||||
properties:
|
||||
columnId:
|
||||
|
|
|
@ -11,7 +11,7 @@ import type {
|
|||
TimelineType,
|
||||
TimelineStatus,
|
||||
RowRendererId,
|
||||
} from '../../api/timeline/model/api';
|
||||
} from '../../api/timeline';
|
||||
|
||||
export * from './events';
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
import type { Filter } from '@kbn/es-query';
|
||||
import type { RowRendererId, TimelineTypeLiteral } from '../../api/timeline/model/api';
|
||||
import type { RowRendererId, TimelineType } from '../../api/timeline/model/api';
|
||||
|
||||
import type { Direction } from '../../search_strategy';
|
||||
import type { ColumnHeaderOptions, ColumnId } from '../header_actions';
|
||||
|
@ -52,7 +52,7 @@ export interface TimelinePersistInput {
|
|||
show?: boolean;
|
||||
sort?: SortColumnTimeline[];
|
||||
showCheckboxes?: boolean;
|
||||
timelineType?: TimelineTypeLiteral;
|
||||
timelineType?: TimelineType;
|
||||
templateTimelineId?: string | null;
|
||||
templateTimelineVersion?: number | null;
|
||||
title?: string;
|
||||
|
|
|
@ -1028,27 +1028,55 @@ components:
|
|||
type: boolean
|
||||
type:
|
||||
type: string
|
||||
DataProviderQueryMatch:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
nullable: true
|
||||
type: boolean
|
||||
excluded:
|
||||
nullable: true
|
||||
type: boolean
|
||||
id:
|
||||
nullable: true
|
||||
type: string
|
||||
kqlQuery:
|
||||
nullable: true
|
||||
type: string
|
||||
name:
|
||||
nullable: true
|
||||
type: string
|
||||
queryMatch:
|
||||
$ref: '#/components/schemas/QueryMatchResult'
|
||||
DataProviderResult:
|
||||
type: object
|
||||
properties:
|
||||
and:
|
||||
items:
|
||||
$ref: '#/components/schemas/DataProviderResult'
|
||||
$ref: '#/components/schemas/DataProviderQueryMatch'
|
||||
nullable: true
|
||||
type: array
|
||||
enabled:
|
||||
nullable: true
|
||||
type: boolean
|
||||
excluded:
|
||||
nullable: true
|
||||
type: boolean
|
||||
id:
|
||||
nullable: true
|
||||
type: string
|
||||
kqlQuery:
|
||||
nullable: true
|
||||
type: string
|
||||
name:
|
||||
nullable: true
|
||||
type: string
|
||||
queryMatch:
|
||||
$ref: '#/components/schemas/QueryMatchResult'
|
||||
nullable: true
|
||||
type:
|
||||
$ref: '#/components/schemas/DataProviderType'
|
||||
nullable: true
|
||||
DataProviderType:
|
||||
description: >-
|
||||
The type of data provider to create. Valid values are `default` and
|
||||
|
@ -1235,14 +1263,19 @@ components:
|
|||
type: object
|
||||
properties:
|
||||
displayField:
|
||||
nullable: true
|
||||
type: string
|
||||
displayValue:
|
||||
nullable: true
|
||||
type: string
|
||||
field:
|
||||
nullable: true
|
||||
type: string
|
||||
operator:
|
||||
nullable: true
|
||||
type: string
|
||||
value:
|
||||
nullable: true
|
||||
type: string
|
||||
Readable:
|
||||
type: object
|
||||
|
@ -1295,8 +1328,10 @@ components:
|
|||
type: object
|
||||
properties:
|
||||
columns:
|
||||
$ref: '#/components/schemas/ColumnHeaderResult'
|
||||
items:
|
||||
$ref: '#/components/schemas/ColumnHeaderResult'
|
||||
nullable: true
|
||||
type: array
|
||||
created:
|
||||
nullable: true
|
||||
type: number
|
||||
|
@ -1331,10 +1366,22 @@ components:
|
|||
type: object
|
||||
properties:
|
||||
eventCategoryField:
|
||||
nullable: true
|
||||
type: string
|
||||
query:
|
||||
nullable: true
|
||||
type: string
|
||||
size:
|
||||
oneOf:
|
||||
- nullable: true
|
||||
type: string
|
||||
- nullable: true
|
||||
type: number
|
||||
tiebreakerField:
|
||||
nullable: true
|
||||
type: string
|
||||
timestampField:
|
||||
nullable: true
|
||||
type: string
|
||||
eventType:
|
||||
nullable: true
|
||||
|
@ -1403,18 +1450,37 @@ components:
|
|||
type: object
|
||||
properties:
|
||||
filterQuery:
|
||||
nullable: true
|
||||
type: object
|
||||
properties:
|
||||
kuery:
|
||||
nullable: true
|
||||
type: object
|
||||
properties:
|
||||
expression:
|
||||
nullable: true
|
||||
type: string
|
||||
kind:
|
||||
nullable: true
|
||||
type: string
|
||||
serializedQuery:
|
||||
nullable: true
|
||||
type: string
|
||||
Sort:
|
||||
oneOf:
|
||||
- $ref: '#/components/schemas/SortObject'
|
||||
- items:
|
||||
$ref: '#/components/schemas/SortObject'
|
||||
type: array
|
||||
SortFieldTimeline:
|
||||
description: The field to sort the timelines by.
|
||||
enum:
|
||||
- title
|
||||
- description
|
||||
- updated
|
||||
- created
|
||||
type: string
|
||||
SortObject:
|
||||
type: object
|
||||
properties:
|
||||
columnId:
|
||||
|
@ -1426,14 +1492,6 @@ components:
|
|||
sortDirection:
|
||||
nullable: true
|
||||
type: string
|
||||
SortFieldTimeline:
|
||||
description: The field to sort the timelines by.
|
||||
enum:
|
||||
- title
|
||||
- description
|
||||
- updated
|
||||
- created
|
||||
type: string
|
||||
TimelineResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/SavedTimeline'
|
||||
|
|
|
@ -1028,27 +1028,55 @@ components:
|
|||
type: boolean
|
||||
type:
|
||||
type: string
|
||||
DataProviderQueryMatch:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
nullable: true
|
||||
type: boolean
|
||||
excluded:
|
||||
nullable: true
|
||||
type: boolean
|
||||
id:
|
||||
nullable: true
|
||||
type: string
|
||||
kqlQuery:
|
||||
nullable: true
|
||||
type: string
|
||||
name:
|
||||
nullable: true
|
||||
type: string
|
||||
queryMatch:
|
||||
$ref: '#/components/schemas/QueryMatchResult'
|
||||
DataProviderResult:
|
||||
type: object
|
||||
properties:
|
||||
and:
|
||||
items:
|
||||
$ref: '#/components/schemas/DataProviderResult'
|
||||
$ref: '#/components/schemas/DataProviderQueryMatch'
|
||||
nullable: true
|
||||
type: array
|
||||
enabled:
|
||||
nullable: true
|
||||
type: boolean
|
||||
excluded:
|
||||
nullable: true
|
||||
type: boolean
|
||||
id:
|
||||
nullable: true
|
||||
type: string
|
||||
kqlQuery:
|
||||
nullable: true
|
||||
type: string
|
||||
name:
|
||||
nullable: true
|
||||
type: string
|
||||
queryMatch:
|
||||
$ref: '#/components/schemas/QueryMatchResult'
|
||||
nullable: true
|
||||
type:
|
||||
$ref: '#/components/schemas/DataProviderType'
|
||||
nullable: true
|
||||
DataProviderType:
|
||||
description: >-
|
||||
The type of data provider to create. Valid values are `default` and
|
||||
|
@ -1235,14 +1263,19 @@ components:
|
|||
type: object
|
||||
properties:
|
||||
displayField:
|
||||
nullable: true
|
||||
type: string
|
||||
displayValue:
|
||||
nullable: true
|
||||
type: string
|
||||
field:
|
||||
nullable: true
|
||||
type: string
|
||||
operator:
|
||||
nullable: true
|
||||
type: string
|
||||
value:
|
||||
nullable: true
|
||||
type: string
|
||||
Readable:
|
||||
type: object
|
||||
|
@ -1295,8 +1328,10 @@ components:
|
|||
type: object
|
||||
properties:
|
||||
columns:
|
||||
$ref: '#/components/schemas/ColumnHeaderResult'
|
||||
items:
|
||||
$ref: '#/components/schemas/ColumnHeaderResult'
|
||||
nullable: true
|
||||
type: array
|
||||
created:
|
||||
nullable: true
|
||||
type: number
|
||||
|
@ -1331,10 +1366,22 @@ components:
|
|||
type: object
|
||||
properties:
|
||||
eventCategoryField:
|
||||
nullable: true
|
||||
type: string
|
||||
query:
|
||||
nullable: true
|
||||
type: string
|
||||
size:
|
||||
oneOf:
|
||||
- nullable: true
|
||||
type: string
|
||||
- nullable: true
|
||||
type: number
|
||||
tiebreakerField:
|
||||
nullable: true
|
||||
type: string
|
||||
timestampField:
|
||||
nullable: true
|
||||
type: string
|
||||
eventType:
|
||||
nullable: true
|
||||
|
@ -1403,18 +1450,37 @@ components:
|
|||
type: object
|
||||
properties:
|
||||
filterQuery:
|
||||
nullable: true
|
||||
type: object
|
||||
properties:
|
||||
kuery:
|
||||
nullable: true
|
||||
type: object
|
||||
properties:
|
||||
expression:
|
||||
nullable: true
|
||||
type: string
|
||||
kind:
|
||||
nullable: true
|
||||
type: string
|
||||
serializedQuery:
|
||||
nullable: true
|
||||
type: string
|
||||
Sort:
|
||||
oneOf:
|
||||
- $ref: '#/components/schemas/SortObject'
|
||||
- items:
|
||||
$ref: '#/components/schemas/SortObject'
|
||||
type: array
|
||||
SortFieldTimeline:
|
||||
description: The field to sort the timelines by.
|
||||
enum:
|
||||
- title
|
||||
- description
|
||||
- updated
|
||||
- created
|
||||
type: string
|
||||
SortObject:
|
||||
type: object
|
||||
properties:
|
||||
columnId:
|
||||
|
@ -1426,14 +1492,6 @@ components:
|
|||
sortDirection:
|
||||
nullable: true
|
||||
type: string
|
||||
SortFieldTimeline:
|
||||
description: The field to sort the timelines by.
|
||||
enum:
|
||||
- title
|
||||
- description
|
||||
- updated
|
||||
- created
|
||||
type: string
|
||||
TimelineResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/SavedTimeline'
|
||||
|
|
|
@ -26,7 +26,7 @@ import {
|
|||
} from '../../hooks/translations';
|
||||
import { displaySuccessToast, useStateToaster } from '../toasters';
|
||||
import { TimelineId } from '../../../../common/types/timeline';
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
import {
|
||||
addProviderToTimeline,
|
||||
fieldWasDroppedOnTimelineColumns,
|
||||
|
@ -117,7 +117,7 @@ export const DragDropContextWrapperComponent: React.FC<Props> = ({ browserFields
|
|||
const onAddedToTimeline = useCallback(
|
||||
(fieldOrValue: string) => {
|
||||
const message =
|
||||
timelineType === TimelineType.template
|
||||
timelineType === TimelineTypeEnum.template
|
||||
? ADDED_TO_TIMELINE_TEMPLATE_MESSAGE(fieldOrValue)
|
||||
: ADDED_TO_TIMELINE_MESSAGE(fieldOrValue);
|
||||
displaySuccessToast(message, dispatchToaster);
|
||||
|
|
|
@ -21,7 +21,7 @@ import { sourcererActions } from '../../../store/actions';
|
|||
import { SourcererScopeName } from '../../../../sourcerer/store/model';
|
||||
import type { DataProvider } from '../../../../../common/types';
|
||||
import { TimelineId } from '../../../../../common/types/timeline';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { useCreateTimeline } from '../../../../timelines/hooks/use_create_timeline';
|
||||
import { ACTION_INVESTIGATE_IN_TIMELINE } from '../../../../detections/components/alerts_table/translations';
|
||||
|
||||
|
@ -58,7 +58,7 @@ export const InvestigateInTimelineButton: FC<
|
|||
|
||||
const clearTimeline = useCreateTimeline({
|
||||
timelineId: TimelineId.active,
|
||||
timelineType: hasTemplateProviders ? TimelineType.template : TimelineType.default,
|
||||
timelineType: hasTemplateProviders ? TimelineTypeEnum.template : TimelineTypeEnum.default,
|
||||
});
|
||||
|
||||
const configureAndOpenTimeline = useCallback(async () => {
|
||||
|
|
|
@ -13,7 +13,7 @@ import type { Filter } from '@kbn/es-query';
|
|||
import { dataTableActions } from '@kbn/securitysolution-data-table';
|
||||
import type { TableId } from '@kbn/securitysolution-data-table';
|
||||
import type { CustomBulkAction } from '../../../../common/types';
|
||||
import { RowRendererId } from '../../../../common/api/timeline';
|
||||
import { RowRendererValues } from '../../../../common/api/timeline';
|
||||
import { StatefulEventsViewer } from '../events_viewer';
|
||||
import { eventsDefaultModel } from '../events_viewer/default_model';
|
||||
import { MatrixHistogram } from '../matrix_histogram';
|
||||
|
@ -131,7 +131,7 @@ const EventsQueryTabBodyComponent: React.FC<EventsQueryTabBodyComponentProps> =
|
|||
const defaultModel = useMemo(
|
||||
() => ({
|
||||
...eventsDefaultModel,
|
||||
excludedRowRendererIds: showExternalAlerts ? Object.values(RowRendererId) : [],
|
||||
excludedRowRendererIds: showExternalAlerts ? RowRendererValues : [],
|
||||
}),
|
||||
[showExternalAlerts]
|
||||
);
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
import { render, screen, waitFor } from '@testing-library/react';
|
||||
import type { ComponentProps } from 'react';
|
||||
import React from 'react';
|
||||
|
@ -35,7 +35,7 @@ const toggleShowNotesMock = jest.fn();
|
|||
|
||||
const renderTestComponent = (props: Partial<ComponentProps<typeof AddEventNoteAction>> = {}) => {
|
||||
const localProps: ComponentProps<typeof AddEventNoteAction> = {
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
eventId: 'event-1',
|
||||
ariaLabel: 'Add Note',
|
||||
toggleShowNotes: toggleShowNotesMock,
|
||||
|
@ -79,7 +79,7 @@ describe('AddEventNoteAction', () => {
|
|||
ariaLabel: 'Add Note',
|
||||
'data-test-subj': 'add-note',
|
||||
isDisabled: false,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
toggleShowNotes: expect.any(Function),
|
||||
toolTip: '2 Notes available. Click to view them & add more.',
|
||||
eventId: 'event-1',
|
||||
|
@ -101,7 +101,7 @@ describe('AddEventNoteAction', () => {
|
|||
ariaLabel: 'Add Note',
|
||||
'data-test-subj': 'add-note',
|
||||
isDisabled: false,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
toggleShowNotes: expect.any(Function),
|
||||
toolTip: '1 Note available. Click to view it & add more.',
|
||||
eventId: 'event-2',
|
||||
|
@ -123,7 +123,7 @@ describe('AddEventNoteAction', () => {
|
|||
ariaLabel: 'Add Note',
|
||||
'data-test-subj': 'add-note',
|
||||
isDisabled: false,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
toggleShowNotes: expect.any(Function),
|
||||
toolTip: 'Add Note',
|
||||
eventId: 'event-3',
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import React, { useMemo } from 'react';
|
||||
import { NotesButton } from '../../../timelines/components/timeline/properties/helpers';
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
import { useUserPrivileges } from '../user_privileges';
|
||||
import * as i18n from './translations';
|
||||
import { ActionIconItem } from './action_icon_item';
|
||||
|
@ -46,7 +46,7 @@ const AddEventNoteActionComponent: React.FC<AddEventNoteActionProps> = ({
|
|||
timelineType={timelineType}
|
||||
toggleShowNotes={toggleShowNotes}
|
||||
toolTip={
|
||||
timelineType === TimelineType.template ? i18n.NOTES_DISABLE_TOOLTIP : NOTES_TOOLTIP
|
||||
timelineType === TimelineTypeEnum.template ? i18n.NOTES_DISABLE_TOOLTIP : NOTES_TOOLTIP
|
||||
}
|
||||
eventId={eventId}
|
||||
notesCount={notesCount}
|
||||
|
|
|
@ -12,7 +12,7 @@ import { PinEventAction } from './pin_event_action';
|
|||
import { useUserPrivileges } from '../user_privileges';
|
||||
import { getEndpointPrivilegesInitialStateMock } from '../user_privileges/endpoint/mocks';
|
||||
import { TestProviders } from '../../mock';
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
|
||||
jest.mock('../user_privileges');
|
||||
const useUserPrivilegesMock = useUserPrivileges as jest.Mock;
|
||||
|
@ -36,7 +36,7 @@ describe('PinEventAction', () => {
|
|||
noteIds={[]}
|
||||
onPinClicked={jest.fn}
|
||||
eventIsPinned={false}
|
||||
timelineType={TimelineType.default}
|
||||
timelineType={TimelineTypeEnum.default}
|
||||
/>
|
||||
</TestProviders>
|
||||
);
|
||||
|
@ -57,7 +57,7 @@ describe('PinEventAction', () => {
|
|||
noteIds={[]}
|
||||
onPinClicked={jest.fn}
|
||||
eventIsPinned={false}
|
||||
timelineType={TimelineType.default}
|
||||
timelineType={TimelineTypeEnum.default}
|
||||
/>
|
||||
</TestProviders>
|
||||
);
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
*/
|
||||
|
||||
import { isEmpty } from 'lodash/fp';
|
||||
import type { TimelineTypeLiteral } from '../../../../common/api/timeline';
|
||||
import type { TimelineType } from '../../../../common/api/timeline';
|
||||
import { appendSearch } from './helpers';
|
||||
|
||||
export const getTimelineTabsUrl = (tabName: TimelineTypeLiteral | 'notes', search?: string) =>
|
||||
export const getTimelineTabsUrl = (tabName: TimelineType | 'notes', search?: string) =>
|
||||
`/${tabName}${appendSearch(search)}`;
|
||||
|
||||
export const getTimelineUrl = (id: string, graphEventId?: string) =>
|
||||
|
|
|
@ -9,7 +9,7 @@ import { useMemo } from 'react';
|
|||
import type { Filter } from '@kbn/es-query';
|
||||
import { FILTERS, BooleanRelation, FilterStateStore } from '@kbn/es-query';
|
||||
import type { QueryOperator, DataProvider } from '@kbn/timelines-plugin/common';
|
||||
import { DataProviderType } from '../../../../../../common/api/timeline';
|
||||
import { DataProviderTypeEnum } from '../../../../../../common/api/timeline';
|
||||
import { replaceParamsQuery } from './replace_params_query';
|
||||
import type { TimelineEventsDetailsItem } from '../../../../../../common/search_strategy';
|
||||
import {
|
||||
|
@ -64,7 +64,7 @@ const dataProviderStub: DataProvider = {
|
|||
name: '',
|
||||
excluded: false,
|
||||
kqlQuery: '',
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
queryMatch: {
|
||||
field: '',
|
||||
value: '',
|
||||
|
@ -88,7 +88,7 @@ const buildDataProviders = (
|
|||
name: field,
|
||||
excluded,
|
||||
kqlQuery: '',
|
||||
type: isTemplate ? DataProviderType.template : DataProviderType.default,
|
||||
type: isTemplate ? DataProviderTypeEnum.template : DataProviderTypeEnum.default,
|
||||
queryMatch: {
|
||||
field,
|
||||
value: result,
|
||||
|
@ -102,7 +102,7 @@ const buildDataProviders = (
|
|||
name: field,
|
||||
excluded,
|
||||
kqlQuery: '',
|
||||
type: isTemplate ? DataProviderType.template : DataProviderType.default,
|
||||
type: isTemplate ? DataProviderTypeEnum.template : DataProviderTypeEnum.default,
|
||||
queryMatch: {
|
||||
field,
|
||||
value: result,
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
import { renderHook } from '@testing-library/react-hooks';
|
||||
import type { QueryOperator } from '@kbn/timelines-plugin/common';
|
||||
import { DataProviderType } from '../../../../../../common/api/timeline';
|
||||
import { DataProviderTypeEnum } from '../../../../../../common/api/timeline';
|
||||
import { useInsightQuery } from './use_insight_query';
|
||||
import { TestProviders } from '../../../../mock';
|
||||
import type { UseInsightQuery, UseInsightQueryResult } from './use_insight_query';
|
||||
|
@ -19,7 +19,7 @@ const mockProvider = {
|
|||
name: 'test',
|
||||
excluded: false,
|
||||
kqlQuery: '',
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
queryMatch: {
|
||||
field: 'event.id',
|
||||
value: '*',
|
||||
|
|
|
@ -9,7 +9,7 @@ import React, { useCallback, memo } from 'react';
|
|||
import type { EuiSelectableOption, EuiMarkdownEditorUiPlugin } from '@elastic/eui';
|
||||
import { EuiModalBody, EuiModalHeader, EuiCodeBlock } from '@elastic/eui';
|
||||
|
||||
import { TimelineType } from '../../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../../common/api/timeline';
|
||||
import { SelectableTimeline } from '../../../../../timelines/components/timeline/selectable_timeline';
|
||||
import type { OpenTimelineResult } from '../../../../../timelines/components/open_timeline/types';
|
||||
import { getTimelineUrl, useFormatUrl } from '../../../link_to';
|
||||
|
@ -66,7 +66,7 @@ const TimelineEditorComponent: React.FC<TimelineEditorProps> = ({ onClosePopover
|
|||
getSelectableOptions={handleGetSelectableOptions}
|
||||
onTimelineChange={handleTimelineChange}
|
||||
onClosePopover={onClosePopover}
|
||||
timelineType={TimelineType.default}
|
||||
timelineType={TimelineTypeEnum.default}
|
||||
/>
|
||||
</EuiModalBody>
|
||||
</>
|
||||
|
|
|
@ -12,7 +12,7 @@ import { useHistory } from 'react-router-dom';
|
|||
import { useShowTimelineForGivenPath } from '../../utils/timeline/use_show_timeline_for_path';
|
||||
import type { TimelineId } from '../../../../common/types';
|
||||
import { TimelineTabs } from '../../../../common/types';
|
||||
import { TimelineStatus } from '../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum } from '../../../../common/api/timeline';
|
||||
import { useKibana } from '../../lib/kibana';
|
||||
import { useDeepEqualSelector } from '../use_selector';
|
||||
import { APP_ID, APP_PATH } from '../../../../common/constants';
|
||||
|
@ -82,7 +82,7 @@ export const useTimelineSavePrompt = (
|
|||
|
||||
if (
|
||||
!getIsTimelineVisible(relativePath) &&
|
||||
(changed || (timelineStatus === TimelineStatus.draft && updated != null))
|
||||
(changed || (timelineStatus === TimelineStatusEnum.draft && updated != null))
|
||||
) {
|
||||
confirmSaveTimeline();
|
||||
} else {
|
||||
|
@ -111,7 +111,7 @@ export const useTimelineSavePrompt = (
|
|||
// Confirm when the user has made any changes to a timeline
|
||||
if (
|
||||
!(nextAppId ?? '').includes(APP_ID) &&
|
||||
(changed || (timelineStatus === TimelineStatus.draft && updated != null))
|
||||
(changed || (timelineStatus === TimelineStatusEnum.draft && updated != null))
|
||||
) {
|
||||
return actions.confirm(
|
||||
UNSAVED_TIMELINE_SAVE_PROMPT,
|
||||
|
|
|
@ -17,7 +17,7 @@ import memoizeOne from 'memoize-one';
|
|||
import { prepareKQLParam } from '../../../../common/utils/kql';
|
||||
import type { BrowserFields } from '../../../../common/search_strategy';
|
||||
import type { DataProvider, DataProvidersAnd } from '../../../../common/types';
|
||||
import { DataProviderType } from '../../../../common/api/timeline';
|
||||
import { DataProviderTypeEnum } from '../../../../common/api/timeline';
|
||||
import { EXISTS_OPERATOR } from '../../../../common/types/timeline';
|
||||
|
||||
export type PrimitiveOrArrayOfPrimitives =
|
||||
|
@ -125,7 +125,7 @@ const buildQueryMatch = (
|
|||
) =>
|
||||
`${dataProvider.excluded ? 'NOT ' : ''}${
|
||||
dataProvider.queryMatch.operator !== EXISTS_OPERATOR &&
|
||||
dataProvider.type !== DataProviderType.template
|
||||
dataProvider.type !== DataProviderTypeEnum.template
|
||||
? checkIfFieldTypeIsNested(dataProvider.queryMatch.field, browserFields)
|
||||
? convertNestedFieldToQuery(
|
||||
dataProvider.queryMatch.field,
|
||||
|
|
|
@ -34,7 +34,7 @@ import {
|
|||
} from '../../../common/constants';
|
||||
import { networkModel } from '../../explore/network/store';
|
||||
import { TimelineTabs, TimelineId } from '../../../common/types/timeline';
|
||||
import { TimelineType, TimelineStatus } from '../../../common/api/timeline';
|
||||
import { TimelineTypeEnum, TimelineStatusEnum } from '../../../common/api/timeline';
|
||||
import { mockManagementState } from '../../management/store/reducer';
|
||||
import type { ManagementState } from '../../management/types';
|
||||
import { initialSourcererState, SourcererScopeName } from '../../sourcerer/store/model';
|
||||
|
@ -364,7 +364,7 @@ export const mockGlobalState: State = {
|
|||
kqlQuery: { filterQuery: null },
|
||||
loadingEventIds: [],
|
||||
title: '',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
noteIds: [],
|
||||
|
@ -386,7 +386,7 @@ export const mockGlobalState: State = {
|
|||
sortDirection: 'desc',
|
||||
},
|
||||
],
|
||||
status: TimelineStatus.draft,
|
||||
status: TimelineStatusEnum.draft,
|
||||
version: null,
|
||||
selectedEventIds: {},
|
||||
isSelectAllChecked: false,
|
||||
|
|
|
@ -11,7 +11,11 @@ import type { DataTableModel } from '@kbn/securitysolution-data-table';
|
|||
import { VIEW_SELECTION } from '../../../common/constants';
|
||||
import type { TimelineResult } from '../../../common/api/timeline';
|
||||
import { TimelineId, TimelineTabs } from '../../../common/types/timeline';
|
||||
import { RowRendererId, TimelineType, TimelineStatus } from '../../../common/api/timeline';
|
||||
import {
|
||||
RowRendererIdEnum,
|
||||
TimelineTypeEnum,
|
||||
TimelineStatusEnum,
|
||||
} from '../../../common/api/timeline';
|
||||
|
||||
import type { OpenTimelineResult } from '../../timelines/components/open_timeline/types';
|
||||
import type { TimelineEventsDetailsItem } from '../../../common/search_strategy';
|
||||
|
@ -128,7 +132,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 1',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -242,7 +246,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 2',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -356,7 +360,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 2',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -470,7 +474,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 3',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -584,7 +588,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 4',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -698,7 +702,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 5',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -812,7 +816,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 6',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -926,7 +930,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 7',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -1040,7 +1044,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 7',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -1154,7 +1158,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 7',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -1268,7 +1272,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 7',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -1382,7 +1386,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 7',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -1496,7 +1500,7 @@ export const mockOpenTimelineQueryResults = {
|
|||
noteIds: ['308783f0-7b6d-11e9-980a-e5349fc014ef', '34ec1690-7b6d-11e9-980a-e5349fc014ef'],
|
||||
pinnedEventIds: ['Wl0W12oB9v5HJNSHb400', '410W12oB9v5HJNSHY4wv', 'ZF0W12oB9v5HJNSHwY6L'],
|
||||
title: 'test 7',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
created: 1558386787614,
|
||||
|
@ -1920,9 +1924,9 @@ export const mockTimelineModel: TimelineModel = {
|
|||
sortDirection: Direction.desc,
|
||||
},
|
||||
],
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
title: 'Test rule',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
version: '1',
|
||||
|
@ -2001,7 +2005,7 @@ export const mockGetOneTimelineResult: TimelineResult = {
|
|||
],
|
||||
kqlMode: 'filter',
|
||||
title: 'Test rule',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
savedQueryId: null,
|
||||
|
@ -2051,24 +2055,24 @@ export const defaultTimelineProps: CreateTimelineProps = {
|
|||
eventIdToNoteIds: {},
|
||||
eventType: 'all',
|
||||
excludedRowRendererIds: [
|
||||
RowRendererId.alert,
|
||||
RowRendererId.alerts,
|
||||
RowRendererId.auditd,
|
||||
RowRendererId.auditd_file,
|
||||
RowRendererId.library,
|
||||
RowRendererId.netflow,
|
||||
RowRendererId.plain,
|
||||
RowRendererId.registry,
|
||||
RowRendererId.suricata,
|
||||
RowRendererId.system,
|
||||
RowRendererId.system_dns,
|
||||
RowRendererId.system_endgame_process,
|
||||
RowRendererId.system_file,
|
||||
RowRendererId.system_fim,
|
||||
RowRendererId.system_security_event,
|
||||
RowRendererId.system_socket,
|
||||
RowRendererId.threat_match,
|
||||
RowRendererId.zeek,
|
||||
RowRendererIdEnum.alert,
|
||||
RowRendererIdEnum.alerts,
|
||||
RowRendererIdEnum.auditd,
|
||||
RowRendererIdEnum.auditd_file,
|
||||
RowRendererIdEnum.library,
|
||||
RowRendererIdEnum.netflow,
|
||||
RowRendererIdEnum.plain,
|
||||
RowRendererIdEnum.registry,
|
||||
RowRendererIdEnum.suricata,
|
||||
RowRendererIdEnum.system,
|
||||
RowRendererIdEnum.system_dns,
|
||||
RowRendererIdEnum.system_endgame_process,
|
||||
RowRendererIdEnum.system_file,
|
||||
RowRendererIdEnum.system_fim,
|
||||
RowRendererIdEnum.system_security_event,
|
||||
RowRendererIdEnum.system_socket,
|
||||
RowRendererIdEnum.threat_match,
|
||||
RowRendererIdEnum.zeek,
|
||||
],
|
||||
filters: [],
|
||||
highlightedDropAndProviderId: '',
|
||||
|
@ -2104,9 +2108,9 @@ export const defaultTimelineProps: CreateTimelineProps = {
|
|||
sortDirection: Direction.desc,
|
||||
},
|
||||
],
|
||||
status: TimelineStatus.draft,
|
||||
status: TimelineStatusEnum.draft,
|
||||
title: '',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineVersion: null,
|
||||
templateTimelineId: null,
|
||||
version: null,
|
||||
|
|
|
@ -21,7 +21,7 @@ import type { EnhancerOptions } from 'redux-devtools-extension';
|
|||
import type { Storage } from '@kbn/kibana-utils-plugin/public';
|
||||
import type { CoreStart } from '@kbn/core/public';
|
||||
import reduceReducers from 'reduce-reducers';
|
||||
import { TimelineType } from '../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../common/api/timeline';
|
||||
import { TimelineId } from '../../../common/types';
|
||||
import { initialGroupingState } from './grouping/reducer';
|
||||
import type { GroupState } from './grouping/types';
|
||||
|
@ -122,7 +122,7 @@ export const createStoreFactory = async (
|
|||
id: TimelineId.active,
|
||||
timelineById: {},
|
||||
show: false,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
columns: [],
|
||||
dataViewId: null,
|
||||
indexNames: [],
|
||||
|
|
|
@ -33,7 +33,7 @@ import {
|
|||
import type { CreateTimeline, UpdateTimelineLoading } from './types';
|
||||
import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs';
|
||||
import type { DataProvider } from '../../../../common/types/timeline';
|
||||
import { TimelineType, TimelineStatus } from '../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum, TimelineStatusEnum } from '../../../../common/api/timeline';
|
||||
import { TimelineId, TimelineTabs } from '../../../../common/types/timeline';
|
||||
import type { ISearchStart } from '@kbn/data-plugin/public';
|
||||
import { searchServiceMock } from '@kbn/data-plugin/public/search/mocks';
|
||||
|
@ -440,9 +440,9 @@ describe('alert actions', () => {
|
|||
sortDirection: 'desc',
|
||||
},
|
||||
],
|
||||
status: TimelineStatus.draft,
|
||||
status: TimelineStatusEnum.draft,
|
||||
title: '',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
version: null,
|
||||
|
|
|
@ -52,7 +52,7 @@ import {
|
|||
} from '../../../../common/detection_engine/utils';
|
||||
import type { TimelineResult } from '../../../../common/api/timeline';
|
||||
import { TimelineId } from '../../../../common/types/timeline';
|
||||
import { TimelineStatus, TimelineType } from '../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
import type {
|
||||
SendAlertToTimelineActionProps,
|
||||
ThresholdAggregationData,
|
||||
|
@ -990,7 +990,7 @@ export const sendAlertToTimelineAction = async ({
|
|||
const { timeline, notes } = formatTimelineResultToModel(
|
||||
timelineTemplate,
|
||||
true,
|
||||
timelineTemplate.timelineType ?? TimelineType.default
|
||||
timelineTemplate.timelineType ?? TimelineTypeEnum.default
|
||||
);
|
||||
const query = replaceTemplateFieldFromQuery(
|
||||
timeline.kqlQuery?.filterQuery?.kuery?.expression ?? '',
|
||||
|
@ -1056,9 +1056,9 @@ export const sendAlertToTimelineAction = async ({
|
|||
...timeline,
|
||||
excludedRowRendererIds: [],
|
||||
title: '',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
status: TimelineStatus.draft,
|
||||
status: TimelineStatusEnum.draft,
|
||||
dataProviders,
|
||||
eventType: 'all',
|
||||
filters,
|
||||
|
|
|
@ -5,13 +5,11 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { DataProviderTypeEnum, TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
import type { Filter } from '@kbn/es-query';
|
||||
import { FilterStateStore } from '@kbn/es-query';
|
||||
import type { DataProvider } from '../../../timelines/components/timeline/data_providers/data_provider';
|
||||
import { DataProviderType } from '../../../timelines/components/timeline/data_providers/data_provider';
|
||||
import { mockDataProviders } from '../../../timelines/components/timeline/data_providers/mock/mock_data_providers';
|
||||
|
||||
import {
|
||||
getStringArray,
|
||||
replaceTemplateFieldFromQuery,
|
||||
|
@ -143,7 +141,7 @@ describe('helpers', () => {
|
|||
const replacement = replaceTemplateFieldFromQuery(
|
||||
'',
|
||||
mockTimelineDetails,
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
expect(replacement).toEqual('');
|
||||
});
|
||||
|
@ -152,7 +150,7 @@ describe('helpers', () => {
|
|||
const replacement = replaceTemplateFieldFromQuery(
|
||||
' ',
|
||||
mockTimelineDetails,
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
expect(replacement).toEqual('');
|
||||
});
|
||||
|
@ -161,7 +159,7 @@ describe('helpers', () => {
|
|||
const replacement = replaceTemplateFieldFromQuery(
|
||||
'host.name: placeholdertext',
|
||||
mockTimelineDetails,
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
expect(replacement).toEqual('host.name: apache');
|
||||
});
|
||||
|
@ -175,7 +173,7 @@ describe('helpers', () => {
|
|||
const replacement = replaceTemplateFieldFromQuery(
|
||||
'host.name: *',
|
||||
dupTimelineDetails,
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
expect(replacement).toEqual('host.name: *');
|
||||
});
|
||||
|
@ -184,7 +182,7 @@ describe('helpers', () => {
|
|||
const replacement = replaceTemplateFieldFromQuery(
|
||||
'user.id: placeholdertext',
|
||||
mockTimelineDetails,
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
expect(replacement).toEqual('user.id: placeholdertext');
|
||||
});
|
||||
|
@ -195,7 +193,7 @@ describe('helpers', () => {
|
|||
const replacement = replaceTemplateFieldFromQuery(
|
||||
'',
|
||||
mockTimelineDetails,
|
||||
TimelineType.template
|
||||
TimelineTypeEnum.template
|
||||
);
|
||||
expect(replacement).toEqual('');
|
||||
});
|
||||
|
@ -204,7 +202,7 @@ describe('helpers', () => {
|
|||
const replacement = replaceTemplateFieldFromQuery(
|
||||
' ',
|
||||
mockTimelineDetails,
|
||||
TimelineType.template
|
||||
TimelineTypeEnum.template
|
||||
);
|
||||
expect(replacement).toEqual('');
|
||||
});
|
||||
|
@ -213,7 +211,7 @@ describe('helpers', () => {
|
|||
const replacement = replaceTemplateFieldFromQuery(
|
||||
'host.name: placeholdertext',
|
||||
mockTimelineDetails,
|
||||
TimelineType.template
|
||||
TimelineTypeEnum.template
|
||||
);
|
||||
expect(replacement).toEqual('host.name: placeholdertext');
|
||||
});
|
||||
|
@ -227,7 +225,7 @@ describe('helpers', () => {
|
|||
const replacement = replaceTemplateFieldFromQuery(
|
||||
'host.name: *',
|
||||
dupTimelineDetails,
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
expect(replacement).toEqual('host.name: *');
|
||||
});
|
||||
|
@ -236,7 +234,7 @@ describe('helpers', () => {
|
|||
const replacement = replaceTemplateFieldFromQuery(
|
||||
'user.id: placeholdertext',
|
||||
mockTimelineDetails,
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
expect(replacement).toEqual('user.id: placeholdertext');
|
||||
});
|
||||
|
@ -323,7 +321,7 @@ describe('helpers', () => {
|
|||
const replacement = reformatDataProviderWithNewValue(
|
||||
mockDataProvider,
|
||||
mockTimelineDetails,
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
expect(replacement).toEqual({
|
||||
id: 'apache',
|
||||
|
@ -339,7 +337,7 @@ describe('helpers', () => {
|
|||
displayValue: undefined,
|
||||
},
|
||||
and: [],
|
||||
type: TimelineType.default,
|
||||
type: TimelineTypeEnum.default,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -357,7 +355,7 @@ describe('helpers', () => {
|
|||
const replacement = reformatDataProviderWithNewValue(
|
||||
mockDataProvider,
|
||||
dupTimelineDetails,
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
expect(replacement).toEqual({
|
||||
id: 'apache',
|
||||
|
@ -373,7 +371,7 @@ describe('helpers', () => {
|
|||
displayValue: undefined,
|
||||
},
|
||||
and: [],
|
||||
type: TimelineType.default,
|
||||
type: TimelineTypeEnum.default,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -386,7 +384,7 @@ describe('helpers', () => {
|
|||
const replacement = reformatDataProviderWithNewValue(
|
||||
mockDataProvider,
|
||||
mockTimelineDetails,
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
expect(replacement).toEqual({
|
||||
id: 'my-id',
|
||||
|
@ -402,7 +400,7 @@ describe('helpers', () => {
|
|||
displayValue: undefined,
|
||||
},
|
||||
and: [],
|
||||
type: TimelineType.default,
|
||||
type: TimelineTypeEnum.default,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -414,11 +412,11 @@ describe('helpers', () => {
|
|||
mockDataProvider.id = 'Braden';
|
||||
mockDataProvider.name = 'Braden';
|
||||
mockDataProvider.queryMatch.value = '{host.name}';
|
||||
mockDataProvider.type = DataProviderType.template;
|
||||
mockDataProvider.type = DataProviderTypeEnum.template;
|
||||
const replacement = reformatDataProviderWithNewValue(
|
||||
mockDataProvider,
|
||||
mockTimelineDetails,
|
||||
TimelineType.template
|
||||
TimelineTypeEnum.template
|
||||
);
|
||||
expect(replacement).toEqual({
|
||||
id: 'apache',
|
||||
|
@ -434,7 +432,7 @@ describe('helpers', () => {
|
|||
displayValue: undefined,
|
||||
},
|
||||
and: [],
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -444,11 +442,11 @@ describe('helpers', () => {
|
|||
mockDataProvider.id = 'Braden';
|
||||
mockDataProvider.name = 'Braden';
|
||||
mockDataProvider.queryMatch.value = '{host.name}';
|
||||
mockDataProvider.type = DataProviderType.default;
|
||||
mockDataProvider.type = DataProviderTypeEnum.default;
|
||||
const replacement = reformatDataProviderWithNewValue(
|
||||
mockDataProvider,
|
||||
mockTimelineDetails,
|
||||
TimelineType.template
|
||||
TimelineTypeEnum.template
|
||||
);
|
||||
expect(replacement).toEqual({
|
||||
id: 'Braden',
|
||||
|
@ -464,7 +462,7 @@ describe('helpers', () => {
|
|||
displayValue: undefined,
|
||||
},
|
||||
and: [],
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -479,11 +477,11 @@ describe('helpers', () => {
|
|||
mockDataProvider.id = 'Braden';
|
||||
mockDataProvider.name = 'Braden';
|
||||
mockDataProvider.queryMatch.value = '{host.name}';
|
||||
mockDataProvider.type = DataProviderType.template;
|
||||
mockDataProvider.type = DataProviderTypeEnum.template;
|
||||
const replacement = reformatDataProviderWithNewValue(
|
||||
mockDataProvider,
|
||||
dupTimelineDetails,
|
||||
TimelineType.template
|
||||
TimelineTypeEnum.template
|
||||
);
|
||||
expect(replacement).toEqual({
|
||||
id: 'apache',
|
||||
|
@ -499,7 +497,7 @@ describe('helpers', () => {
|
|||
displayValue: undefined,
|
||||
},
|
||||
and: [],
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -509,11 +507,11 @@ describe('helpers', () => {
|
|||
mockDataProvider.id = 'my-id';
|
||||
mockDataProvider.name = 'Rebecca';
|
||||
mockDataProvider.queryMatch.value = 'Rebecca';
|
||||
mockDataProvider.type = DataProviderType.default;
|
||||
mockDataProvider.type = DataProviderTypeEnum.default;
|
||||
const replacement = reformatDataProviderWithNewValue(
|
||||
mockDataProvider,
|
||||
mockTimelineDetails,
|
||||
TimelineType.template
|
||||
TimelineTypeEnum.template
|
||||
);
|
||||
expect(replacement).toEqual({
|
||||
id: 'my-id',
|
||||
|
@ -529,7 +527,7 @@ describe('helpers', () => {
|
|||
displayValue: undefined,
|
||||
},
|
||||
and: [],
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -11,12 +11,15 @@ import type { Filter, KueryNode } from '@kbn/es-query';
|
|||
import { FilterStateStore, fromKueryExpression } from '@kbn/es-query';
|
||||
|
||||
import type { TimelineEventsDetailsItem } from '../../../../common/search_strategy';
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import {
|
||||
DataProviderTypeEnum,
|
||||
type TimelineType,
|
||||
TimelineTypeEnum,
|
||||
} from '../../../../common/api/timeline';
|
||||
import type {
|
||||
DataProvider,
|
||||
DataProvidersAnd,
|
||||
} from '../../../timelines/components/timeline/data_providers/data_provider';
|
||||
import { DataProviderType } from '../../../timelines/components/timeline/data_providers/data_provider';
|
||||
|
||||
interface FindValueToChangeInQuery {
|
||||
field: string;
|
||||
|
@ -114,9 +117,9 @@ export const findValueToChangeInQuery = (
|
|||
export const replaceTemplateFieldFromQuery = (
|
||||
query: string,
|
||||
eventData: TimelineEventsDetailsItem[],
|
||||
timelineType: TimelineType = TimelineType.default
|
||||
timelineType: TimelineType = TimelineTypeEnum.default
|
||||
): string => {
|
||||
if (timelineType === TimelineType.default) {
|
||||
if (timelineType === TimelineTypeEnum.default) {
|
||||
if (query.trim() !== '') {
|
||||
const valueToChange = findValueToChangeInQuery(fromKueryExpression(query));
|
||||
return valueToChange.reduce((newQuery, vtc) => {
|
||||
|
@ -157,10 +160,10 @@ export const replaceTemplateFieldFromMatchFilters = (
|
|||
export const reformatDataProviderWithNewValue = <T extends DataProvider | DataProvidersAnd>(
|
||||
dataProvider: T,
|
||||
eventData: TimelineEventsDetailsItem[],
|
||||
timelineType: TimelineType = TimelineType.default
|
||||
timelineType: TimelineType = TimelineTypeEnum.default
|
||||
): T => {
|
||||
// Support for legacy "template-like" timeline behavior that is using hardcoded list of templateFields
|
||||
if (timelineType !== TimelineType.template) {
|
||||
if (timelineType !== TimelineTypeEnum.template) {
|
||||
if (templateFields.includes(dataProvider.queryMatch.field)) {
|
||||
const newValue = getStringArray(dataProvider.queryMatch.field, eventData);
|
||||
if (newValue.length) {
|
||||
|
@ -171,13 +174,13 @@ export const reformatDataProviderWithNewValue = <T extends DataProvider | DataPr
|
|||
dataProvider.queryMatch.displayValue = undefined;
|
||||
}
|
||||
}
|
||||
dataProvider.type = DataProviderType.default;
|
||||
dataProvider.type = DataProviderTypeEnum.default;
|
||||
return dataProvider;
|
||||
}
|
||||
|
||||
if (timelineType === TimelineType.template) {
|
||||
if (timelineType === TimelineTypeEnum.template) {
|
||||
if (
|
||||
dataProvider.type === DataProviderType.template &&
|
||||
dataProvider.type === DataProviderTypeEnum.template &&
|
||||
dataProvider.queryMatch.operator === ':'
|
||||
) {
|
||||
const newValue = getStringArray(dataProvider.queryMatch.field, eventData);
|
||||
|
@ -191,12 +194,12 @@ export const reformatDataProviderWithNewValue = <T extends DataProvider | DataPr
|
|||
dataProvider.queryMatch.value = newValue[0];
|
||||
dataProvider.queryMatch.displayField = undefined;
|
||||
dataProvider.queryMatch.displayValue = undefined;
|
||||
dataProvider.type = DataProviderType.default;
|
||||
dataProvider.type = DataProviderTypeEnum.default;
|
||||
|
||||
return dataProvider;
|
||||
}
|
||||
|
||||
dataProvider.type = dataProvider.type ?? DataProviderType.default;
|
||||
dataProvider.type = dataProvider.type ?? DataProviderTypeEnum.default;
|
||||
|
||||
return dataProvider;
|
||||
}
|
||||
|
@ -207,7 +210,7 @@ export const reformatDataProviderWithNewValue = <T extends DataProvider | DataPr
|
|||
export const replaceTemplateFieldFromDataProviders = (
|
||||
dataProviders: DataProvider[],
|
||||
eventData: TimelineEventsDetailsItem[],
|
||||
timelineType: TimelineType = TimelineType.default
|
||||
timelineType: TimelineType = TimelineTypeEnum.default
|
||||
): DataProvider[] =>
|
||||
dataProviders.map((dataProvider) => {
|
||||
const newDataProvider = reformatDataProviderWithNewValue(dataProvider, eventData, timelineType);
|
||||
|
|
|
@ -26,7 +26,7 @@ import { timelineActions } from '../../../../timelines/store';
|
|||
import { useCreateTimeline } from '../../../../timelines/hooks/use_create_timeline';
|
||||
import { INVESTIGATE_BULK_IN_TIMELINE } from '../translations';
|
||||
import { TimelineId } from '../../../../../common/types/timeline';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { sendBulkEventsToTimelineAction } from '../actions';
|
||||
import type { CreateTimelineProps } from '../types';
|
||||
import type { SourcererScopeName } from '../../../../sourcerer/store/model';
|
||||
|
@ -138,7 +138,7 @@ export const useAddBulkToTimelineAction = ({
|
|||
|
||||
const clearActiveTimeline = useCreateTimeline({
|
||||
timelineId: TimelineId.active,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
});
|
||||
|
||||
const updateTimelineIsLoading = useCallback(
|
||||
|
|
|
@ -22,7 +22,7 @@ import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_ex
|
|||
import { createHistoryEntry } from '../../../../common/utils/global_query_string/helpers';
|
||||
import { useKibana } from '../../../../common/lib/kibana';
|
||||
import { TimelineId } from '../../../../../common/types/timeline';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { timelineActions } from '../../../../timelines/store';
|
||||
import { sendAlertToTimelineAction } from '../actions';
|
||||
import { useUpdateTimeline } from '../../../../timelines/components/open_timeline/use_update_timeline';
|
||||
|
@ -141,7 +141,7 @@ export const useInvestigateInTimeline = ({
|
|||
|
||||
const clearActiveTimeline = useCreateTimeline({
|
||||
timelineId: TimelineId.active,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
});
|
||||
|
||||
const unifiedComponentsInTimelineDisabled = useIsExperimentalFeatureEnabled(
|
||||
|
@ -164,7 +164,8 @@ export const useInvestigateInTimeline = ({
|
|||
indexNames: timeline.indexNames ?? [],
|
||||
show: true,
|
||||
excludedRowRendererIds:
|
||||
!unifiedComponentsInTimelineDisabled && timeline.timelineType !== TimelineType.template
|
||||
!unifiedComponentsInTimelineDisabled &&
|
||||
timeline.timelineType !== TimelineTypeEnum.template
|
||||
? timeline.excludedRowRendererIds
|
||||
: [],
|
||||
},
|
||||
|
|
|
@ -16,7 +16,7 @@ import {
|
|||
} from '../../../../common/components/event_details/table/use_action_cell_data_provider';
|
||||
import type { DataProvider, QueryOperator } from '../../../../../common/types/timeline';
|
||||
import { TimelineId } from '../../../../../common/types/timeline';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { useCreateTimeline } from '../../../../timelines/hooks/use_create_timeline';
|
||||
import { updateProviders } from '../../../../timelines/store/actions';
|
||||
import { sourcererSelectors } from '../../../../common/store';
|
||||
|
@ -36,7 +36,7 @@ export const useNavigateToTimeline = () => {
|
|||
|
||||
const clearTimeline = useCreateTimeline({
|
||||
timelineId: TimelineId.active,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
});
|
||||
|
||||
const navigateToTimeline = useCallback(
|
||||
|
|
|
@ -9,7 +9,7 @@ import { EuiHorizontalRule, EuiText } from '@elastic/eui';
|
|||
import React, { useCallback, useMemo, useEffect } from 'react';
|
||||
|
||||
import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features';
|
||||
import { SortFieldTimeline, TimelineType } from '../../../../common/api/timeline';
|
||||
import { SortFieldTimelineEnum, TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
import { useGetAllTimeline } from '../../../timelines/containers/all';
|
||||
import { useQueryTimelineById } from '../../../timelines/components/open_timeline/helpers';
|
||||
import type { OnOpenTimeline } from '../../../timelines/components/open_timeline/types';
|
||||
|
@ -80,7 +80,7 @@ const StatefulRecentTimelinesComponent: React.FC<Props> = ({ filterBy }) => {
|
|||
);
|
||||
|
||||
const { fetchAllTimeline, timelines, loading } = useGetAllTimeline();
|
||||
const timelineType = TimelineType.default;
|
||||
const timelineType = TimelineTypeEnum.default;
|
||||
const { timelineStatus } = useTimelineStatus({ timelineType });
|
||||
|
||||
useEffect(() => {
|
||||
|
@ -91,7 +91,7 @@ const StatefulRecentTimelinesComponent: React.FC<Props> = ({ filterBy }) => {
|
|||
},
|
||||
search: '',
|
||||
sort: {
|
||||
sortField: SortFieldTimeline.updated,
|
||||
sortField: SortFieldTimelineEnum.updated,
|
||||
sortOrder: Direction.desc,
|
||||
},
|
||||
onlyUserFavorite: filterBy === 'favorites',
|
||||
|
|
|
@ -15,7 +15,7 @@ import type {
|
|||
OpenTimelineResult,
|
||||
} from '../../../timelines/components/open_timeline/types';
|
||||
import { HoverPopover } from '../../../common/components/hover_popover';
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
|
||||
import { RecentTimelineCounts } from './counts';
|
||||
import * as i18n from './translations';
|
||||
|
@ -53,14 +53,14 @@ const RecentTimelinesItem = React.memo<RecentTimelinesItemProps>(
|
|||
hoverContent={
|
||||
<EuiToolTip
|
||||
content={
|
||||
timeline.timelineType === TimelineType.default
|
||||
timeline.timelineType === TimelineTypeEnum.default
|
||||
? i18n.OPEN_AS_DUPLICATE
|
||||
: i18n.OPEN_AS_DUPLICATE_TEMPLATE
|
||||
}
|
||||
>
|
||||
<EuiButtonIcon
|
||||
aria-label={
|
||||
timeline.timelineType === TimelineType.default
|
||||
timeline.timelineType === TimelineTypeEnum.default
|
||||
? i18n.OPEN_AS_DUPLICATE
|
||||
: i18n.OPEN_AS_DUPLICATE_TEMPLATE
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ import { createMockStore, mockGlobalState, TestProviders } from '../../common/mo
|
|||
import { useSourcererDataView } from '../containers';
|
||||
import { useSignalHelpers } from '../containers/use_signal_helpers';
|
||||
import { TimelineId } from '../../../common/types/timeline';
|
||||
import { TimelineType } from '../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../common/api/timeline';
|
||||
import { sortWithExcludesAtEnd } from '../../../common/utils/sourcerer';
|
||||
import { render, fireEvent, screen, waitFor } from '@testing-library/react';
|
||||
|
||||
|
@ -263,7 +263,7 @@ describe('Update available for timeline template', () => {
|
|||
...mockGlobalState.timeline.timelineById,
|
||||
[TimelineId.active]: {
|
||||
...mockGlobalState.timeline.timelineById.test,
|
||||
timelineType: TimelineType.template,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -339,7 +339,7 @@ describe('Missing index patterns', () => {
|
|||
...mockGlobalState.timeline.timelineById,
|
||||
[TimelineId.active]: {
|
||||
...mockGlobalState.timeline.timelineById.test,
|
||||
timelineType: TimelineType.template,
|
||||
timelineType: TimelineTypeEnum.template as TimelineType,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -392,7 +392,7 @@ describe('Missing index patterns', () => {
|
|||
activePatterns: ['myFakebeat-*'],
|
||||
});
|
||||
const state3 = cloneDeep(state2);
|
||||
state3.timeline.timelineById[TimelineId.active].timelineType = TimelineType.default;
|
||||
state3.timeline.timelineById[TimelineId.active].timelineType = TimelineTypeEnum.default;
|
||||
store = createMockStore(state3);
|
||||
|
||||
render(
|
||||
|
|
|
@ -21,7 +21,7 @@ import * as i18n from './translations';
|
|||
import { Blockquote, ResetButton } from './helpers';
|
||||
import { UpdateDefaultDataViewModal } from './update_default_data_view_modal';
|
||||
import { TimelineId } from '../../../common/types';
|
||||
import { TimelineType } from '../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../common/api/timeline';
|
||||
import { timelineSelectors } from '../../timelines/store';
|
||||
import { useDeepEqualSelector } from '../../common/hooks/use_selector';
|
||||
import { timelineDefaults } from '../../timelines/store/defaults';
|
||||
|
@ -46,15 +46,15 @@ interface Props {
|
|||
const translations = {
|
||||
deprecated: {
|
||||
title: {
|
||||
[TimelineType.default]: i18n.CALL_OUT_DEPRECATED_TITLE,
|
||||
[TimelineType.template]: i18n.CALL_OUT_DEPRECATED_TEMPLATE_TITLE,
|
||||
[TimelineTypeEnum.default]: i18n.CALL_OUT_DEPRECATED_TITLE,
|
||||
[TimelineTypeEnum.template]: i18n.CALL_OUT_DEPRECATED_TEMPLATE_TITLE,
|
||||
},
|
||||
update: i18n.UPDATE_INDEX_PATTERNS,
|
||||
},
|
||||
missingPatterns: {
|
||||
title: {
|
||||
[TimelineType.default]: i18n.CALL_OUT_MISSING_PATTERNS_TITLE,
|
||||
[TimelineType.template]: i18n.CALL_OUT_MISSING_PATTERNS_TEMPLATE_TITLE,
|
||||
[TimelineTypeEnum.default]: i18n.CALL_OUT_MISSING_PATTERNS_TITLE,
|
||||
[TimelineTypeEnum.template]: i18n.CALL_OUT_MISSING_PATTERNS_TEMPLATE_TITLE,
|
||||
},
|
||||
update: i18n.ADD_INDEX_PATTERN,
|
||||
},
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import { EuiIcon, EuiLink, EuiToolTip } from '@elastic/eui';
|
||||
import { FormattedMessage } from '@kbn/i18n-react';
|
||||
import React, { useMemo } from 'react';
|
||||
import { TimelineType } from '../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../common/api/timeline';
|
||||
import { Blockquote } from './helpers';
|
||||
import * as i18n from './translations';
|
||||
|
||||
|
@ -41,7 +41,7 @@ export const CurrentPatternsMessage = ({
|
|||
[activePatterns, deadPatterns.length, selectedPatterns, timelineType]
|
||||
);
|
||||
|
||||
if (timelineType === TimelineType.template) {
|
||||
if (timelineType === TimelineTypeEnum.template) {
|
||||
return (
|
||||
<span data-test-subj="sourcerer-current-patterns-message">
|
||||
<FormattedMessage
|
||||
|
@ -83,7 +83,7 @@ export const NoMatchDataMessage = ({
|
|||
() => selectedPatterns.filter((p) => !activePatterns.includes(p)).join(', '),
|
||||
[activePatterns, selectedPatterns]
|
||||
);
|
||||
if (timelineType === TimelineType.template) {
|
||||
if (timelineType === TimelineTypeEnum.template) {
|
||||
return (
|
||||
<FormattedMessage
|
||||
id="xpack.securitySolution.indexPatterns.timelineTemplate.noMatchData"
|
||||
|
@ -118,7 +118,7 @@ export const BadCurrentPatternsMessage = ({
|
|||
[selectedPatterns]
|
||||
);
|
||||
|
||||
if (timelineType === TimelineType.template) {
|
||||
if (timelineType === TimelineTypeEnum.template) {
|
||||
return (
|
||||
<FormattedMessage
|
||||
id="xpack.securitySolution.indexPatterns.timelineTemplate.currentPatternsBad"
|
||||
|
@ -147,7 +147,7 @@ export const DeprecatedMessage = ({
|
|||
onReset: () => void;
|
||||
timelineType: TimelineType;
|
||||
}) => {
|
||||
if (timelineType === TimelineType.template) {
|
||||
if (timelineType === TimelineTypeEnum.template) {
|
||||
return (
|
||||
<span data-test-subj="sourcerer-deprecated-message">
|
||||
<FormattedMessage
|
||||
|
@ -180,7 +180,7 @@ export const MissingPatternsMessage = ({
|
|||
timelineType: TimelineType;
|
||||
onReset: () => void;
|
||||
}) => {
|
||||
if (timelineType === TimelineType.template) {
|
||||
if (timelineType === TimelineTypeEnum.template) {
|
||||
return (
|
||||
<span data-test-subj="sourcerer-missing-patterns-message">
|
||||
<FormattedMessage
|
||||
|
|
|
@ -11,7 +11,7 @@ import { timelineDefaults } from '../timelines/store/defaults';
|
|||
import { APP_UI_ID } from '../../common/constants';
|
||||
import type { DataProvider } from '../../common/types';
|
||||
import { TimelineId } from '../../common/types/timeline';
|
||||
import { TimelineType } from '../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../common/api/timeline';
|
||||
import { useStartTransaction } from '../common/lib/apm/use_start_transaction';
|
||||
import { timelineActions } from '../timelines/store';
|
||||
import { useCreateTimeline } from '../timelines/hooks/use_create_timeline';
|
||||
|
@ -56,7 +56,7 @@ export const useInvestigateInTimeline = ({
|
|||
|
||||
const clearActiveTimeline = useCreateTimeline({
|
||||
timelineId: TimelineId.active,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
});
|
||||
|
||||
const updateTimeline = useUpdateTimeline();
|
||||
|
|
|
@ -9,7 +9,7 @@ import React from 'react';
|
|||
import { render } from '@testing-library/react';
|
||||
import { mockTimelineModel, TestProviders } from '../../../common/mock';
|
||||
import { AddToFavoritesButton } from '.';
|
||||
import { TimelineStatus } from '../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum } from '../../../../common/api/timeline';
|
||||
|
||||
const mockGetState = jest.fn();
|
||||
jest.mock('react-redux', () => {
|
||||
|
@ -41,7 +41,7 @@ describe('AddToFavoritesButton', () => {
|
|||
it('should render favorite button enabled and unchecked', () => {
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
});
|
||||
|
||||
const { getByTestId, queryByTestId } = renderAddFavoritesButton();
|
||||
|
@ -57,7 +57,7 @@ describe('AddToFavoritesButton', () => {
|
|||
it('should render favorite button disabled for a draft timeline', () => {
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
status: TimelineStatus.draft,
|
||||
status: TimelineStatusEnum.draft,
|
||||
});
|
||||
|
||||
const { getByTestId } = renderAddFavoritesButton();
|
||||
|
@ -68,7 +68,7 @@ describe('AddToFavoritesButton', () => {
|
|||
it('should render favorite button disabled for an immutable timeline', () => {
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
status: TimelineStatus.immutable,
|
||||
status: TimelineStatusEnum.immutable,
|
||||
});
|
||||
|
||||
const { getByTestId } = renderAddFavoritesButton();
|
||||
|
@ -91,7 +91,7 @@ describe('AddToFavoritesButton', () => {
|
|||
it('should use id for guided tour if prop is true', () => {
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
});
|
||||
|
||||
const { getByTestId } = renderAddFavoritesButton(true);
|
||||
|
|
|
@ -12,7 +12,7 @@ import { i18n } from '@kbn/i18n';
|
|||
import type { State } from '../../../common/store';
|
||||
import { selectTimelineById } from '../../store/selectors';
|
||||
import { timelineActions } from '../../store';
|
||||
import { TimelineStatus } from '../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum } from '../../../../common/api/timeline';
|
||||
import { TIMELINE_TOUR_CONFIG_ANCHORS } from '../timeline/tour/step_config';
|
||||
|
||||
const ADD_TO_FAVORITES = i18n.translate(
|
||||
|
@ -51,7 +51,7 @@ export const AddToFavoritesButton = React.memo<AddToFavoritesButtonProps>(
|
|||
selectTimelineById(state, timelineId)
|
||||
);
|
||||
|
||||
const isTimelineDraftOrImmutable = status !== TimelineStatus.active;
|
||||
const isTimelineDraftOrImmutable = status !== TimelineStatusEnum.active;
|
||||
const label = isFavorite ? REMOVE_FROM_FAVORITES : ADD_TO_FAVORITES;
|
||||
|
||||
const handleClick = useCallback(
|
||||
|
|
|
@ -9,7 +9,7 @@ import { EuiButtonEmpty, EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiPopover }
|
|||
import React, { useCallback, useMemo, useState } from 'react';
|
||||
import * as i18n from './translations';
|
||||
import { useCreateTimeline } from '../../hooks/use_create_timeline';
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
import { OpenTimelineModal } from '../open_timeline/open_timeline_modal';
|
||||
import type { ActionTimelineToShow } from '../open_timeline/types';
|
||||
|
||||
|
@ -39,12 +39,12 @@ export const AddTimelineButton = React.memo<AddTimelineButtonComponentProps>(({
|
|||
|
||||
const createNewTimeline = useCreateTimeline({
|
||||
timelineId,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
onClick: togglePopover,
|
||||
});
|
||||
const createNewTimelineTemplate = useCreateTimeline({
|
||||
timelineId,
|
||||
timelineType: TimelineType.template,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
onClick: togglePopover,
|
||||
});
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { DataProviderType } from '../../../../common/api/timeline';
|
||||
import { DataProviderTypeEnum } from '../../../../common/api/timeline';
|
||||
|
||||
import { mockBrowserFields } from '../../../common/containers/source/mock';
|
||||
import {
|
||||
|
@ -144,7 +144,7 @@ describe('helpers', () => {
|
|||
label: 'is',
|
||||
},
|
||||
],
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
})
|
||||
).toBe(true);
|
||||
});
|
||||
|
@ -163,7 +163,7 @@ describe('helpers', () => {
|
|||
label: 'is',
|
||||
},
|
||||
],
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
})
|
||||
).toBe(false);
|
||||
});
|
||||
|
@ -182,7 +182,7 @@ describe('helpers', () => {
|
|||
label: 'is one of',
|
||||
},
|
||||
],
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
})
|
||||
).toBe(false);
|
||||
});
|
||||
|
@ -201,7 +201,7 @@ describe('helpers', () => {
|
|||
label: '',
|
||||
},
|
||||
],
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
})
|
||||
).toBe(false);
|
||||
});
|
||||
|
@ -220,7 +220,7 @@ describe('helpers', () => {
|
|||
label: 'invalid-operator',
|
||||
},
|
||||
],
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
})
|
||||
).toBe(false);
|
||||
});
|
||||
|
@ -239,7 +239,7 @@ describe('helpers', () => {
|
|||
label: 'is one of',
|
||||
},
|
||||
],
|
||||
type: DataProviderType.template,
|
||||
type: DataProviderTypeEnum.template,
|
||||
})
|
||||
).toBe(false);
|
||||
});
|
||||
|
@ -258,7 +258,7 @@ describe('helpers', () => {
|
|||
label: 'is not one of',
|
||||
},
|
||||
],
|
||||
type: DataProviderType.template,
|
||||
type: DataProviderTypeEnum.template,
|
||||
})
|
||||
).toBe(false);
|
||||
});
|
||||
|
|
|
@ -9,7 +9,7 @@ import { findIndex } from 'lodash/fp';
|
|||
|
||||
import type { EuiComboBoxOptionOption } from '@elastic/eui';
|
||||
import type { FieldCategory } from '@kbn/timelines-plugin/common/search_strategy';
|
||||
import { DataProviderType } from '../../../../common/api/timeline';
|
||||
import { type DataProviderType, DataProviderTypeEnum } from '../../../../common/api/timeline';
|
||||
|
||||
import type { BrowserFields } from '../../../common/containers/source';
|
||||
import { getAllFieldsByName } from '../../../common/containers/source';
|
||||
|
@ -83,7 +83,7 @@ export const selectionsAreValid = ({
|
|||
const fieldIsValid = browserFields && getAllFieldsByName(browserFields)[fieldId] != null;
|
||||
const operatorIsValid = findIndex((o) => o.label === operator, operatorLabels) !== -1;
|
||||
const isOneOfOperatorSelectionWithTemplate =
|
||||
type === DataProviderType.template &&
|
||||
type === DataProviderTypeEnum.template &&
|
||||
(operator === i18n.IS_ONE_OF || operator === i18n.IS_NOT_ONE_OF);
|
||||
|
||||
return fieldIsValid && operatorIsValid && !isOneOfOperatorSelectionWithTemplate;
|
||||
|
|
|
@ -12,11 +12,11 @@ import React from 'react';
|
|||
import { mockBrowserFields } from '../../../common/containers/source/mock';
|
||||
import { TestProviders } from '../../../common/mock';
|
||||
import {
|
||||
DataProviderType,
|
||||
IS_OPERATOR,
|
||||
EXISTS_OPERATOR,
|
||||
IS_ONE_OF_OPERATOR,
|
||||
} from '../timeline/data_providers/data_provider';
|
||||
import { DataProviderTypeEnum } from '../../../../common/api/timeline';
|
||||
|
||||
import { StatefulEditDataProvider } from '.';
|
||||
|
||||
|
@ -393,7 +393,7 @@ describe('StatefulEditDataProvider', () => {
|
|||
providerId={`hosts-table-hostName-${value}`}
|
||||
timelineId={timelineId}
|
||||
value={value}
|
||||
type={DataProviderType.template}
|
||||
type={DataProviderTypeEnum.template}
|
||||
/>
|
||||
</TestProviders>
|
||||
);
|
||||
|
|
|
@ -24,7 +24,7 @@ import type { BrowserFields } from '../../../common/containers/source';
|
|||
import type { PrimitiveOrArrayOfPrimitives } from '../../../common/lib/kuery';
|
||||
import type { OnDataProviderEdited } from '../timeline/events';
|
||||
import type { QueryOperator } from '../timeline/data_providers/data_provider';
|
||||
import { DataProviderType } from '../timeline/data_providers/data_provider';
|
||||
import { type DataProviderType, DataProviderTypeEnum } from '../../../../common/api/timeline';
|
||||
|
||||
import {
|
||||
getCategorizedFieldNames,
|
||||
|
@ -86,7 +86,7 @@ export const StatefulEditDataProvider = React.memo<Props>(
|
|||
providerId,
|
||||
timelineId,
|
||||
value,
|
||||
type = DataProviderType.default,
|
||||
type = DataProviderTypeEnum.default,
|
||||
}) => {
|
||||
const [updatedField, setUpdatedField] = useState<EuiComboBoxOptionOption[]>([{ label: field }]);
|
||||
const [updatedOperator, setUpdatedOperator] = useState<EuiComboBoxOptionOption[]>(
|
||||
|
@ -105,7 +105,7 @@ export const StatefulEditDataProvider = React.memo<Props>(
|
|||
|
||||
const showValueInput = useMemo(
|
||||
() =>
|
||||
type !== DataProviderType.template &&
|
||||
type !== DataProviderTypeEnum.template &&
|
||||
updatedOperator.length > 0 &&
|
||||
updatedOperator[0].label !== i18n.EXISTS &&
|
||||
updatedOperator[0].label !== i18n.DOES_NOT_EXIST &&
|
||||
|
@ -137,7 +137,7 @@ export const StatefulEditDataProvider = React.memo<Props>(
|
|||
(selectedField: EuiComboBoxOptionOption[]) => {
|
||||
setUpdatedField(selectedField);
|
||||
|
||||
if (type === DataProviderType.template) {
|
||||
if (type === DataProviderTypeEnum.template) {
|
||||
setUpdatedValue(`{${selectedField[0].label}}`);
|
||||
}
|
||||
|
||||
|
@ -256,7 +256,7 @@ export const StatefulEditDataProvider = React.memo<Props>(
|
|||
</EuiFormRow>
|
||||
)}
|
||||
|
||||
{showComboBoxInput && type !== DataProviderType.template && (
|
||||
{showComboBoxInput && type !== DataProviderTypeEnum.template && (
|
||||
<EuiFormRow label={i18n.VALUE_LABEL}>
|
||||
<ControlledComboboxInput onChangeCallback={onValueChange} value={value} />
|
||||
</EuiFormRow>
|
||||
|
@ -268,7 +268,7 @@ export const StatefulEditDataProvider = React.memo<Props>(
|
|||
</EuiFlexItem>
|
||||
|
||||
<EuiFlexItem grow={false}>
|
||||
{type === DataProviderType.template && showComboBoxInput && (
|
||||
{type === DataProviderTypeEnum.template && showComboBoxInput && (
|
||||
<>
|
||||
<EuiCallOut
|
||||
color="warning"
|
||||
|
|
|
@ -16,7 +16,7 @@ import { APP_ID, APP_UI_ID } from '../../../../../common/constants';
|
|||
import { setInsertTimeline, showTimeline } from '../../../store/actions';
|
||||
import { useKibana } from '../../../../common/lib/kibana';
|
||||
import { TimelineId } from '../../../../../common/types/timeline';
|
||||
import { TimelineStatus, TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { getCreateCaseUrl, getCaseDetailsUrl } from '../../../../common/components/link_to';
|
||||
import { SecurityPageName } from '../../../../app/types';
|
||||
import * as i18n from './translations';
|
||||
|
@ -117,7 +117,9 @@ export const AttachToCaseButton = React.memo<AttachToCaseButtonProps>(({ timelin
|
|||
<EuiButtonEmpty
|
||||
iconType="arrowDown"
|
||||
iconSide="right"
|
||||
disabled={timelineStatus === TimelineStatus.draft || timelineType !== TimelineType.default}
|
||||
disabled={
|
||||
timelineStatus === TimelineStatusEnum.draft || timelineType !== TimelineTypeEnum.default
|
||||
}
|
||||
data-test-subj="timeline-modal-attach-to-case-dropdown-button"
|
||||
onClick={togglePopover}
|
||||
>
|
||||
|
|
|
@ -13,7 +13,7 @@ import { timelineActions } from '../../../store';
|
|||
import { defaultHeaders } from '../../timeline/body/column_headers/default_headers';
|
||||
import { TestProviders } from '../../../../common/mock';
|
||||
import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features';
|
||||
import { RowRendererId } from '../../../../../common/api/timeline';
|
||||
import { RowRendererValues } from '../../../../../common/api/timeline';
|
||||
import { defaultUdtHeaders } from '../../timeline/unified_components/default_headers';
|
||||
|
||||
jest.mock('../../../../common/components/discover_in_timeline/use_discover_in_timeline_context');
|
||||
|
@ -73,7 +73,7 @@ describe('NewTimelineButton', () => {
|
|||
show: true,
|
||||
timelineType: 'default',
|
||||
updated: undefined,
|
||||
excludedRowRendererIds: [...Object.keys(RowRendererId)],
|
||||
excludedRowRendererIds: RowRendererValues,
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import { EuiButtonEmpty, EuiContextMenuItem, EuiContextMenuPanel, EuiPopover } from '@elastic/eui';
|
||||
import React, { useMemo, useState, useCallback } from 'react';
|
||||
import { useCreateTimeline } from '../../../hooks/use_create_timeline';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import * as i18n from './translations';
|
||||
|
||||
interface NewTimelineButtonProps {
|
||||
|
@ -27,12 +27,12 @@ export const NewTimelineButton = React.memo(({ timelineId }: NewTimelineButtonPr
|
|||
|
||||
const createNewTimeline = useCreateTimeline({
|
||||
timelineId,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
onClick: togglePopover,
|
||||
});
|
||||
const createNewTimelineTemplate = useCreateTimeline({
|
||||
timelineId,
|
||||
timelineType: TimelineType.template,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
onClick: togglePopover,
|
||||
});
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ import React from 'react';
|
|||
import { OpenTimelineButton } from './open_timeline_button';
|
||||
import { TestProviders } from '../../../../common/mock/test_providers';
|
||||
import { useParams } from 'react-router-dom';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { useStartTransaction } from '../../../../common/lib/apm/use_start_transaction';
|
||||
import { useSourcererDataView } from '../../../../sourcerer/containers';
|
||||
import { useTimelineStatus } from '../../open_timeline/use_timeline_status';
|
||||
|
@ -60,7 +60,7 @@ describe('OpenTimelineButton', () => {
|
|||
});
|
||||
|
||||
it('should open the modal after clicking on the button', async () => {
|
||||
(useParams as jest.Mock).mockReturnValue({ tabName: TimelineType.template });
|
||||
(useParams as jest.Mock).mockReturnValue({ tabName: TimelineTypeEnum.template });
|
||||
(useStartTransaction as jest.Mock).mockReturnValue({ startTransaction: jest.fn() });
|
||||
(useSourcererDataView as jest.Mock).mockReturnValue({ dataViewId: '', selectedPatterns: [] });
|
||||
(useTimelineStatus as jest.Mock).mockReturnValue({
|
||||
|
|
|
@ -10,7 +10,7 @@ import { render, waitFor } from '@testing-library/react';
|
|||
import { SaveTimelineButton } from './save_timeline_button';
|
||||
import { mockTimelineModel, TestProviders } from '../../../../common/mock';
|
||||
import { useUserPrivileges } from '../../../../common/components/user_privileges';
|
||||
import { TimelineStatus } from '../../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum } from '../../../../../common/api/timeline';
|
||||
import { useCreateTimeline } from '../../../hooks/use_create_timeline';
|
||||
|
||||
jest.mock('../../../../common/components/user_privileges');
|
||||
|
@ -49,7 +49,7 @@ describe('SaveTimelineButton', () => {
|
|||
});
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
isSaving: false,
|
||||
});
|
||||
(useCreateTimeline as jest.Mock).mockReturnValue({});
|
||||
|
@ -68,7 +68,7 @@ describe('SaveTimelineButton', () => {
|
|||
});
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
isSaving: false,
|
||||
});
|
||||
(useCreateTimeline as jest.Mock).mockReturnValue({});
|
||||
|
@ -98,7 +98,7 @@ describe('SaveTimelineButton', () => {
|
|||
(useUserPrivileges as jest.Mock).mockReturnValue({
|
||||
kibanaSecuritySolutionsPrivileges: { crud: true },
|
||||
});
|
||||
mockGetState.mockReturnValue({ ...mockTimelineModel, status: TimelineStatus.immutable });
|
||||
mockGetState.mockReturnValue({ ...mockTimelineModel, status: TimelineStatusEnum.immutable });
|
||||
|
||||
const { getByTestId } = renderSaveTimelineButton();
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import React, { useCallback, useState } from 'react';
|
||||
import { EuiButton, EuiToolTip } from '@elastic/eui';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { TimelineStatus } from '../../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum } from '../../../../../common/api/timeline';
|
||||
import { useUserPrivileges } from '../../../../common/components/user_privileges';
|
||||
import { SaveTimelineModal } from './save_timeline_modal';
|
||||
import * as i18n from './translations';
|
||||
|
@ -41,8 +41,8 @@ export const SaveTimelineButton = React.memo<SaveTimelineButtonProps>(({ timelin
|
|||
|
||||
const { status, isSaving } = useSelector((state: State) => selectTimelineById(state, timelineId));
|
||||
|
||||
const canSaveTimeline = canEditTimelinePrivilege && status !== TimelineStatus.immutable;
|
||||
const isUnsaved = status === TimelineStatus.draft;
|
||||
const canSaveTimeline = canEditTimelinePrivilege && status !== TimelineStatusEnum.immutable;
|
||||
const isUnsaved = status === TimelineStatusEnum.draft;
|
||||
const unauthorizedMessage = canSaveTimeline ? null : i18n.CALL_OUT_UNAUTHORIZED_MSG;
|
||||
|
||||
return (
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import React from 'react';
|
||||
import { render } from '@testing-library/react';
|
||||
import { mockTimelineModel, TestProviders } from '../../../../common/mock';
|
||||
import { TimelineStatus, TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { SaveTimelineModal } from './save_timeline_modal';
|
||||
import * as i18n from './translations';
|
||||
|
||||
|
@ -73,8 +73,8 @@ describe('SaveTimelineModal', () => {
|
|||
it('should show correct header for save timeline template modal', () => {
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
status: TimelineStatus.draft,
|
||||
timelineType: TimelineType.template,
|
||||
status: TimelineStatusEnum.draft,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
});
|
||||
|
||||
const { getByTestId } = renderSaveTimelineModal();
|
||||
|
@ -88,7 +88,7 @@ describe('SaveTimelineModal', () => {
|
|||
it('should render all the dom elements of the modal', () => {
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
status: TimelineStatus.draft,
|
||||
status: TimelineStatusEnum.draft,
|
||||
});
|
||||
|
||||
const { getByTestId, queryByTestId } = renderSaveTimelineModal();
|
||||
|
@ -120,7 +120,7 @@ describe('SaveTimelineModal', () => {
|
|||
it('should show correct header for edit timeline template modal', () => {
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
});
|
||||
|
||||
const { getByTestId } = renderSaveTimelineModal();
|
||||
|
@ -131,8 +131,8 @@ describe('SaveTimelineModal', () => {
|
|||
|
||||
it('should show correct header for save timeline template modal', () => {
|
||||
mockGetState.mockReturnValue({
|
||||
status: TimelineStatus.active,
|
||||
timelineType: TimelineType.template,
|
||||
status: TimelineStatusEnum.active,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
});
|
||||
|
||||
const { getByTestId } = renderSaveTimelineModal();
|
||||
|
@ -147,9 +147,9 @@ describe('SaveTimelineModal', () => {
|
|||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
description: 'my description',
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
title: 'my timeline',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
});
|
||||
|
||||
const { getByTestId } = renderSaveTimelineModal();
|
||||
|
@ -179,7 +179,7 @@ describe('SaveTimelineModal', () => {
|
|||
it('should show discard timeline in the close button', () => {
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
status: TimelineStatus.draft,
|
||||
status: TimelineStatusEnum.draft,
|
||||
});
|
||||
|
||||
const { getByTestId } = renderSaveTimelineModal(true);
|
||||
|
@ -192,8 +192,8 @@ describe('SaveTimelineModal', () => {
|
|||
it('should show discard timeline template in the close button', () => {
|
||||
mockGetState.mockReturnValue({
|
||||
...mockTimelineModel,
|
||||
timelineType: TimelineType.template,
|
||||
status: TimelineStatus.draft,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
status: TimelineStatusEnum.draft,
|
||||
});
|
||||
|
||||
const { getByTestId } = renderSaveTimelineModal(true);
|
||||
|
|
|
@ -26,7 +26,7 @@ import type { State } from '../../../../common/store';
|
|||
import { selectTimelineById } from '../../../store/selectors';
|
||||
import { getUseField, Field, Form, useForm } from '../../../../shared_imports';
|
||||
import { TimelineId } from '../../../../../common/types/timeline';
|
||||
import { TimelineStatus, TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { timelineActions } from '../../../store';
|
||||
import * as commonI18n from '../../timeline/properties/translations';
|
||||
import * as i18n from './translations';
|
||||
|
@ -78,13 +78,13 @@ export const SaveTimelineModal = React.memo<SaveTimelineModalProps>(
|
|||
[]
|
||||
);
|
||||
|
||||
const isUnsaved = status === TimelineStatus.draft;
|
||||
const isUnsaved = status === TimelineStatusEnum.draft;
|
||||
const prevIsSaving = usePrevious(isSaving);
|
||||
|
||||
// Resetting the timeline by replacing the active one with a new empty one
|
||||
const resetTimeline = useCreateTimeline({
|
||||
timelineId: TimelineId.active,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
});
|
||||
|
||||
const handleSubmit = useCallback(
|
||||
|
@ -139,8 +139,8 @@ export const SaveTimelineModal = React.memo<SaveTimelineModalProps>(
|
|||
}, [closeSaveTimeline, resetTimeline, showWarning]);
|
||||
|
||||
const closeModalText = useMemo(() => {
|
||||
if (status === TimelineStatus.draft && showWarning) {
|
||||
return timelineType === TimelineType.template
|
||||
if (status === TimelineStatusEnum.draft && showWarning) {
|
||||
return timelineType === TimelineTypeEnum.template
|
||||
? i18n.DISCARD_TIMELINE_TEMPLATE
|
||||
: i18n.DISCARD_TIMELINE;
|
||||
}
|
||||
|
@ -149,11 +149,11 @@ export const SaveTimelineModal = React.memo<SaveTimelineModalProps>(
|
|||
|
||||
const modalHeader = useMemo(
|
||||
() =>
|
||||
status === TimelineStatus.draft
|
||||
? timelineType === TimelineType.template
|
||||
status === TimelineStatusEnum.draft
|
||||
? timelineType === TimelineTypeEnum.template
|
||||
? i18n.SAVE_TIMELINE_TEMPLATE
|
||||
: i18n.SAVE_TIMELINE
|
||||
: timelineType === TimelineType.template
|
||||
: timelineType === TimelineTypeEnum.template
|
||||
? i18n.NAME_TIMELINE_TEMPLATE
|
||||
: i18n.SAVE_TIMELINE,
|
||||
[status, timelineType]
|
||||
|
@ -161,8 +161,8 @@ export const SaveTimelineModal = React.memo<SaveTimelineModalProps>(
|
|||
|
||||
const saveButtonTitle = useMemo(
|
||||
() =>
|
||||
status === TimelineStatus.draft && showWarning
|
||||
? timelineType === TimelineType.template
|
||||
status === TimelineStatusEnum.draft && showWarning
|
||||
? timelineType === TimelineTypeEnum.template
|
||||
? i18n.SAVE_TIMELINE_TEMPLATE
|
||||
: i18n.SAVE_TIMELINE
|
||||
: i18n.SAVE,
|
||||
|
@ -182,7 +182,7 @@ export const SaveTimelineModal = React.memo<SaveTimelineModalProps>(
|
|||
disabled: isSaving,
|
||||
spellCheck: true,
|
||||
placeholder:
|
||||
timelineType === TimelineType.template
|
||||
timelineType === TimelineTypeEnum.template
|
||||
? commonI18n.UNTITLED_TEMPLATE
|
||||
: commonI18n.UNTITLED_TIMELINE,
|
||||
}),
|
||||
|
|
|
@ -6,8 +6,7 @@
|
|||
*/
|
||||
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import type { TimelineTypeLiteral } from '../../../../../common/api/timeline';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
|
||||
export const NEW_TIMELINE_BTN = i18n.translate(
|
||||
'xpack.securitySolution.timeline.modal.newTimelineBtn',
|
||||
|
@ -115,10 +114,10 @@ export const CLOSE_MODAL = i18n.translate(
|
|||
}
|
||||
);
|
||||
|
||||
export const UNSAVED_TIMELINE_WARNING = (timelineType: TimelineTypeLiteral) =>
|
||||
export const UNSAVED_TIMELINE_WARNING = (timelineType: TimelineType) =>
|
||||
i18n.translate('xpack.securitySolution.timeline.saveTimeline.modal.warning.title', {
|
||||
values: {
|
||||
timeline: timelineType === TimelineType.template ? 'timeline template' : 'timeline',
|
||||
timeline: timelineType === TimelineTypeEnum.template ? 'timeline template' : 'timeline',
|
||||
},
|
||||
defaultMessage: 'You have an unsaved {timeline}. Do you wish to save it?',
|
||||
});
|
||||
|
|
|
@ -11,7 +11,11 @@ import { NewTimelineButton } from '.';
|
|||
import { TimelineId } from '../../../../common/types';
|
||||
import { timelineActions } from '../../store';
|
||||
import { useDiscoverInTimelineContext } from '../../../common/components/discover_in_timeline/use_discover_in_timeline_context';
|
||||
import { RowRendererId, TimelineType } from '../../../../common/api/timeline';
|
||||
import {
|
||||
RowRendererValues,
|
||||
type TimelineType,
|
||||
TimelineTypeEnum,
|
||||
} from '../../../../common/api/timeline';
|
||||
import { TestProviders } from '../../../common/mock';
|
||||
import { defaultUdtHeaders } from '../timeline/unified_components/default_headers';
|
||||
|
||||
|
@ -43,7 +47,7 @@ describe('NewTimelineButton', () => {
|
|||
const spy = jest.spyOn(timelineActions, 'createTimeline');
|
||||
|
||||
const { getByTestId, queryByTestId, queryByText } = renderNewTimelineButton(
|
||||
TimelineType.default
|
||||
TimelineTypeEnum.default
|
||||
);
|
||||
|
||||
const button = getByTestId('timelines-page-create-new-timeline');
|
||||
|
@ -62,9 +66,9 @@ describe('NewTimelineButton', () => {
|
|||
id: TimelineId.active,
|
||||
indexNames: selectedPatterns,
|
||||
show: true,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
updated: undefined,
|
||||
excludedRowRendererIds: [...Object.values(RowRendererId)],
|
||||
excludedRowRendererIds: RowRendererValues,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -73,7 +77,7 @@ describe('NewTimelineButton', () => {
|
|||
const spy = jest.spyOn(timelineActions, 'createTimeline');
|
||||
|
||||
const { getByTestId, queryByTestId, queryByText } = renderNewTimelineButton(
|
||||
TimelineType.template
|
||||
TimelineTypeEnum.template
|
||||
);
|
||||
|
||||
const button = getByTestId('timelines-page-create-new-timeline-template');
|
||||
|
@ -92,7 +96,7 @@ describe('NewTimelineButton', () => {
|
|||
id: TimelineId.active,
|
||||
indexNames: selectedPatterns,
|
||||
show: true,
|
||||
timelineType: TimelineType.template,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
updated: undefined,
|
||||
excludedRowRendererIds: [],
|
||||
});
|
||||
|
|
|
@ -10,7 +10,7 @@ import React, { useCallback } from 'react';
|
|||
import { i18n } from '@kbn/i18n';
|
||||
import { TimelineId } from '../../../../common/types';
|
||||
import { useCreateTimeline } from '../../hooks/use_create_timeline';
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
|
||||
const NEW_TIMELINE = i18n.translate('xpack.securitySolution.timelines.newTimelineButtonLabel', {
|
||||
defaultMessage: 'Create new Timeline',
|
||||
|
@ -41,7 +41,7 @@ export const NewTimelineButton = React.memo<NewTimelineButtonProps>(({ type }) =
|
|||
});
|
||||
|
||||
const dataTestSubj = `timelines-page-create-new-${
|
||||
type === TimelineType.default ? 'timeline' : 'timeline-template'
|
||||
type === TimelineTypeEnum.default ? 'timeline' : 'timeline-template'
|
||||
}`;
|
||||
|
||||
const handleCreateNewTimeline = useCallback(async () => {
|
||||
|
@ -55,7 +55,7 @@ export const NewTimelineButton = React.memo<NewTimelineButtonProps>(({ type }) =
|
|||
onClick={handleCreateNewTimeline}
|
||||
fill
|
||||
>
|
||||
{type === TimelineType.default ? NEW_TIMELINE : NEW_TEMPLATE_TIMELINE}
|
||||
{type === TimelineTypeEnum.default ? NEW_TIMELINE : NEW_TEMPLATE_TIMELINE}
|
||||
</EuiButton>
|
||||
);
|
||||
});
|
||||
|
|
|
@ -10,7 +10,7 @@ import { mount } from 'enzyme';
|
|||
import '../../../../common/mock/formatted_relative';
|
||||
|
||||
import { NoteCards } from '.';
|
||||
import { TimelineStatus } from '../../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum } from '../../../../../common/api/timeline';
|
||||
import { TestProviders } from '../../../../common/mock';
|
||||
import type { TimelineResultNote } from '../../open_timeline/types';
|
||||
import { TimelineId } from '../../../../../common/types';
|
||||
|
@ -58,7 +58,7 @@ describe('NoteCards', () => {
|
|||
getNewNoteId: jest.fn(),
|
||||
notes: [],
|
||||
showAddNote: true,
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
toggleShowAddNote: jest.fn(),
|
||||
updateNote: jest.fn(),
|
||||
timelineId: TimelineId.test,
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { TimelineStatus, TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
|
||||
export const mockTimeline = {
|
||||
data: {
|
||||
|
@ -144,9 +144,9 @@ export const mockTimeline = {
|
|||
noteIds: [],
|
||||
pinnedEventIds: [],
|
||||
pinnedEventsSaveObject: [],
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
title: 'my timeline',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
templateTimelineId: null,
|
||||
templateTimelineVersion: null,
|
||||
savedQueryId: null,
|
||||
|
@ -398,7 +398,7 @@ export const mockTemplate = {
|
|||
noteIds: [],
|
||||
pinnedEventIds: [],
|
||||
pinnedEventsSaveObject: [],
|
||||
status: TimelineStatus.immutable,
|
||||
status: TimelineStatusEnum.immutable,
|
||||
title: 'Generic Process Timeline',
|
||||
timelineType: 'template',
|
||||
templateTimelineId: 'cd55e52b-7bce-4887-88e2-f1ece4c75447',
|
||||
|
|
|
@ -5,5 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
export const DEFAULT_SORT_FIELD = 'updated';
|
||||
import { SortFieldTimelineEnum } from '../../../../common/api/timeline';
|
||||
|
||||
export const DEFAULT_SORT_FIELD = SortFieldTimelineEnum.updated;
|
||||
export const DEFAULT_SORT_DIRECTION = 'desc';
|
||||
|
|
|
@ -12,7 +12,7 @@ import { useParams } from 'react-router-dom';
|
|||
import { DeleteTimelineModal } from './delete_timeline_modal';
|
||||
|
||||
import * as i18n from '../translations';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
|
||||
jest.mock('react-router-dom', () => {
|
||||
const actual = jest.requireActual('react-router-dom');
|
||||
|
@ -24,7 +24,7 @@ jest.mock('react-router-dom', () => {
|
|||
|
||||
describe('DeleteTimelineModal', () => {
|
||||
beforeAll(() => {
|
||||
(useParams as jest.Mock).mockReturnValue({ tabName: TimelineType.default });
|
||||
(useParams as jest.Mock).mockReturnValue({ tabName: TimelineTypeEnum.default });
|
||||
});
|
||||
|
||||
test('it renders the expected title when a timeline is selected', () => {
|
||||
|
@ -134,7 +134,7 @@ describe('DeleteTimelineModal', () => {
|
|||
|
||||
describe('DeleteTimelineTemplateModal', () => {
|
||||
beforeAll(() => {
|
||||
(useParams as jest.Mock).mockReturnValue({ tabName: TimelineType.template });
|
||||
(useParams as jest.Mock).mockReturnValue({ tabName: TimelineTypeEnum.template });
|
||||
});
|
||||
|
||||
test('it renders a deletion warning', () => {
|
||||
|
|
|
@ -12,7 +12,7 @@ import { isEmpty } from 'lodash/fp';
|
|||
|
||||
import { useParams } from 'react-router-dom';
|
||||
import * as i18n from '../translations';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
|
||||
interface Props {
|
||||
title?: string | null;
|
||||
|
@ -28,7 +28,7 @@ export const DELETE_TIMELINE_MODAL_WIDTH = 600; // px
|
|||
export const DeleteTimelineModal = React.memo<Props>(({ title, closeModal, onDelete }) => {
|
||||
const { tabName } = useParams<{ tabName: TimelineType }>();
|
||||
const warning =
|
||||
tabName === TimelineType.template
|
||||
tabName === TimelineTypeEnum.template
|
||||
? i18n.DELETE_TIMELINE_TEMPLATE_WARNING
|
||||
: i18n.DELETE_TIMELINE_WARNING;
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ import React from 'react';
|
|||
import { useParams } from 'react-router-dom';
|
||||
|
||||
import { DeleteTimelineModalOverlay } from '.';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import * as i18n from '../translations';
|
||||
import { useAppToasts } from '../../../../common/hooks/use_app_toasts';
|
||||
|
||||
|
@ -42,7 +42,7 @@ describe('DeleteTimelineModal', () => {
|
|||
};
|
||||
|
||||
beforeAll(() => {
|
||||
(useParams as jest.Mock).mockReturnValue({ tabName: TimelineType.default });
|
||||
(useParams as jest.Mock).mockReturnValue({ tabName: TimelineTypeEnum.default });
|
||||
});
|
||||
|
||||
describe('showModalState', () => {
|
||||
|
@ -78,7 +78,7 @@ describe('DeleteTimelineModal', () => {
|
|||
});
|
||||
|
||||
test('it shows correct toast message on success for deleted templates', async () => {
|
||||
(useParams as jest.Mock).mockReturnValue({ tabName: TimelineType.template });
|
||||
(useParams as jest.Mock).mockReturnValue({ tabName: TimelineTypeEnum.template });
|
||||
|
||||
const wrapper = mountWithIntl(<DeleteTimelineModalOverlay {...defaultProps} />);
|
||||
wrapper.find('button[data-test-subj="confirmModalConfirmButton"]').simulate('click');
|
||||
|
|
|
@ -12,7 +12,7 @@ import { createGlobalStyle } from 'styled-components';
|
|||
import { useParams } from 'react-router-dom';
|
||||
import { DeleteTimelineModal, DELETE_TIMELINE_MODAL_WIDTH } from './delete_timeline_modal';
|
||||
import type { DeleteTimelines } from '../types';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { useAppToasts } from '../../../../common/hooks/use_app_toasts';
|
||||
import * as i18n from '../translations';
|
||||
|
||||
|
@ -48,7 +48,7 @@ export const DeleteTimelineModalOverlay = React.memo<Props>(
|
|||
deleteTimelines(savedObjectIds, savedSearchIds);
|
||||
addSuccess({
|
||||
title:
|
||||
timelineType === TimelineType.template
|
||||
timelineType === TimelineTypeEnum.template
|
||||
? i18n.SUCCESSFULLY_DELETED_TIMELINE_TEMPLATES(savedObjectIds.length)
|
||||
: i18n.SUCCESSFULLY_DELETED_TIMELINES(savedObjectIds.length),
|
||||
});
|
||||
|
@ -56,7 +56,7 @@ export const DeleteTimelineModalOverlay = React.memo<Props>(
|
|||
deleteTimelines(savedObjectIds);
|
||||
addSuccess({
|
||||
title:
|
||||
timelineType === TimelineType.template
|
||||
timelineType === TimelineTypeEnum.template
|
||||
? i18n.SUCCESSFULLY_DELETED_TIMELINE_TEMPLATES(savedObjectIds.length)
|
||||
: i18n.SUCCESSFULLY_DELETED_TIMELINES(savedObjectIds.length),
|
||||
});
|
||||
|
|
|
@ -9,7 +9,7 @@ import type { EuiBasicTable } from '@elastic/eui';
|
|||
import { EuiContextMenuPanel, EuiContextMenuItem } from '@elastic/eui';
|
||||
import React, { useCallback, useMemo } from 'react';
|
||||
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
|
||||
import * as i18n from './translations';
|
||||
import type { DeleteTimelines, OpenTimelineResult } from './types';
|
||||
|
@ -21,7 +21,7 @@ export const useEditTimelineBatchActions = ({
|
|||
deleteTimelines,
|
||||
selectedItems,
|
||||
tableRef,
|
||||
timelineType = TimelineType.default,
|
||||
timelineType = TimelineTypeEnum.default,
|
||||
}: {
|
||||
deleteTimelines?: DeleteTimelines;
|
||||
selectedItems?: OpenTimelineResult[];
|
||||
|
@ -108,7 +108,7 @@ export const useEditTimelineBatchActions = ({
|
|||
onComplete={onCompleteBatchActions.bind(null, closePopover)}
|
||||
title={
|
||||
selectedItems?.length !== 1
|
||||
? timelineType === TimelineType.template
|
||||
? timelineType === TimelineTypeEnum.template
|
||||
? i18n.SELECTED_TEMPLATES(selectedItems?.length ?? 0)
|
||||
: i18n.SELECTED_TIMELINES(selectedItems?.length ?? 0)
|
||||
: selectedItems[0]?.title ?? ''
|
||||
|
|
|
@ -9,7 +9,7 @@ import React, { useCallback, useEffect } from 'react';
|
|||
import { useParams } from 'react-router-dom';
|
||||
|
||||
import * as i18n from '../translations';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { useAppToasts } from '../../../../common/hooks/use_app_toasts';
|
||||
import { exportSelectedTimeline } from '../../../containers/api';
|
||||
import { downloadBlob } from '../../../../common/utils/download_blob';
|
||||
|
@ -30,7 +30,7 @@ const ExportTimeline: React.FC<{
|
|||
|
||||
addSuccess({
|
||||
title:
|
||||
timelineType === TimelineType.template
|
||||
timelineType === TimelineTypeEnum.template
|
||||
? i18n.SUCCESSFULLY_EXPORTED_TIMELINE_TEMPLATES(exportCount)
|
||||
: i18n.SUCCESSFULLY_EXPORTED_TIMELINES(exportCount),
|
||||
'data-test-subj': 'addObjectToContainerSuccess',
|
||||
|
|
|
@ -24,7 +24,7 @@ import {
|
|||
} from './helpers';
|
||||
import type { OpenTimelineResult } from './types';
|
||||
import { TimelineId } from '../../../../common/types/timeline';
|
||||
import { TimelineType, TimelineStatus } from '../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum, TimelineStatusEnum } from '../../../../common/api/timeline';
|
||||
import {
|
||||
mockTimeline as mockSelectedTimeline,
|
||||
mockTemplate as mockSelectedTemplate,
|
||||
|
@ -325,14 +325,18 @@ describe('helpers', () => {
|
|||
savedObjectId: 'savedObject-1',
|
||||
title: 'Awesome Timeline',
|
||||
version: '1',
|
||||
status: TimelineStatus.active,
|
||||
timelineType: TimelineType.default,
|
||||
status: TimelineStatusEnum.active,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
};
|
||||
|
||||
const newTimeline = defaultTimelineToTimelineModel(timeline, false, TimelineType.template);
|
||||
const newTimeline = defaultTimelineToTimelineModel(
|
||||
timeline,
|
||||
false,
|
||||
TimelineTypeEnum.template
|
||||
);
|
||||
expect(newTimeline).toEqual({
|
||||
...defaultTimeline,
|
||||
timelineType: TimelineType.template,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
columns: defaultUdtHeaders,
|
||||
});
|
||||
});
|
||||
|
@ -342,11 +346,11 @@ describe('helpers', () => {
|
|||
savedObjectId: 'savedObject-1',
|
||||
title: 'Awesome Template',
|
||||
version: '1',
|
||||
status: TimelineStatus.active,
|
||||
timelineType: TimelineType.template,
|
||||
status: TimelineStatusEnum.active,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
};
|
||||
|
||||
const newTimeline = defaultTimelineToTimelineModel(timeline, false, TimelineType.default);
|
||||
const newTimeline = defaultTimelineToTimelineModel(timeline, false, TimelineTypeEnum.default);
|
||||
expect(newTimeline).toEqual({
|
||||
...defaultTimeline,
|
||||
columns: defaultUdtHeaders,
|
||||
|
@ -484,21 +488,21 @@ describe('helpers', () => {
|
|||
savedObjectId: 'savedObject-1',
|
||||
title: 'Awesome Timeline',
|
||||
version: '1',
|
||||
status: TimelineStatus.immutable,
|
||||
timelineType: TimelineType.template,
|
||||
status: TimelineStatusEnum.immutable,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
};
|
||||
|
||||
const newTimeline = defaultTimelineToTimelineModel(
|
||||
timeline,
|
||||
false,
|
||||
TimelineType.template,
|
||||
TimelineTypeEnum.template,
|
||||
false
|
||||
);
|
||||
expect(newTimeline).toEqual({
|
||||
...defaultTimeline,
|
||||
dateRange: { end: '2020-10-28T11:37:31.655Z', start: '2020-10-27T11:37:31.655Z' },
|
||||
status: TimelineStatus.immutable,
|
||||
timelineType: TimelineType.template,
|
||||
status: TimelineStatusEnum.immutable,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
title: 'Awesome Timeline',
|
||||
columns: defaultUdtHeaders,
|
||||
excludedRowRendererIds: [],
|
||||
|
@ -510,20 +514,20 @@ describe('helpers', () => {
|
|||
savedObjectId: 'savedObject-1',
|
||||
title: 'Awesome Timeline',
|
||||
version: '1',
|
||||
status: TimelineStatus.active,
|
||||
timelineType: TimelineType.default,
|
||||
status: TimelineStatusEnum.active,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
};
|
||||
|
||||
const newTimeline = defaultTimelineToTimelineModel(
|
||||
timeline,
|
||||
false,
|
||||
TimelineType.default,
|
||||
TimelineTypeEnum.default,
|
||||
false
|
||||
);
|
||||
expect(newTimeline).toEqual({
|
||||
...defaultTimeline,
|
||||
dateRange: { end: '2020-07-08T08:20:18.966Z', start: '2020-07-07T08:20:18.966Z' },
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
title: 'Awesome Timeline',
|
||||
columns: defaultUdtHeaders,
|
||||
});
|
||||
|
@ -534,22 +538,22 @@ describe('helpers', () => {
|
|||
savedObjectId: 'savedObject-1',
|
||||
title: 'Awesome Timeline',
|
||||
version: '1',
|
||||
status: TimelineStatus.active,
|
||||
timelineType: TimelineType.default,
|
||||
status: TimelineStatusEnum.active,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
};
|
||||
|
||||
const newTimeline = defaultTimelineToTimelineModel(
|
||||
timeline,
|
||||
false,
|
||||
TimelineType.default,
|
||||
TimelineTypeEnum.default,
|
||||
false
|
||||
);
|
||||
expect(newTimeline).toEqual({
|
||||
...defaultTimeline,
|
||||
dateRange: { end: '2020-07-08T08:20:18.966Z', start: '2020-07-07T08:20:18.966Z' },
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
title: 'Awesome Timeline',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
defaultColumns: defaultUdtHeaders,
|
||||
columns: defaultUdtHeaders,
|
||||
});
|
||||
|
@ -561,23 +565,23 @@ describe('helpers', () => {
|
|||
savedObjectId: 'savedObject-1',
|
||||
title: 'Awesome Timeline',
|
||||
version: '1',
|
||||
status: TimelineStatus.active,
|
||||
timelineType: TimelineType.default,
|
||||
status: TimelineStatusEnum.active,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
columns: customColumns,
|
||||
};
|
||||
|
||||
const newTimeline = defaultTimelineToTimelineModel(
|
||||
timeline,
|
||||
false,
|
||||
TimelineType.default,
|
||||
TimelineTypeEnum.default,
|
||||
false
|
||||
);
|
||||
expect(newTimeline).toEqual({
|
||||
...defaultTimeline,
|
||||
dateRange: { end: '2020-07-08T08:20:18.966Z', start: '2020-07-07T08:20:18.966Z' },
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
title: 'Awesome Timeline',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
defaultColumns: defaultUdtHeaders,
|
||||
columns: customColumns,
|
||||
});
|
||||
|
@ -623,7 +627,7 @@ describe('helpers', () => {
|
|||
duplicate: false,
|
||||
graphEventId: '',
|
||||
timelineId: '',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
onError,
|
||||
onOpenTimeline,
|
||||
openTimeline: true,
|
||||
|
@ -682,7 +686,7 @@ describe('helpers', () => {
|
|||
duplicate: false,
|
||||
graphEventId: '',
|
||||
timelineId: '',
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
openTimeline: true,
|
||||
};
|
||||
|
||||
|
@ -754,7 +758,7 @@ describe('helpers', () => {
|
|||
duplicate: false,
|
||||
graphEventId: '',
|
||||
timelineId: '',
|
||||
timelineType: TimelineType.template,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
onOpenTimeline,
|
||||
openTimeline: true,
|
||||
};
|
||||
|
@ -817,7 +821,7 @@ describe('helpers', () => {
|
|||
duplicate: false,
|
||||
graphEventId: '',
|
||||
timelineId: undefined,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
onOpenTimeline,
|
||||
openTimeline: true,
|
||||
unifiedComponentsInTimelineDisabled: false,
|
||||
|
@ -853,7 +857,7 @@ describe('helpers', () => {
|
|||
duplicate: false,
|
||||
graphEventId: '',
|
||||
timelineId: TimelineId.active,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
onOpenTimeline: undefined,
|
||||
openTimeline: true,
|
||||
unifiedComponentsInTimelineDisabled: false,
|
||||
|
@ -892,7 +896,7 @@ describe('helpers', () => {
|
|||
duplicate: false,
|
||||
graphEventId: '',
|
||||
timelineId: TimelineId.active,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
onOpenTimeline,
|
||||
openTimeline: true,
|
||||
unifiedComponentsInTimelineDisabled: false,
|
||||
|
|
|
@ -23,10 +23,11 @@ import type {
|
|||
Note,
|
||||
} from '../../../../common/api/timeline';
|
||||
import {
|
||||
RowRendererId,
|
||||
DataProviderType,
|
||||
TimelineStatus,
|
||||
TimelineType,
|
||||
DataProviderTypeEnum,
|
||||
RowRendererValues,
|
||||
TimelineStatusEnum,
|
||||
type TimelineType,
|
||||
TimelineTypeEnum,
|
||||
} from '../../../../common/api/timeline';
|
||||
import { TimelineId, TimelineTabs } from '../../../../common/types/timeline';
|
||||
import { useUpdateTimeline } from './use_update_timeline';
|
||||
|
@ -168,22 +169,22 @@ const getTemplateTimelineId = (
|
|||
targetTimelineType?: TimelineType
|
||||
) => {
|
||||
if (
|
||||
targetTimelineType === TimelineType.default &&
|
||||
timeline.timelineType === TimelineType.template
|
||||
targetTimelineType === TimelineTypeEnum.default &&
|
||||
timeline.timelineType === TimelineTypeEnum.template
|
||||
) {
|
||||
return timeline.templateTimelineId;
|
||||
}
|
||||
|
||||
return duplicate && timeline.timelineType === TimelineType.template
|
||||
return duplicate && timeline.timelineType === TimelineTypeEnum.template
|
||||
? // TODO: MOVE TO THE BACKEND
|
||||
uuidv4()
|
||||
: timeline.templateTimelineId;
|
||||
};
|
||||
|
||||
const convertToDefaultField = ({ and, ...dataProvider }: DataProviderResult) => {
|
||||
if (dataProvider.type === DataProviderType.template) {
|
||||
if (dataProvider.type === DataProviderTypeEnum.template) {
|
||||
return deepMerge(dataProvider, {
|
||||
type: DataProviderType.default,
|
||||
type: DataProviderTypeEnum.default,
|
||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||
enabled: dataProvider.queryMatch!.operator !== IS_OPERATOR,
|
||||
queryMatch: {
|
||||
|
@ -202,7 +203,7 @@ const getDataProviders = (
|
|||
dataProviders: TimelineResult['dataProviders'],
|
||||
timelineType?: TimelineType
|
||||
) => {
|
||||
if (duplicate && dataProviders && timelineType === TimelineType.default) {
|
||||
if (duplicate && dataProviders && timelineType === TimelineTypeEnum.default) {
|
||||
return dataProviders.map((dataProvider) => ({
|
||||
...convertToDefaultField(dataProvider),
|
||||
and: dataProvider.and?.map(convertToDefaultField) ?? [],
|
||||
|
@ -229,9 +230,9 @@ export const getTimelineStatus = (
|
|||
timelineType?: TimelineType
|
||||
) => {
|
||||
const isCreateTimelineFromAction = timelineType && timeline.timelineType !== timelineType;
|
||||
if (isCreateTimelineFromAction) return TimelineStatus.draft;
|
||||
if (isCreateTimelineFromAction) return TimelineStatusEnum.draft;
|
||||
|
||||
return duplicate ? TimelineStatus.active : timeline.status;
|
||||
return duplicate ? TimelineStatusEnum.active : timeline.status;
|
||||
};
|
||||
|
||||
export const defaultTimelineToTimelineModel = (
|
||||
|
@ -240,7 +241,7 @@ export const defaultTimelineToTimelineModel = (
|
|||
timelineType?: TimelineType,
|
||||
unifiedComponentsInTimelineDisabled?: boolean
|
||||
): TimelineModel => {
|
||||
const isTemplate = timeline.timelineType === TimelineType.template;
|
||||
const isTemplate = timeline.timelineType === TimelineTypeEnum.template;
|
||||
const defaultHeadersValue = !unifiedComponentsInTimelineDisabled
|
||||
? defaultUdtHeaders
|
||||
: defaultHeaders;
|
||||
|
@ -253,15 +254,15 @@ export const defaultTimelineToTimelineModel = (
|
|||
: defaultHeadersValue,
|
||||
defaultColumns: defaultHeadersValue,
|
||||
dateRange:
|
||||
timeline.status === TimelineStatus.immutable &&
|
||||
timeline.timelineType === TimelineType.template
|
||||
timeline.status === TimelineStatusEnum.immutable &&
|
||||
timeline.timelineType === TimelineTypeEnum.template
|
||||
? {
|
||||
start: DEFAULT_FROM_MOMENT.toISOString(),
|
||||
end: DEFAULT_TO_MOMENT.toISOString(),
|
||||
}
|
||||
: timeline.dateRange,
|
||||
dataProviders: getDataProviders(duplicate, timeline.dataProviders, timelineType),
|
||||
excludedRowRendererIds: isTemplate ? [] : Object.keys(RowRendererId),
|
||||
excludedRowRendererIds: isTemplate ? [] : RowRendererValues,
|
||||
eventIdToNoteIds: setEventIdToNoteIds(duplicate, timeline.eventIdToNoteIds),
|
||||
filters: timeline.filters != null ? timeline.filters.map(setTimelineFilters) : [],
|
||||
isFavorite: duplicate
|
||||
|
@ -365,7 +366,7 @@ export const useQueryTimelineById = () => {
|
|||
initialized: true,
|
||||
savedSearchId: savedSearchId ?? null,
|
||||
excludedRowRendererIds:
|
||||
!unifiedComponentsInTimelineDisabled && timelineType !== TimelineType.template
|
||||
!unifiedComponentsInTimelineDisabled && timelineType !== TimelineTypeEnum.template
|
||||
? timelineDefaults.excludedRowRendererIds
|
||||
: [],
|
||||
},
|
||||
|
|
|
@ -13,7 +13,7 @@ import { useHistory, useParams } from 'react-router-dom';
|
|||
|
||||
import '../../../common/mock/formatted_relative';
|
||||
import { SecurityPageName } from '../../../app/types';
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
import { TimelineId } from '../../../../common/types';
|
||||
import {
|
||||
TestProviders,
|
||||
|
@ -107,7 +107,7 @@ describe('StatefulOpenTimeline', () => {
|
|||
|
||||
beforeEach(() => {
|
||||
(useParams as jest.Mock).mockReturnValue({
|
||||
tabName: TimelineType.default,
|
||||
tabName: TimelineTypeEnum.default,
|
||||
pageName: SecurityPageName.timelines,
|
||||
});
|
||||
useUserPrivilegesMock.mockReturnValue({
|
||||
|
@ -172,12 +172,12 @@ describe('StatefulOpenTimeline', () => {
|
|||
}
|
||||
);
|
||||
|
||||
expect(result.current.timelineType).toBe(TimelineType.default);
|
||||
expect(result.current.timelineType).toBe(TimelineTypeEnum.default);
|
||||
});
|
||||
|
||||
test("should land on correct timelines' tab with url timelines/template", () => {
|
||||
(useParams as jest.Mock).mockReturnValue({
|
||||
tabName: TimelineType.template,
|
||||
tabName: TimelineTypeEnum.template,
|
||||
pageName: SecurityPageName.timelines,
|
||||
});
|
||||
|
||||
|
@ -188,12 +188,12 @@ describe('StatefulOpenTimeline', () => {
|
|||
}
|
||||
);
|
||||
|
||||
expect(result.current.timelineType).toBe(TimelineType.template);
|
||||
expect(result.current.timelineType).toBe(TimelineTypeEnum.template);
|
||||
});
|
||||
|
||||
test("should land on correct templates' tab after switching tab", async () => {
|
||||
(useParams as jest.Mock).mockReturnValue({
|
||||
tabName: TimelineType.template,
|
||||
tabName: TimelineTypeEnum.template,
|
||||
pageName: SecurityPageName.timelines,
|
||||
});
|
||||
|
||||
|
@ -209,7 +209,7 @@ describe('StatefulOpenTimeline', () => {
|
|||
);
|
||||
await waitFor(() => {
|
||||
wrapper
|
||||
.find(`[data-test-subj="timeline-${TimelineTabsStyle.tab}-${TimelineType.template}"]`)
|
||||
.find(`[data-test-subj="timeline-${TimelineTabsStyle.tab}-${TimelineTypeEnum.template}"]`)
|
||||
.first()
|
||||
.simulate('click');
|
||||
|
||||
|
@ -230,7 +230,7 @@ describe('StatefulOpenTimeline', () => {
|
|||
}
|
||||
);
|
||||
|
||||
expect(result.current.timelineType).toBe(TimelineType.default);
|
||||
expect(result.current.timelineType).toBe(TimelineTypeEnum.default);
|
||||
});
|
||||
|
||||
test('should not change url after switching filter', async () => {
|
||||
|
@ -252,7 +252,7 @@ describe('StatefulOpenTimeline', () => {
|
|||
await waitFor(() => {
|
||||
wrapper
|
||||
.find(
|
||||
`[data-test-subj="open-timeline-modal-body-${TimelineTabsStyle.filter}-${TimelineType.template}"]`
|
||||
`[data-test-subj="open-timeline-modal-body-${TimelineTabsStyle.filter}-${TimelineTypeEnum.template}"]`
|
||||
)
|
||||
.first()
|
||||
.simulate('click');
|
||||
|
@ -613,7 +613,7 @@ describe('StatefulOpenTimeline', () => {
|
|||
expect(
|
||||
wrapper
|
||||
.find(
|
||||
`[data-test-subj="open-timeline-modal-body-${TimelineTabsStyle.filter}-${TimelineType.default}"]`
|
||||
`[data-test-subj="open-timeline-modal-body-${TimelineTabsStyle.filter}-${TimelineTypeEnum.default}"]`
|
||||
)
|
||||
.exists()
|
||||
).toEqual(true);
|
||||
|
|
|
@ -153,7 +153,7 @@ export const StatefulOpenTimelineComponent = React.memo<OpenTimelineOwnProps>(
|
|||
/** The requested sort direction of the query results */
|
||||
const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>(DEFAULT_SORT_DIRECTION);
|
||||
/** The requested field to sort on */
|
||||
const [sortField, setSortField] = useState(DEFAULT_SORT_FIELD);
|
||||
const [sortField, setSortField] = useState<SortFieldTimeline>(DEFAULT_SORT_FIELD);
|
||||
|
||||
const getTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []);
|
||||
const timelineSavedObjectId = useShallowEqualSelector(
|
||||
|
@ -194,7 +194,7 @@ export const StatefulOpenTimelineComponent = React.memo<OpenTimelineOwnProps>(
|
|||
},
|
||||
search,
|
||||
sort: {
|
||||
sortField: sortField as SortFieldTimeline,
|
||||
sortField,
|
||||
sortOrder: sortDirection as Direction,
|
||||
},
|
||||
onlyUserFavorite: onlyFavorites,
|
||||
|
@ -318,7 +318,7 @@ export const StatefulOpenTimelineComponent = React.memo<OpenTimelineOwnProps>(
|
|||
if (sort != null) {
|
||||
const { field, direction } = sort;
|
||||
setSortDirection(direction);
|
||||
setSortField(field);
|
||||
setSortField(field as SortFieldTimeline);
|
||||
}
|
||||
}, []);
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ import type { TimelinesTableProps } from './timelines_table';
|
|||
import { mockTimelineResults } from '../../../common/mock/timeline_results';
|
||||
import { OpenTimeline } from './open_timeline';
|
||||
import { DEFAULT_SORT_DIRECTION, DEFAULT_SORT_FIELD } from './constants';
|
||||
import { TimelineType, TimelineStatus } from '../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum, TimelineStatusEnum } from '../../../../common/api/timeline';
|
||||
import { getMockTheme } from '../../../common/lib/kibana/kibana_react.mock';
|
||||
import { useUserPrivileges } from '../../../common/components/user_privileges';
|
||||
|
||||
|
@ -72,8 +72,8 @@ describe('OpenTimeline', () => {
|
|||
sortDirection: DEFAULT_SORT_DIRECTION,
|
||||
sortField: DEFAULT_SORT_FIELD,
|
||||
title,
|
||||
timelineType: TimelineType.default,
|
||||
timelineStatus: TimelineStatus.active,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
timelineStatus: TimelineStatusEnum.active,
|
||||
templateTimelineFilter: [<div key="mock-a" />, <div key="mock-b" />],
|
||||
totalSearchResultsCount: mockSearchResults.length,
|
||||
});
|
||||
|
@ -317,7 +317,7 @@ describe('OpenTimeline', () => {
|
|||
test("it should render bulk actions if timelineStatus is active (selecting custom templates' tab)", () => {
|
||||
const defaultProps = {
|
||||
...getDefaultTestProps(mockResults),
|
||||
timelineStatus: TimelineStatus.active,
|
||||
timelineStatus: TimelineStatusEnum.active,
|
||||
};
|
||||
const wrapper = mountWithIntl(
|
||||
<ThemeProvider theme={mockTheme}>
|
||||
|
@ -436,7 +436,7 @@ describe('OpenTimeline', () => {
|
|||
});
|
||||
const defaultProps = {
|
||||
...getDefaultTestProps(mockResults),
|
||||
timelineStatus: TimelineStatus.active,
|
||||
timelineStatus: TimelineStatusEnum.active,
|
||||
};
|
||||
const wrapper = mountWithIntl(
|
||||
<ThemeProvider theme={mockTheme}>
|
||||
|
@ -455,7 +455,7 @@ describe('OpenTimeline', () => {
|
|||
});
|
||||
const defaultProps = {
|
||||
...getDefaultTestProps(mockResults),
|
||||
timelineStatus: TimelineStatus.active,
|
||||
timelineStatus: TimelineStatusEnum.active,
|
||||
};
|
||||
const wrapper = mountWithIntl(
|
||||
<ThemeProvider theme={mockTheme}>
|
||||
|
@ -471,7 +471,7 @@ describe('OpenTimeline', () => {
|
|||
test('it should NOT include createFrom, duplicate, createRule, delete in timeline actions when user has read only access', () => {
|
||||
const defaultProps = {
|
||||
...getDefaultTestProps(mockResults),
|
||||
timelineStatus: TimelineStatus.active,
|
||||
timelineStatus: TimelineStatusEnum.active,
|
||||
};
|
||||
useUserPrivilegesMock.mockReturnValue({
|
||||
kibanaSecuritySolutionsPrivileges: { crud: false, read: true },
|
||||
|
@ -490,7 +490,7 @@ describe('OpenTimeline', () => {
|
|||
test("it should render selected count if timelineStatus is active (selecting custom templates' tab)", () => {
|
||||
const defaultProps = {
|
||||
...getDefaultTestProps(mockResults),
|
||||
timelineStatus: TimelineStatus.active,
|
||||
timelineStatus: TimelineStatusEnum.active,
|
||||
};
|
||||
const wrapper = mountWithIntl(
|
||||
<ThemeProvider theme={mockTheme}>
|
||||
|
@ -504,7 +504,7 @@ describe('OpenTimeline', () => {
|
|||
test("it should not render bulk actions if timelineStatus is immutable (selecting Elastic templates' tab)", () => {
|
||||
const defaultProps = {
|
||||
...getDefaultTestProps(mockResults),
|
||||
timelineStatus: TimelineStatus.immutable,
|
||||
timelineStatus: TimelineStatusEnum.immutable,
|
||||
};
|
||||
const wrapper = mountWithIntl(
|
||||
<ThemeProvider theme={mockTheme}>
|
||||
|
@ -521,7 +521,7 @@ describe('OpenTimeline', () => {
|
|||
});
|
||||
const defaultProps = {
|
||||
...getDefaultTestProps(mockResults),
|
||||
timelineStatus: TimelineStatus.immutable,
|
||||
timelineStatus: TimelineStatusEnum.immutable,
|
||||
};
|
||||
const wrapper = mountWithIntl(
|
||||
<ThemeProvider theme={mockTheme}>
|
||||
|
@ -537,7 +537,7 @@ describe('OpenTimeline', () => {
|
|||
test("it should not render selected count if timelineStatus is immutable (selecting Elastic templates' tab)", () => {
|
||||
const defaultProps = {
|
||||
...getDefaultTestProps(mockResults),
|
||||
timelineStatus: TimelineStatus.immutable,
|
||||
timelineStatus: TimelineStatusEnum.immutable,
|
||||
};
|
||||
const wrapper = mountWithIntl(
|
||||
<ThemeProvider theme={mockTheme}>
|
||||
|
|
|
@ -10,7 +10,7 @@ import type { EuiBasicTable } from '@elastic/eui';
|
|||
import { FormattedMessage } from '@kbn/i18n-react';
|
||||
|
||||
import styled from 'styled-components';
|
||||
import { TimelineType, TimelineStatus } from '../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum, TimelineStatusEnum } from '../../../../common/api/timeline';
|
||||
import { ImportDataModal } from '../../../common/components/import_data_modal';
|
||||
import {
|
||||
UtilityBarGroup,
|
||||
|
@ -65,7 +65,7 @@ export const OpenTimeline = React.memo<OpenTimelineProps>(
|
|||
setImportDataModalToggle,
|
||||
sortField,
|
||||
tabName,
|
||||
timelineType = TimelineType.default,
|
||||
timelineType = TimelineTypeEnum.default,
|
||||
timelineStatus,
|
||||
timelineFilter,
|
||||
templateTimelineFilter,
|
||||
|
@ -168,7 +168,7 @@ export const OpenTimeline = React.memo<OpenTimelineProps>(
|
|||
...(onCreateRuleFromEql != null ? createRuleFromEql : []),
|
||||
];
|
||||
|
||||
if (timelineStatus !== TimelineStatus.immutable) {
|
||||
if (timelineStatus !== TimelineStatusEnum.immutable) {
|
||||
timelineActions.push('export');
|
||||
timelineActions.push('selectable');
|
||||
}
|
||||
|
@ -176,7 +176,7 @@ export const OpenTimeline = React.memo<OpenTimelineProps>(
|
|||
if (
|
||||
onDeleteSelected != null &&
|
||||
deleteTimelines != null &&
|
||||
timelineStatus !== TimelineStatus.immutable
|
||||
timelineStatus !== TimelineStatusEnum.immutable
|
||||
) {
|
||||
timelineActions.push('delete');
|
||||
}
|
||||
|
@ -184,7 +184,7 @@ export const OpenTimeline = React.memo<OpenTimelineProps>(
|
|||
return timelineActions;
|
||||
}
|
||||
// user with read access should only see export
|
||||
if (timelineStatus !== TimelineStatus.immutable) {
|
||||
if (timelineStatus !== TimelineStatusEnum.immutable) {
|
||||
return ['export', 'selectable'];
|
||||
}
|
||||
return [];
|
||||
|
@ -248,15 +248,15 @@ export const OpenTimeline = React.memo<OpenTimelineProps>(
|
|||
<UtilityBarText data-test-subj="query-message">
|
||||
<>
|
||||
{i18n.SHOWING}{' '}
|
||||
{timelineType === TimelineType.template ? nTemplates : nTimelines}
|
||||
{timelineType === TimelineTypeEnum.template ? nTemplates : nTimelines}
|
||||
</>
|
||||
</UtilityBarText>
|
||||
</UtilityBarGroup>
|
||||
<UtilityBarGroup>
|
||||
{timelineStatus !== TimelineStatus.immutable && (
|
||||
{timelineStatus !== TimelineStatusEnum.immutable && (
|
||||
<>
|
||||
<UtilityBarText data-test-subj="selected-count">
|
||||
{timelineType === TimelineType.template
|
||||
{timelineType === TimelineTypeEnum.template
|
||||
? i18n.SELECTED_TEMPLATES((selectedItems || []).length)
|
||||
: i18n.SELECTED_TIMELINES((selectedItems || []).length)}
|
||||
</UtilityBarText>
|
||||
|
|
|
@ -16,7 +16,7 @@ import type { TimelinesTableProps } from '../timelines_table';
|
|||
import { mockTimelineResults } from '../../../../common/mock/timeline_results';
|
||||
import { OpenTimelineModalBody } from './open_timeline_modal_body';
|
||||
import { DEFAULT_SORT_DIRECTION, DEFAULT_SORT_FIELD } from '../constants';
|
||||
import { TimelineType, TimelineStatus } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum, TimelineStatusEnum } from '../../../../../common/api/timeline';
|
||||
import { getMockTheme } from '../../../../common/lib/kibana/kibana_react.mock';
|
||||
|
||||
jest.mock('../../../../common/lib/kibana');
|
||||
|
@ -55,8 +55,8 @@ describe('OpenTimelineModal', () => {
|
|||
selectedItems: [],
|
||||
sortDirection: DEFAULT_SORT_DIRECTION,
|
||||
sortField: DEFAULT_SORT_FIELD,
|
||||
timelineType: TimelineType.default,
|
||||
timelineStatus: TimelineStatus.active,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
timelineStatus: TimelineStatusEnum.active,
|
||||
templateTimelineFilter: [<div key={0} />],
|
||||
title,
|
||||
totalSearchResultsCount: mockSearchResults.length,
|
||||
|
|
|
@ -10,7 +10,7 @@ import { mountWithIntl } from '@kbn/test-jest-helpers';
|
|||
import React from 'react';
|
||||
import { ThemeProvider } from 'styled-components';
|
||||
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
|
||||
import { SearchRow } from '.';
|
||||
|
||||
|
@ -32,7 +32,7 @@ describe('SearchRow', () => {
|
|||
onQueryChange={jest.fn()}
|
||||
onToggleOnlyFavorites={jest.fn()}
|
||||
query=""
|
||||
timelineType={TimelineType.default}
|
||||
timelineType={TimelineTypeEnum.default}
|
||||
/>
|
||||
</ThemeProvider>
|
||||
);
|
||||
|
@ -52,7 +52,7 @@ describe('SearchRow', () => {
|
|||
onQueryChange={jest.fn()}
|
||||
onToggleOnlyFavorites={jest.fn()}
|
||||
query=""
|
||||
timelineType={TimelineType.default}
|
||||
timelineType={TimelineTypeEnum.default}
|
||||
/>
|
||||
</ThemeProvider>
|
||||
);
|
||||
|
@ -72,7 +72,7 @@ describe('SearchRow', () => {
|
|||
onQueryChange={jest.fn()}
|
||||
onToggleOnlyFavorites={onToggleOnlyFavorites}
|
||||
query=""
|
||||
timelineType={TimelineType.default}
|
||||
timelineType={TimelineTypeEnum.default}
|
||||
/>
|
||||
</ThemeProvider>
|
||||
);
|
||||
|
@ -90,7 +90,7 @@ describe('SearchRow', () => {
|
|||
onQueryChange={jest.fn()}
|
||||
onToggleOnlyFavorites={jest.fn()}
|
||||
query=""
|
||||
timelineType={TimelineType.default}
|
||||
timelineType={TimelineTypeEnum.default}
|
||||
/>
|
||||
</ThemeProvider>
|
||||
);
|
||||
|
@ -111,7 +111,7 @@ describe('SearchRow', () => {
|
|||
onQueryChange={jest.fn()}
|
||||
onToggleOnlyFavorites={jest.fn()}
|
||||
query=""
|
||||
timelineType={TimelineType.default}
|
||||
timelineType={TimelineTypeEnum.default}
|
||||
/>
|
||||
</ThemeProvider>
|
||||
);
|
||||
|
@ -136,7 +136,7 @@ describe('SearchRow', () => {
|
|||
onQueryChange={onQueryChange}
|
||||
onToggleOnlyFavorites={jest.fn()}
|
||||
query=""
|
||||
timelineType={TimelineType.default}
|
||||
timelineType={TimelineTypeEnum.default}
|
||||
/>
|
||||
</ThemeProvider>
|
||||
);
|
||||
|
|
|
@ -15,7 +15,7 @@ import {
|
|||
import React, { useMemo } from 'react';
|
||||
import styled from 'styled-components';
|
||||
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import * as i18n from '../translations';
|
||||
import type { OpenTimelineProps } from '../types';
|
||||
|
||||
|
@ -58,7 +58,7 @@ export const SearchRow = React.memo<Props>(
|
|||
const searchBox = useMemo(
|
||||
() => ({
|
||||
placeholder:
|
||||
timelineType === TimelineType.default
|
||||
timelineType === TimelineTypeEnum.default
|
||||
? i18n.SEARCH_PLACEHOLDER
|
||||
: i18n.SEARCH_TEMPLATE_PLACEHOLDER,
|
||||
incremental: false,
|
||||
|
|
|
@ -16,7 +16,7 @@ import type {
|
|||
OnOpenDeleteTimelineModal,
|
||||
} from '../types';
|
||||
import * as i18n from '../translations';
|
||||
import { TimelineStatus, TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
|
||||
type Action = EuiTableActionsColumnType<object>['actions'][number];
|
||||
/**
|
||||
|
@ -47,7 +47,7 @@ export const getActionsColumns = ({
|
|||
onClick: ({ savedObjectId }: OpenTimelineResult) => {
|
||||
onOpenTimeline({
|
||||
duplicate: true,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||
timelineId: savedObjectId!,
|
||||
});
|
||||
|
@ -57,7 +57,8 @@ export const getActionsColumns = ({
|
|||
description: i18n.CREATE_TIMELINE_FROM_TEMPLATE,
|
||||
'data-test-subj': 'create-from-template',
|
||||
available: (item: OpenTimelineResult) =>
|
||||
item.timelineType === TimelineType.template && actionTimelineToShow.includes('createFrom'),
|
||||
item.timelineType === TimelineTypeEnum.template &&
|
||||
actionTimelineToShow.includes('createFrom'),
|
||||
} as Action;
|
||||
|
||||
const createTemplateFromTimeline = {
|
||||
|
@ -66,7 +67,7 @@ export const getActionsColumns = ({
|
|||
onClick: ({ savedObjectId }: OpenTimelineResult) => {
|
||||
onOpenTimeline({
|
||||
duplicate: true,
|
||||
timelineType: TimelineType.template,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||
timelineId: savedObjectId!,
|
||||
});
|
||||
|
@ -76,7 +77,8 @@ export const getActionsColumns = ({
|
|||
description: i18n.CREATE_TEMPLATE_FROM_TIMELINE,
|
||||
'data-test-subj': 'create-template-from-timeline',
|
||||
available: (item: OpenTimelineResult) =>
|
||||
item.timelineType !== TimelineType.template && actionTimelineToShow.includes('createFrom'),
|
||||
item.timelineType !== TimelineTypeEnum.template &&
|
||||
actionTimelineToShow.includes('createFrom'),
|
||||
} as Action;
|
||||
|
||||
const openAsDuplicateColumn = {
|
||||
|
@ -93,7 +95,7 @@ export const getActionsColumns = ({
|
|||
description: i18n.OPEN_AS_DUPLICATE,
|
||||
'data-test-subj': 'open-duplicate',
|
||||
available: (item: OpenTimelineResult) =>
|
||||
item.timelineType !== TimelineType.template && actionTimelineToShow.includes('duplicate'),
|
||||
item.timelineType !== TimelineTypeEnum.template && actionTimelineToShow.includes('duplicate'),
|
||||
} as Action;
|
||||
|
||||
const openAsDuplicateTemplateColumn = {
|
||||
|
@ -110,7 +112,7 @@ export const getActionsColumns = ({
|
|||
description: i18n.OPEN_AS_DUPLICATE_TEMPLATE,
|
||||
'data-test-subj': 'open-duplicate-template',
|
||||
available: (item: OpenTimelineResult) =>
|
||||
item.timelineType === TimelineType.template && actionTimelineToShow.includes('duplicate'),
|
||||
item.timelineType === TimelineTypeEnum.template && actionTimelineToShow.includes('duplicate'),
|
||||
} as Action;
|
||||
|
||||
const exportTimelineAction = {
|
||||
|
@ -121,7 +123,7 @@ export const getActionsColumns = ({
|
|||
if (enableExportTimelineDownloader != null) enableExportTimelineDownloader(selectedTimeline);
|
||||
},
|
||||
enabled: (timeline: OpenTimelineResult) => {
|
||||
return timeline.savedObjectId != null && timeline.status !== TimelineStatus.immutable;
|
||||
return timeline.savedObjectId != null && timeline.status !== TimelineStatusEnum.immutable;
|
||||
},
|
||||
description: i18n.EXPORT_SELECTED,
|
||||
'data-test-subj': 'export-timeline',
|
||||
|
@ -136,7 +138,7 @@ export const getActionsColumns = ({
|
|||
if (onOpenDeleteTimelineModal != null) onOpenDeleteTimelineModal(selectedTimeline);
|
||||
},
|
||||
enabled: ({ savedObjectId, status }: OpenTimelineResult) =>
|
||||
savedObjectId != null && status !== TimelineStatus.immutable,
|
||||
savedObjectId != null && status !== TimelineStatusEnum.immutable,
|
||||
description: i18n.DELETE_SELECTED,
|
||||
'data-test-subj': 'delete-timeline',
|
||||
available: () => actionTimelineToShow.includes('delete') && deleteTimelines != null,
|
||||
|
@ -153,7 +155,7 @@ export const getActionsColumns = ({
|
|||
enabled: (timeline: OpenTimelineResult) =>
|
||||
onCreateRule != null &&
|
||||
timeline.savedObjectId != null &&
|
||||
timeline.status !== TimelineStatus.immutable,
|
||||
timeline.status !== TimelineStatusEnum.immutable,
|
||||
description: i18n.CREATE_RULE_FROM_TIMELINE,
|
||||
'data-test-subj': 'create-rule-from-timeline',
|
||||
available: ({ queryType }: OpenTimelineResult) =>
|
||||
|
@ -174,7 +176,7 @@ export const getActionsColumns = ({
|
|||
enabled: (timeline: OpenTimelineResult) =>
|
||||
onCreateRuleFromEql != null &&
|
||||
timeline.savedObjectId != null &&
|
||||
timeline.status !== TimelineStatus.immutable,
|
||||
timeline.status !== TimelineStatusEnum.immutable,
|
||||
description: i18n.CREATE_RULE_FROM_TIMELINE,
|
||||
'data-test-subj': 'create-rule-from-eql',
|
||||
available: ({ queryType }: OpenTimelineResult) =>
|
||||
|
|
|
@ -17,7 +17,7 @@ import * as i18n from '../translations';
|
|||
import type { OnOpenTimeline, OnToggleShowNotes, OpenTimelineResult } from '../types';
|
||||
import { getEmptyTagValue } from '../../../../common/components/empty_value';
|
||||
import { FormattedRelativePreferenceDate } from '../../../../common/components/formatted_date';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import { TimelineId } from '../../../../../common/types';
|
||||
|
||||
const LineClampTextContainer = styled.span`
|
||||
|
@ -68,7 +68,8 @@ export const getCommonColumns = ({
|
|||
{
|
||||
dataType: 'string' as EuiTableDataType,
|
||||
field: 'title',
|
||||
name: timelineType === TimelineType.default ? i18n.TIMELINE_NAME : i18n.TIMELINE_TEMPLATE_NAME,
|
||||
name:
|
||||
timelineType === TimelineTypeEnum.default ? i18n.TIMELINE_NAME : i18n.TIMELINE_TEMPLATE_NAME,
|
||||
render: (title: string, timelineResult: OpenTimelineResult) =>
|
||||
timelineResult.savedObjectId != null ? (
|
||||
<EuiLink
|
||||
|
|
|
@ -13,8 +13,7 @@ import { ACTION_COLUMN_WIDTH } from './common_styles';
|
|||
import { getNotesCount, getPinnedEventCount } from '../helpers';
|
||||
import * as i18n from '../translations';
|
||||
import type { FavoriteTimelineResult, OpenTimelineResult } from '../types';
|
||||
import type { TimelineTypeLiteralWithNull } from '../../../../../common/api/timeline';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
|
||||
/**
|
||||
* Returns the columns that have icon headers
|
||||
|
@ -22,7 +21,7 @@ import { TimelineType } from '../../../../../common/api/timeline';
|
|||
export const getIconHeaderColumns = ({
|
||||
timelineType,
|
||||
}: {
|
||||
timelineType: TimelineTypeLiteralWithNull;
|
||||
timelineType: TimelineType | null;
|
||||
}): Array<EuiTableFieldDataColumnType<object>> => {
|
||||
const columns = {
|
||||
note: {
|
||||
|
@ -77,5 +76,5 @@ export const getIconHeaderColumns = ({
|
|||
};
|
||||
const templateColumns = [columns.note, columns.favorite];
|
||||
const defaultColumns = [columns.pinnedEvent, columns.note, columns.favorite];
|
||||
return timelineType === TimelineType.template ? templateColumns : defaultColumns;
|
||||
return timelineType === TimelineTypeEnum.template ? templateColumns : defaultColumns;
|
||||
};
|
||||
|
|
|
@ -27,8 +27,11 @@ import { getActionsColumns } from './actions_columns';
|
|||
import { getCommonColumns } from './common_columns';
|
||||
import { getExtendedColumns } from './extended_columns';
|
||||
import { getIconHeaderColumns } from './icon_header_columns';
|
||||
import type { TimelineTypeLiteralWithNull } from '../../../../../common/api/timeline';
|
||||
import { TimelineStatus, TimelineType } from '../../../../../common/api/timeline';
|
||||
import {
|
||||
TimelineStatusEnum,
|
||||
type TimelineType,
|
||||
TimelineTypeEnum,
|
||||
} from '../../../../../common/api/timeline';
|
||||
import { useUserPrivileges } from '../../../../common/components/user_privileges';
|
||||
|
||||
/**
|
||||
|
@ -63,7 +66,7 @@ export const getTimelinesTableColumns = ({
|
|||
onSelectionChange: OnSelectionChange;
|
||||
onToggleShowNotes: OnToggleShowNotes;
|
||||
showExtendedColumns: boolean;
|
||||
timelineType: TimelineTypeLiteralWithNull;
|
||||
timelineType: TimelineType | null;
|
||||
hasCrudAccess: boolean;
|
||||
}): Array<EuiBasicTableColumn<object>> => {
|
||||
return [
|
||||
|
@ -110,7 +113,7 @@ export interface TimelinesTableProps {
|
|||
showExtendedColumns: boolean;
|
||||
sortDirection: 'asc' | 'desc';
|
||||
sortField: string;
|
||||
timelineType: TimelineTypeLiteralWithNull;
|
||||
timelineType: TimelineType | null;
|
||||
tableRef: React.MutableRefObject<EuiBasicTable<OpenTimelineResult> | null>;
|
||||
totalSearchResultsCount: number;
|
||||
}
|
||||
|
@ -171,7 +174,7 @@ export const TimelinesTable = React.memo<TimelinesTableProps>(
|
|||
return {
|
||||
selectable: (timelineResult: OpenTimelineResult) =>
|
||||
timelineResult.savedObjectId != null &&
|
||||
timelineResult.status !== TimelineStatus.immutable,
|
||||
timelineResult.status !== TimelineStatusEnum.immutable,
|
||||
selectableMessage: (selectable: boolean) =>
|
||||
!selectable ? i18n.MISSING_SAVED_OBJECT_ID : '',
|
||||
onSelectionChange,
|
||||
|
@ -215,7 +218,7 @@ export const TimelinesTable = React.memo<TimelinesTableProps>(
|
|||
const noItemsMessage =
|
||||
isLoading || searchResults == null
|
||||
? i18n.LOADING
|
||||
: timelineType === TimelineType.template
|
||||
: timelineType === TimelineTypeEnum.template
|
||||
? i18n.ZERO_TIMELINE_TEMPLATES_MATCH
|
||||
: i18n.ZERO_TIMELINES_MATCH;
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import { DEFAULT_SEARCH_RESULTS_PER_PAGE } from '../../../pages/timelines_page';
|
|||
import { DEFAULT_SORT_DIRECTION, DEFAULT_SORT_FIELD } from '../constants';
|
||||
import type { OpenTimelineResult } from '../types';
|
||||
import type { TimelinesTableProps } from '.';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
|
||||
export const getMockTimelinesTableProps = (
|
||||
mockOpenTimelineResults: OpenTimelineResult[]
|
||||
|
@ -31,7 +31,7 @@ export const getMockTimelinesTableProps = (
|
|||
showExtendedColumns: true,
|
||||
sortDirection: DEFAULT_SORT_DIRECTION,
|
||||
sortField: DEFAULT_SORT_FIELD,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
totalSearchResultsCount: mockOpenTimelineResults.length,
|
||||
tableRef: { current: null },
|
||||
});
|
||||
|
|
|
@ -11,11 +11,9 @@ import type { TimelineModel } from '../../store/model';
|
|||
import type {
|
||||
RowRendererId,
|
||||
SingleTimelineResolveResponse,
|
||||
TimelineTypeLiteral,
|
||||
TimelineTypeLiteralWithNull,
|
||||
TimelineType,
|
||||
TimelineStatus,
|
||||
TemplateTimelineTypeLiteral,
|
||||
TimelineStatusLiteralWithNull,
|
||||
TemplateTimelineType,
|
||||
Note,
|
||||
} from '../../../../common/api/timeline';
|
||||
|
||||
|
@ -63,7 +61,7 @@ export interface OpenTimelineResult {
|
|||
status?: TimelineStatus | null;
|
||||
title?: string | null;
|
||||
templateTimelineId?: string | null;
|
||||
timelineType?: TimelineTypeLiteral;
|
||||
timelineType?: TimelineType;
|
||||
updated?: number | null;
|
||||
updatedBy?: string | null;
|
||||
}
|
||||
|
@ -98,7 +96,7 @@ export type OnOpenTimeline = ({
|
|||
}: {
|
||||
duplicate: boolean;
|
||||
timelineId: string;
|
||||
timelineType?: TimelineTypeLiteral;
|
||||
timelineType?: TimelineType;
|
||||
}) => void;
|
||||
|
||||
export type OnOpenDeleteTimelineModal = (selectedItem: OpenTimelineResult) => void;
|
||||
|
@ -195,9 +193,9 @@ export interface OpenTimelineProps {
|
|||
/** the requested field to sort on */
|
||||
sortField: string;
|
||||
/** this affects timeline's behaviour like editable / duplicatible */
|
||||
timelineType: TimelineTypeLiteralWithNull;
|
||||
timelineType: TimelineType | null;
|
||||
/* active or immutable */
|
||||
timelineStatus: TimelineStatusLiteralWithNull;
|
||||
timelineStatus: TimelineStatus | null;
|
||||
/** when timelineType === template, templatetimelineFilter is a JSX.Element */
|
||||
templateTimelineFilter: JSX.Element[] | null;
|
||||
/** timeline / timeline template */
|
||||
|
@ -240,13 +238,13 @@ export enum TimelineTabsStyle {
|
|||
export interface TimelineTab {
|
||||
disabled: boolean;
|
||||
href: string;
|
||||
id: TimelineTypeLiteral;
|
||||
id: TimelineType;
|
||||
name: string;
|
||||
onClick: (ev: { preventDefault: () => void }) => void;
|
||||
}
|
||||
|
||||
export interface TemplateTimelineFilter {
|
||||
id: TemplateTimelineTypeLiteral;
|
||||
id: TemplateTimelineType;
|
||||
name: string;
|
||||
disabled: boolean;
|
||||
withNext: boolean;
|
||||
|
|
|
@ -9,14 +9,14 @@ import React, { useState, useCallback, useMemo } from 'react';
|
|||
import { EuiFilterButton } from '@elastic/eui';
|
||||
|
||||
import type {
|
||||
TimelineTypeLiteralWithNull,
|
||||
TemplateTimelineTypeLiteralWithNull,
|
||||
TimelineStatusLiteralWithNull,
|
||||
} from '../../../../common/api/timeline';
|
||||
import {
|
||||
TemplateTimelineType,
|
||||
TimelineStatus,
|
||||
TimelineType,
|
||||
TemplateTimelineType,
|
||||
} from '../../../../common/api/timeline';
|
||||
import {
|
||||
TemplateTimelineTypeEnum,
|
||||
TimelineStatusEnum,
|
||||
TimelineTypeEnum,
|
||||
} from '../../../../common/api/timeline';
|
||||
|
||||
import * as i18n from './translations';
|
||||
|
@ -28,18 +28,18 @@ export const useTimelineStatus = ({
|
|||
elasticTemplateTimelineCount,
|
||||
customTemplateTimelineCount,
|
||||
}: {
|
||||
timelineType: TimelineTypeLiteralWithNull;
|
||||
timelineType: TimelineType | null;
|
||||
elasticTemplateTimelineCount?: number | null;
|
||||
customTemplateTimelineCount?: number | null;
|
||||
}): {
|
||||
timelineStatus: TimelineStatusLiteralWithNull;
|
||||
templateTimelineType: TemplateTimelineTypeLiteralWithNull;
|
||||
timelineStatus: TimelineStatus | null;
|
||||
templateTimelineType: TemplateTimelineType | null;
|
||||
templateTimelineFilter: JSX.Element[] | null;
|
||||
installPrepackagedTimelines: () => void;
|
||||
} => {
|
||||
const [selectedTab, setSelectedTab] = useState<TemplateTimelineTypeLiteralWithNull>(null);
|
||||
const [selectedTab, setSelectedTab] = useState<TemplateTimelineType | null>(null);
|
||||
const isTemplateFilterEnabled = useMemo(
|
||||
() => timelineType === TimelineType.template,
|
||||
() => timelineType === TimelineTypeEnum.template,
|
||||
[timelineType]
|
||||
);
|
||||
|
||||
|
@ -52,23 +52,23 @@ export const useTimelineStatus = ({
|
|||
() =>
|
||||
templateTimelineType == null
|
||||
? null
|
||||
: templateTimelineType === TemplateTimelineType.elastic
|
||||
? TimelineStatus.immutable
|
||||
: TimelineStatus.active,
|
||||
: templateTimelineType === TemplateTimelineTypeEnum.elastic
|
||||
? TimelineStatusEnum.immutable
|
||||
: TimelineStatusEnum.active,
|
||||
[templateTimelineType]
|
||||
);
|
||||
|
||||
const filters = useMemo(
|
||||
() => [
|
||||
{
|
||||
id: TemplateTimelineType.elastic,
|
||||
id: TemplateTimelineTypeEnum.elastic,
|
||||
name: i18n.FILTER_ELASTIC_TIMELINES,
|
||||
disabled: !isTemplateFilterEnabled,
|
||||
withNext: true,
|
||||
count: elasticTemplateTimelineCount ?? undefined,
|
||||
},
|
||||
{
|
||||
id: TemplateTimelineType.custom,
|
||||
id: TemplateTimelineTypeEnum.custom,
|
||||
name: i18n.FILTER_CUSTOM_TIMELINES,
|
||||
disabled: !isTemplateFilterEnabled,
|
||||
withNext: false,
|
||||
|
@ -108,7 +108,7 @@ export const useTimelineStatus = ({
|
|||
}, [templateTimelineType, filters, isTemplateFilterEnabled, onFilterClicked]);
|
||||
|
||||
const installPrepackagedTimelines = useCallback(async () => {
|
||||
if (templateTimelineType !== TemplateTimelineType.custom) {
|
||||
if (templateTimelineType !== TemplateTimelineTypeEnum.custom) {
|
||||
await installPrepackedTimelines();
|
||||
}
|
||||
}, [templateTimelineType]);
|
||||
|
|
|
@ -10,8 +10,7 @@ import { useParams } from 'react-router-dom';
|
|||
import { EuiTabs, EuiTab, EuiSpacer } from '@elastic/eui';
|
||||
|
||||
import { noop } from 'lodash/fp';
|
||||
import type { TimelineTypeLiteralWithNull } from '../../../../common/api/timeline';
|
||||
import { TimelineType } from '../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
import { SecurityPageName } from '../../../app/types';
|
||||
import { getTimelineTabsUrl, useFormatUrl } from '../../../common/components/link_to';
|
||||
import * as i18n from './translations';
|
||||
|
@ -25,7 +24,7 @@ export interface UseTimelineTypesArgs {
|
|||
}
|
||||
|
||||
export interface UseTimelineTypesResult {
|
||||
timelineType: TimelineTypeLiteralWithNull;
|
||||
timelineType: TimelineType | null;
|
||||
timelineTabs: JSX.Element;
|
||||
timelineFilters: JSX.Element;
|
||||
}
|
||||
|
@ -37,19 +36,19 @@ export const useTimelineTypes = ({
|
|||
const { formatUrl, search: urlSearch } = useFormatUrl(SecurityPageName.timelines);
|
||||
const { navigateToUrl } = useKibana().services.application;
|
||||
const { tabName } = useParams<{ pageName: SecurityPageName; tabName: string }>();
|
||||
const [timelineType, setTimelineTypes] = useState<TimelineTypeLiteralWithNull>(
|
||||
tabName === TimelineType.default || tabName === TimelineType.template
|
||||
const [timelineType, setTimelineTypes] = useState<TimelineType | null>(
|
||||
tabName === TimelineTypeEnum.default || tabName === TimelineTypeEnum.template
|
||||
? tabName
|
||||
: TimelineType.default
|
||||
: TimelineTypeEnum.default
|
||||
);
|
||||
|
||||
const notesEnabled = useIsExperimentalFeatureEnabled('securitySolutionNotesEnabled');
|
||||
|
||||
const timelineUrl = useMemo(() => {
|
||||
return formatUrl(getTimelineTabsUrl(TimelineType.default, urlSearch));
|
||||
return formatUrl(getTimelineTabsUrl(TimelineTypeEnum.default, urlSearch));
|
||||
}, [formatUrl, urlSearch]);
|
||||
const templateUrl = useMemo(() => {
|
||||
return formatUrl(getTimelineTabsUrl(TimelineType.template, urlSearch));
|
||||
return formatUrl(getTimelineTabsUrl(TimelineTypeEnum.template, urlSearch));
|
||||
}, [formatUrl, urlSearch]);
|
||||
|
||||
const notesUrl = useMemo(() => {
|
||||
|
@ -83,7 +82,7 @@ export const useTimelineTypes = ({
|
|||
const getFilterOrTabs: (timelineTabsStyle: TimelineTabsStyle) => TimelineTab[] = useCallback(
|
||||
(timelineTabsStyle: TimelineTabsStyle) => [
|
||||
{
|
||||
id: TimelineType.default,
|
||||
id: TimelineTypeEnum.default,
|
||||
name: i18n.TAB_TIMELINES,
|
||||
href: timelineUrl,
|
||||
disabled: false,
|
||||
|
@ -91,7 +90,7 @@ export const useTimelineTypes = ({
|
|||
onClick: timelineTabsStyle === TimelineTabsStyle.tab ? goToTimeline : noop,
|
||||
},
|
||||
{
|
||||
id: TimelineType.template,
|
||||
id: TimelineTypeEnum.template,
|
||||
name: i18n.TAB_TEMPLATES,
|
||||
href: templateUrl,
|
||||
disabled: false,
|
||||
|
|
|
@ -9,7 +9,7 @@ import { useCallback } from 'react';
|
|||
import { useDispatch } from 'react-redux';
|
||||
import { isEmpty } from 'lodash/fp';
|
||||
import type { Note } from '../../../../common/api/timeline';
|
||||
import { TimelineStatus, TimelineType } from '../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../common/api/timeline';
|
||||
import { createNote } from '../notes/helpers';
|
||||
|
||||
import { InputsModelId } from '../../../common/store/inputs/constants';
|
||||
|
@ -65,8 +65,8 @@ export const useUpdateTimeline = () => {
|
|||
);
|
||||
}
|
||||
if (
|
||||
_timeline.status === TimelineStatus.immutable &&
|
||||
_timeline.timelineType === TimelineType.template
|
||||
_timeline.status === TimelineStatusEnum.immutable &&
|
||||
_timeline.timelineType === TimelineTypeEnum.template
|
||||
) {
|
||||
dispatch(
|
||||
dispatchSetRelativeRangeDatePicker({
|
||||
|
|
|
@ -11,13 +11,12 @@ import { createMockStore, mockGlobalState, TestProviders } from '../../../common
|
|||
import { fireEvent, render, waitFor } from '@testing-library/react';
|
||||
import { RowRendererSwitch } from '.';
|
||||
import { TimelineId } from '../../../../common/types';
|
||||
import { RowRendererId } from '../../../../common/api/timeline';
|
||||
import { RowRendererValues } from '../../../../common/api/timeline';
|
||||
|
||||
const localState = structuredClone(mockGlobalState);
|
||||
|
||||
// exclude all row renderers by default
|
||||
localState.timeline.timelineById[TimelineId.test].excludedRowRendererIds =
|
||||
Object.values(RowRendererId);
|
||||
localState.timeline.timelineById[TimelineId.test].excludedRowRendererIds = RowRendererValues;
|
||||
|
||||
const renderTestComponent = (props?: ComponentProps<typeof TestProviders>) => {
|
||||
const store = props?.store ?? createMockStore(localState);
|
||||
|
@ -69,7 +68,7 @@ describe('Row Renderer Switch', () => {
|
|||
expect(getByTestId('row-renderer-switch')).toHaveAttribute('aria-checked', 'false');
|
||||
expect(
|
||||
localStore.getState().timeline.timelineById[TimelineId.test].excludedRowRendererIds
|
||||
).toMatchObject(Object.values(RowRendererId));
|
||||
).toMatchObject(RowRendererValues);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -10,7 +10,7 @@ import { EuiToolTip, EuiSwitch, EuiFormRow, useGeneratedHtmlId } from '@elastic/
|
|||
import React, { useCallback, useMemo } from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import styled from 'styled-components';
|
||||
import { RowRendererId } from '../../../../common/api/timeline';
|
||||
import { RowRendererValues } from '../../../../common/api/timeline';
|
||||
import type { State } from '../../../common/store';
|
||||
import { setExcludedRowRendererIds } from '../../store/actions';
|
||||
import { selectExcludedRowRendererIds } from '../../store/selectors';
|
||||
|
@ -40,7 +40,7 @@ export const RowRendererSwitch = React.memo(function RowRendererSwitch(
|
|||
);
|
||||
|
||||
const isAnyRowRendererEnabled = useMemo(
|
||||
() => Object.values(RowRendererId).some((id) => !excludedRowRendererIds.includes(id)),
|
||||
() => RowRendererValues.some((id) => !excludedRowRendererIds.includes(id)),
|
||||
[excludedRowRendererIds]
|
||||
);
|
||||
|
||||
|
@ -48,7 +48,7 @@ export const RowRendererSwitch = React.memo(function RowRendererSwitch(
|
|||
dispatch(
|
||||
setExcludedRowRendererIds({
|
||||
id: timelineId,
|
||||
excludedRowRendererIds: Object.values(RowRendererId),
|
||||
excludedRowRendererIds: RowRendererValues,
|
||||
})
|
||||
);
|
||||
}, [dispatch, timelineId]);
|
||||
|
|
|
@ -4,26 +4,26 @@
|
|||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
import { RowRendererId } from '../../../../../common/api/timeline';
|
||||
import { type RowRendererId, RowRendererIdEnum } from '../../../../../common/api/timeline';
|
||||
import * as i18n from './translations';
|
||||
|
||||
export const eventRendererNames: { [key in RowRendererId]: string } = {
|
||||
[RowRendererId.alert]: i18n.ALERT_NAME,
|
||||
[RowRendererId.alerts]: i18n.ALERTS_NAME,
|
||||
[RowRendererId.auditd]: i18n.AUDITD_NAME,
|
||||
[RowRendererId.auditd_file]: i18n.AUDITD_FILE_NAME,
|
||||
[RowRendererId.library]: i18n.LIBRARY_NAME,
|
||||
[RowRendererId.system_security_event]: i18n.AUTHENTICATION_NAME,
|
||||
[RowRendererId.system_dns]: i18n.DNS_NAME,
|
||||
[RowRendererId.netflow]: i18n.FLOW_NAME,
|
||||
[RowRendererId.system]: i18n.SYSTEM_NAME,
|
||||
[RowRendererId.system_endgame_process]: i18n.PROCESS,
|
||||
[RowRendererId.registry]: i18n.REGISTRY_NAME,
|
||||
[RowRendererId.system_fim]: i18n.FIM_NAME,
|
||||
[RowRendererId.system_file]: i18n.FILE_NAME,
|
||||
[RowRendererId.system_socket]: i18n.SOCKET_NAME,
|
||||
[RowRendererId.suricata]: 'Suricata',
|
||||
[RowRendererId.threat_match]: i18n.THREAT_MATCH_NAME,
|
||||
[RowRendererId.zeek]: i18n.ZEEK_NAME,
|
||||
[RowRendererId.plain]: '',
|
||||
[RowRendererIdEnum.alert]: i18n.ALERT_NAME,
|
||||
[RowRendererIdEnum.alerts]: i18n.ALERTS_NAME,
|
||||
[RowRendererIdEnum.auditd]: i18n.AUDITD_NAME,
|
||||
[RowRendererIdEnum.auditd_file]: i18n.AUDITD_FILE_NAME,
|
||||
[RowRendererIdEnum.library]: i18n.LIBRARY_NAME,
|
||||
[RowRendererIdEnum.system_security_event]: i18n.AUTHENTICATION_NAME,
|
||||
[RowRendererIdEnum.system_dns]: i18n.DNS_NAME,
|
||||
[RowRendererIdEnum.netflow]: i18n.FLOW_NAME,
|
||||
[RowRendererIdEnum.system]: i18n.SYSTEM_NAME,
|
||||
[RowRendererIdEnum.system_endgame_process]: i18n.PROCESS,
|
||||
[RowRendererIdEnum.registry]: i18n.REGISTRY_NAME,
|
||||
[RowRendererIdEnum.system_fim]: i18n.FIM_NAME,
|
||||
[RowRendererIdEnum.system_file]: i18n.FILE_NAME,
|
||||
[RowRendererIdEnum.system_socket]: i18n.SOCKET_NAME,
|
||||
[RowRendererIdEnum.suricata]: 'Suricata',
|
||||
[RowRendererIdEnum.threat_match]: i18n.THREAT_MATCH_NAME,
|
||||
[RowRendererIdEnum.zeek]: i18n.ZEEK_NAME,
|
||||
[RowRendererIdEnum.plain]: '',
|
||||
};
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import { EuiLink } from '@elastic/eui';
|
||||
import React from 'react';
|
||||
|
||||
import { RowRendererId } from '../../../../../common/api/timeline';
|
||||
import { type RowRendererId, RowRendererIdEnum } from '../../../../../common/api/timeline';
|
||||
import {
|
||||
AlertsExample,
|
||||
AuditdExample,
|
||||
|
@ -51,15 +51,15 @@ export interface RowRendererOption {
|
|||
|
||||
export const renderers: RowRendererOption[] = [
|
||||
{
|
||||
id: RowRendererId.alerts,
|
||||
name: eventRendererNames[RowRendererId.alerts],
|
||||
id: RowRendererIdEnum.alerts,
|
||||
name: eventRendererNames[RowRendererIdEnum.alerts],
|
||||
description: i18n.ALERTS_DESCRIPTION,
|
||||
example: AlertsExample,
|
||||
searchableDescription: i18n.ALERTS_DESCRIPTION,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.auditd,
|
||||
name: eventRendererNames[RowRendererId.auditd],
|
||||
id: RowRendererIdEnum.auditd,
|
||||
name: eventRendererNames[RowRendererIdEnum.auditd],
|
||||
description: (
|
||||
<span>
|
||||
<Link url="https://www.elastic.co/guide/en/beats/auditbeat/current/auditbeat-module-auditd.html">
|
||||
|
@ -72,8 +72,8 @@ export const renderers: RowRendererOption[] = [
|
|||
searchableDescription: `${i18n.AUDITD_NAME} ${i18n.AUDITD_DESCRIPTION_PART1}`,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.auditd_file,
|
||||
name: eventRendererNames[RowRendererId.auditd_file],
|
||||
id: RowRendererIdEnum.auditd_file,
|
||||
name: eventRendererNames[RowRendererIdEnum.auditd_file],
|
||||
description: (
|
||||
<span>
|
||||
<Link url="https://www.elastic.co/guide/en/beats/auditbeat/current/auditbeat-module-auditd.html">
|
||||
|
@ -86,15 +86,15 @@ export const renderers: RowRendererOption[] = [
|
|||
searchableDescription: `${i18n.AUDITD_FILE_NAME} ${i18n.AUDITD_FILE_DESCRIPTION_PART1}`,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.library,
|
||||
name: eventRendererNames[RowRendererId.library],
|
||||
id: RowRendererIdEnum.library,
|
||||
name: eventRendererNames[RowRendererIdEnum.library],
|
||||
description: i18n.LIBRARY_DESCRIPTION,
|
||||
example: LibraryExample,
|
||||
searchableDescription: i18n.LIBRARY_DESCRIPTION,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.system_security_event,
|
||||
name: eventRendererNames[RowRendererId.system_security_event],
|
||||
id: RowRendererIdEnum.system_security_event,
|
||||
name: eventRendererNames[RowRendererIdEnum.system_security_event],
|
||||
description: (
|
||||
<div>
|
||||
<p>{i18n.AUTHENTICATION_DESCRIPTION_PART1}</p>
|
||||
|
@ -106,15 +106,15 @@ export const renderers: RowRendererOption[] = [
|
|||
searchableDescription: `${i18n.AUTHENTICATION_DESCRIPTION_PART1} ${i18n.AUTHENTICATION_DESCRIPTION_PART2}`,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.system_dns,
|
||||
name: eventRendererNames[RowRendererId.system_dns],
|
||||
id: RowRendererIdEnum.system_dns,
|
||||
name: eventRendererNames[RowRendererIdEnum.system_dns],
|
||||
description: i18n.DNS_DESCRIPTION_PART1,
|
||||
example: SystemDnsExample,
|
||||
searchableDescription: i18n.DNS_DESCRIPTION_PART1,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.netflow,
|
||||
name: eventRendererNames[RowRendererId.netflow],
|
||||
id: RowRendererIdEnum.netflow,
|
||||
name: eventRendererNames[RowRendererIdEnum.netflow],
|
||||
description: (
|
||||
<div>
|
||||
<p>{i18n.FLOW_DESCRIPTION_PART1}</p>
|
||||
|
@ -126,8 +126,8 @@ export const renderers: RowRendererOption[] = [
|
|||
searchableDescription: `${i18n.FLOW_DESCRIPTION_PART1} ${i18n.FLOW_DESCRIPTION_PART2}`,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.system,
|
||||
name: eventRendererNames[RowRendererId.system],
|
||||
id: RowRendererIdEnum.system,
|
||||
name: eventRendererNames[RowRendererIdEnum.system],
|
||||
description: (
|
||||
<div>
|
||||
<p>
|
||||
|
@ -145,8 +145,8 @@ export const renderers: RowRendererOption[] = [
|
|||
searchableDescription: `${i18n.SYSTEM_DESCRIPTION_PART1} ${i18n.SYSTEM_NAME} ${i18n.SYSTEM_DESCRIPTION_PART2} ${i18n.SYSTEM_DESCRIPTION_PART3}`,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.system_endgame_process,
|
||||
name: eventRendererNames[RowRendererId.system_endgame_process],
|
||||
id: RowRendererIdEnum.system_endgame_process,
|
||||
name: eventRendererNames[RowRendererIdEnum.system_endgame_process],
|
||||
description: (
|
||||
<div>
|
||||
<p>{i18n.PROCESS_DESCRIPTION_PART1}</p>
|
||||
|
@ -158,29 +158,29 @@ export const renderers: RowRendererOption[] = [
|
|||
searchableDescription: `${i18n.PROCESS_DESCRIPTION_PART1} ${i18n.PROCESS_DESCRIPTION_PART2}`,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.registry,
|
||||
name: eventRendererNames[RowRendererId.registry],
|
||||
id: RowRendererIdEnum.registry,
|
||||
name: eventRendererNames[RowRendererIdEnum.registry],
|
||||
description: i18n.REGISTRY_DESCRIPTION,
|
||||
example: RegistryExample,
|
||||
searchableDescription: i18n.REGISTRY_DESCRIPTION,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.system_fim,
|
||||
name: eventRendererNames[RowRendererId.system_fim],
|
||||
id: RowRendererIdEnum.system_fim,
|
||||
name: eventRendererNames[RowRendererIdEnum.system_fim],
|
||||
description: i18n.FIM_DESCRIPTION_PART1,
|
||||
example: SystemFimExample,
|
||||
searchableDescription: i18n.FIM_DESCRIPTION_PART1,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.system_file,
|
||||
name: eventRendererNames[RowRendererId.system_file],
|
||||
id: RowRendererIdEnum.system_file,
|
||||
name: eventRendererNames[RowRendererIdEnum.system_file],
|
||||
description: i18n.FILE_DESCRIPTION_PART1,
|
||||
example: SystemFileExample,
|
||||
searchableDescription: i18n.FILE_DESCRIPTION_PART1,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.system_socket,
|
||||
name: eventRendererNames[RowRendererId.system_socket],
|
||||
id: RowRendererIdEnum.system_socket,
|
||||
name: eventRendererNames[RowRendererIdEnum.system_socket],
|
||||
description: (
|
||||
<div>
|
||||
<p>{i18n.SOCKET_DESCRIPTION_PART1}</p>
|
||||
|
@ -192,8 +192,8 @@ export const renderers: RowRendererOption[] = [
|
|||
searchableDescription: `${i18n.SOCKET_DESCRIPTION_PART1} ${i18n.SOCKET_DESCRIPTION_PART2}`,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.suricata,
|
||||
name: eventRendererNames[RowRendererId.suricata],
|
||||
id: RowRendererIdEnum.suricata,
|
||||
name: eventRendererNames[RowRendererIdEnum.suricata],
|
||||
description: (
|
||||
<p>
|
||||
{i18n.SURICATA_DESCRIPTION_PART1}{' '}
|
||||
|
@ -207,15 +207,15 @@ export const renderers: RowRendererOption[] = [
|
|||
searchableDescription: `${i18n.SURICATA_DESCRIPTION_PART1} ${i18n.SURICATA_NAME} ${i18n.SURICATA_DESCRIPTION_PART2}`,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.threat_match,
|
||||
name: eventRendererNames[RowRendererId.threat_match],
|
||||
id: RowRendererIdEnum.threat_match,
|
||||
name: eventRendererNames[RowRendererIdEnum.threat_match],
|
||||
description: i18n.THREAT_MATCH_DESCRIPTION,
|
||||
example: ThreatMatchExample,
|
||||
searchableDescription: `${i18n.THREAT_MATCH_NAME} ${i18n.THREAT_MATCH_DESCRIPTION}`,
|
||||
},
|
||||
{
|
||||
id: RowRendererId.zeek,
|
||||
name: eventRendererNames[RowRendererId.zeek],
|
||||
id: RowRendererIdEnum.zeek,
|
||||
name: eventRendererNames[RowRendererIdEnum.zeek],
|
||||
description: (
|
||||
<p>
|
||||
{i18n.ZEEK_DESCRIPTION_PART1}{' '}
|
||||
|
|
|
@ -23,7 +23,7 @@ import { useDispatch } from 'react-redux';
|
|||
import styled from 'styled-components';
|
||||
|
||||
import type { State } from '../../../common/store';
|
||||
import { RowRendererId } from '../../../../common/api/timeline';
|
||||
import { RowRendererValues } from '../../../../common/api/timeline';
|
||||
import { useDeepEqualSelector } from '../../../common/hooks/use_selector';
|
||||
import { setExcludedRowRendererIds as dispatchSetExcludedRowRendererIds } from '../../store/actions';
|
||||
import { timelineSelectors } from '../../store';
|
||||
|
@ -94,7 +94,7 @@ const StatefulRowRenderersBrowserComponent: React.FC<StatefulRowRenderersBrowser
|
|||
const hideFieldBrowser = useCallback(() => setShow(false), []);
|
||||
|
||||
const handleDisableAll = useCallback(() => {
|
||||
setExcludedRowRendererIds(Object.values(RowRendererId));
|
||||
setExcludedRowRendererIds(RowRendererValues);
|
||||
}, [setExcludedRowRendererIds]);
|
||||
|
||||
const handleEnableAll = useCallback(() => {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import React from 'react';
|
||||
import { render } from '@testing-library/react';
|
||||
import { TimelineSaveStatus } from '.';
|
||||
import { TimelineStatus } from '../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum } from '../../../../common/api/timeline';
|
||||
import { useDeepEqualSelector } from '../../../common/hooks/use_selector';
|
||||
import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';
|
||||
import { TimelineId } from '../../../../common/types';
|
||||
|
@ -26,7 +26,7 @@ const renderTimelineSaveStatus = () => {
|
|||
describe('TimelineSaveStatus', () => {
|
||||
it('should render unsaved status if draft timeline', () => {
|
||||
(useDeepEqualSelector as jest.Mock).mockReturnValue({
|
||||
status: TimelineStatus.draft,
|
||||
status: TimelineStatusEnum.draft,
|
||||
});
|
||||
|
||||
const { getByTestId, getByText } = renderTimelineSaveStatus();
|
||||
|
@ -61,7 +61,7 @@ describe('TimelineSaveStatus', () => {
|
|||
it('should not render any status', () => {
|
||||
(useDeepEqualSelector as jest.Mock).mockReturnValue({
|
||||
changed: false,
|
||||
status: TimelineStatus.active,
|
||||
status: TimelineStatusEnum.active,
|
||||
updated: Date.now(),
|
||||
});
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ import { i18n } from '@kbn/i18n';
|
|||
import { timelineSelectors } from '../../store';
|
||||
import { timelineDefaults } from '../../store/defaults';
|
||||
import { useDeepEqualSelector } from '../../../common/hooks/use_selector';
|
||||
import { TimelineStatus } from '../../../../common/api/timeline';
|
||||
import { TimelineStatusEnum } from '../../../../common/api/timeline';
|
||||
|
||||
const UNSAVED = i18n.translate('xpack.securitySolution.timeline.saveStatus.unsavedLabel', {
|
||||
defaultMessage: 'Unsaved',
|
||||
|
@ -47,7 +47,7 @@ export const TimelineSaveStatus = React.memo<TimelineSaveStatusProps>(({ timelin
|
|||
pick(['changed', 'status', 'updated'], getTimeline(state, timelineId) ?? timelineDefaults)
|
||||
);
|
||||
|
||||
const isDraft = status === TimelineStatus.draft;
|
||||
const isDraft = status === TimelineStatusEnum.draft;
|
||||
|
||||
let statusContent: React.ReactNode;
|
||||
if (isDraft || !updated) {
|
||||
|
|
|
@ -13,7 +13,7 @@ import { TestProviders } from '../../../../../common/mock';
|
|||
import { EventColumnView } from './event_column_view';
|
||||
import { DefaultCellRenderer } from '../../cell_rendering/default_cell_renderer';
|
||||
import { TimelineId, TimelineTabs } from '../../../../../../common/types/timeline';
|
||||
import { TimelineType } from '../../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../../common/api/timeline';
|
||||
import { useShallowEqualSelector } from '../../../../../common/hooks/use_selector';
|
||||
import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features';
|
||||
import { getDefaultControlColumn } from '../control_columns';
|
||||
|
@ -79,7 +79,7 @@ jest.mock('../../../../../common/lib/kibana', () => {
|
|||
|
||||
describe('EventColumnView', () => {
|
||||
useIsExperimentalFeatureEnabledMock.mockReturnValue(false);
|
||||
(useShallowEqualSelector as jest.Mock).mockReturnValue(TimelineType.default);
|
||||
(useShallowEqualSelector as jest.Mock).mockReturnValue(TimelineTypeEnum.default);
|
||||
const ACTION_BUTTON_COUNT = 4;
|
||||
const leadingControlColumns = getDefaultControlColumn(ACTION_BUTTON_COUNT);
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
import { eventHasNotes, eventIsPinned, getPinOnClick, getPinTooltip } from './helpers';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
|
||||
describe('helpers', () => {
|
||||
describe('eventHasNotes', () => {
|
||||
|
@ -26,7 +26,7 @@ describe('helpers', () => {
|
|||
isAlert: false,
|
||||
isPinned: true,
|
||||
eventHasNotes: true,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
})
|
||||
).toEqual('This event cannot be unpinned because it has notes');
|
||||
});
|
||||
|
@ -37,7 +37,7 @@ describe('helpers', () => {
|
|||
isAlert: true,
|
||||
isPinned: true,
|
||||
eventHasNotes: true,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
})
|
||||
).toEqual('This alert cannot be unpinned because it has notes');
|
||||
});
|
||||
|
@ -48,7 +48,7 @@ describe('helpers', () => {
|
|||
isAlert: false,
|
||||
isPinned: true,
|
||||
eventHasNotes: false,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
})
|
||||
).toEqual('Unpin event');
|
||||
});
|
||||
|
@ -59,7 +59,7 @@ describe('helpers', () => {
|
|||
isAlert: true,
|
||||
isPinned: true,
|
||||
eventHasNotes: false,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
})
|
||||
).toEqual('Unpin alert');
|
||||
});
|
||||
|
@ -70,7 +70,7 @@ describe('helpers', () => {
|
|||
isAlert: false,
|
||||
isPinned: false,
|
||||
eventHasNotes: true,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
})
|
||||
).toEqual('This event cannot be unpinned because it has notes');
|
||||
});
|
||||
|
@ -81,7 +81,7 @@ describe('helpers', () => {
|
|||
isAlert: true,
|
||||
isPinned: false,
|
||||
eventHasNotes: true,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
})
|
||||
).toEqual('This alert cannot be unpinned because it has notes');
|
||||
});
|
||||
|
@ -92,7 +92,7 @@ describe('helpers', () => {
|
|||
isAlert: false,
|
||||
isPinned: false,
|
||||
eventHasNotes: false,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
})
|
||||
).toEqual('Pin event');
|
||||
});
|
||||
|
@ -103,7 +103,7 @@ describe('helpers', () => {
|
|||
isAlert: true,
|
||||
isPinned: false,
|
||||
eventHasNotes: false,
|
||||
timelineType: TimelineType.default,
|
||||
timelineType: TimelineTypeEnum.default,
|
||||
})
|
||||
).toEqual('Pin alert');
|
||||
});
|
||||
|
@ -114,7 +114,7 @@ describe('helpers', () => {
|
|||
isAlert: false,
|
||||
isPinned: false,
|
||||
eventHasNotes: false,
|
||||
timelineType: TimelineType.template,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
})
|
||||
).toEqual('This event may not be pinned while editing a template timeline');
|
||||
});
|
||||
|
@ -125,7 +125,7 @@ describe('helpers', () => {
|
|||
isAlert: true,
|
||||
isPinned: false,
|
||||
eventHasNotes: false,
|
||||
timelineType: TimelineType.template,
|
||||
timelineType: TimelineTypeEnum.template,
|
||||
})
|
||||
).toEqual('This alert may not be pinned while editing a template timeline');
|
||||
});
|
||||
|
|
|
@ -10,8 +10,7 @@ import { isEmpty } from 'lodash/fp';
|
|||
import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs';
|
||||
import type { TimelineItem, TimelineNonEcsData } from '../../../../../common/search_strategy';
|
||||
import type { TimelineEventsType } from '../../../../../common/types/timeline';
|
||||
import type { TimelineTypeLiteral } from '../../../../../common/api/timeline';
|
||||
import { TimelineType } from '../../../../../common/api/timeline';
|
||||
import { type TimelineType, TimelineTypeEnum } from '../../../../../common/api/timeline';
|
||||
import type { OnPinEvent, OnUnPinEvent } from '../events';
|
||||
import * as i18n from './translations';
|
||||
|
||||
|
@ -27,9 +26,9 @@ export const getPinTooltip = ({
|
|||
isAlert: boolean;
|
||||
isPinned: boolean;
|
||||
eventHasNotes: boolean;
|
||||
timelineType: TimelineTypeLiteral;
|
||||
timelineType: TimelineType;
|
||||
}) => {
|
||||
if (timelineType === TimelineType.template) {
|
||||
if (timelineType === TimelineTypeEnum.template) {
|
||||
return i18n.DISABLE_PIN(isAlert);
|
||||
} else if (eventHasNotes) {
|
||||
return i18n.PINNED_WITH_NOTES(isAlert);
|
||||
|
|
|
@ -11,7 +11,7 @@ import React from 'react';
|
|||
|
||||
import { AlertField } from './alert_field';
|
||||
import type { RowRenderer } from '../../../../../../../common/types';
|
||||
import { RowRendererId } from '../../../../../../../common/api/timeline';
|
||||
import { RowRendererIdEnum } from '../../../../../../../common/api/timeline';
|
||||
import {
|
||||
ID,
|
||||
DESTINATION_IP,
|
||||
|
@ -52,7 +52,7 @@ export const ALERT_RENDERER_FIELDS = [
|
|||
];
|
||||
|
||||
export const alertRenderer: RowRenderer = {
|
||||
id: RowRendererId.alert,
|
||||
id: RowRendererIdEnum.alert,
|
||||
isInstance: (ecs) => eventKindMatches(get('event.kind', ecs)),
|
||||
renderRow: ({ contextId = DEFAULT_CONTEXT_ID, data, isDraggable, scopeId }) => {
|
||||
const eventId = get(ID, data);
|
||||
|
|
|
@ -10,7 +10,7 @@ import { get } from 'lodash/fp';
|
|||
import React from 'react';
|
||||
|
||||
import type { RowRenderer } from '../../../../../../../common/types/timeline';
|
||||
import { RowRendererId } from '../../../../../../../common/api/timeline';
|
||||
import { RowRendererIdEnum } from '../../../../../../../common/api/timeline';
|
||||
|
||||
import { RowRendererContainer } from '../row_renderer';
|
||||
import { AuditdGenericDetails } from './generic_details';
|
||||
|
@ -24,7 +24,7 @@ export const createGenericAuditRowRenderer = ({
|
|||
actionName: string;
|
||||
text: string;
|
||||
}): RowRenderer => ({
|
||||
id: RowRendererId.auditd,
|
||||
id: RowRendererIdEnum.auditd,
|
||||
isInstance: (ecs) => {
|
||||
const module: string | null | undefined = get('event.module[0]', ecs);
|
||||
const action: string | null | undefined = get('event.action[0]', ecs);
|
||||
|
@ -57,7 +57,7 @@ export const createGenericFileRowRenderer = ({
|
|||
text: string;
|
||||
fileIcon?: IconType;
|
||||
}): RowRenderer => ({
|
||||
id: RowRendererId.auditd_file,
|
||||
id: RowRendererIdEnum.auditd_file,
|
||||
isInstance: (ecs) => {
|
||||
const module: string | null | undefined = get('event.module[0]', ecs);
|
||||
const action: string | null | undefined = get('event.action[0]', ecs);
|
||||
|
|
|
@ -7,20 +7,20 @@
|
|||
|
||||
import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs';
|
||||
import { TimelineId } from '../../../../../../../common/types/timeline';
|
||||
import { RowRendererId } from '../../../../../../../common/api/timeline';
|
||||
import { RowRendererIdEnum } from '../../../../../../../common/api/timeline';
|
||||
import { combineRenderers } from '.';
|
||||
|
||||
describe('combineRenderers', () => {
|
||||
const contextId = 'abcd';
|
||||
|
||||
const a = {
|
||||
id: RowRendererId.netflow,
|
||||
id: RowRendererIdEnum.netflow,
|
||||
isInstance: jest.fn(),
|
||||
renderRow: jest.fn(),
|
||||
};
|
||||
|
||||
const b = {
|
||||
id: RowRendererId.registry,
|
||||
id: RowRendererIdEnum.registry,
|
||||
isInstance: jest.fn(),
|
||||
renderRow: jest.fn(),
|
||||
};
|
||||
|
@ -32,7 +32,7 @@ describe('combineRenderers', () => {
|
|||
beforeEach(() => jest.clearAllMocks());
|
||||
|
||||
it('returns a renderer with the expected id', () => {
|
||||
const id = RowRendererId.library; // typically id from 'a', or 'b', but it can be any value
|
||||
const id = RowRendererIdEnum.library; // typically id from 'a', or 'b', but it can be any value
|
||||
|
||||
expect(combineRenderers({ a, b, id }).id).toEqual(id);
|
||||
});
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
*/
|
||||
|
||||
import type { RowRenderer } from '../../../../../../../common/types/timeline';
|
||||
import { RowRendererId } from '../../../../../../../common/api/timeline';
|
||||
import { RowRendererIdEnum } from '../../../../../../../common/api/timeline';
|
||||
import { hasThreatMatchValue } from './helpers';
|
||||
import { renderThreatMatchRows } from './threat_match_rows';
|
||||
|
||||
export const threatMatchRowRenderer: RowRenderer = {
|
||||
id: RowRendererId.threat_match,
|
||||
id: RowRendererIdEnum.threat_match,
|
||||
isInstance: hasThreatMatchValue,
|
||||
renderRow: renderThreatMatchRows,
|
||||
};
|
||||
|
|
|
@ -10,7 +10,7 @@ import React from 'react';
|
|||
import styled from 'styled-components';
|
||||
|
||||
import type { RowRenderer } from '../../../../../../../common/types/timeline';
|
||||
import { RowRendererId } from '../../../../../../../common/api/timeline';
|
||||
import { RowRendererIdEnum } from '../../../../../../../common/api/timeline';
|
||||
import { asArrayIfExists } from '../../../../../../common/lib/helpers';
|
||||
import {
|
||||
TLS_CLIENT_CERTIFICATE_FINGERPRINT_SHA1_FIELD_NAME,
|
||||
|
@ -85,7 +85,7 @@ export const eventActionMatches = (eventAction: string | object | undefined | nu
|
|||
};
|
||||
|
||||
export const netflowRowRenderer: RowRenderer = {
|
||||
id: RowRendererId.netflow,
|
||||
id: RowRendererIdEnum.netflow,
|
||||
isInstance: (ecs) =>
|
||||
eventCategoryMatches(get(EVENT_CATEGORY_FIELD, ecs)) ||
|
||||
eventActionMatches(get(EVENT_ACTION_FIELD, ecs)),
|
||||
|
|
|
@ -8,14 +8,14 @@
|
|||
import React from 'react';
|
||||
|
||||
import type { RowRenderer } from '../../../../../../common/types/timeline';
|
||||
import { RowRendererId } from '../../../../../../common/api/timeline';
|
||||
import { RowRendererIdEnum } from '../../../../../../common/api/timeline';
|
||||
|
||||
const PlainRowRenderer = () => <></>;
|
||||
|
||||
PlainRowRenderer.displayName = 'PlainRowRenderer';
|
||||
|
||||
export const plainRowRenderer: RowRenderer = {
|
||||
id: RowRendererId.plain,
|
||||
id: RowRendererIdEnum.plain,
|
||||
isInstance: (_) => true,
|
||||
renderRow: PlainRowRenderer,
|
||||
};
|
||||
|
|
|
@ -14,7 +14,7 @@ import { reasonColumnRenderer } from './reason_column_renderer';
|
|||
import { plainColumnRenderer } from './plain_column_renderer';
|
||||
|
||||
import type { ColumnHeaderOptions, RowRenderer } from '../../../../../../common/types';
|
||||
import { RowRendererId } from '../../../../../../common/api/timeline';
|
||||
import { RowRendererIdEnum } from '../../../../../../common/api/timeline';
|
||||
|
||||
import { render } from '@testing-library/react';
|
||||
import { cloneDeep } from 'lodash';
|
||||
|
@ -41,7 +41,7 @@ const field: ColumnHeaderOptions = {
|
|||
|
||||
const rowRenderers: RowRenderer[] = [
|
||||
{
|
||||
id: RowRendererId.alerts,
|
||||
id: RowRendererIdEnum.alerts,
|
||||
isInstance: (ecs) => ecs === validEcs,
|
||||
renderRow: () => <span data-test-subj="test-row-render" />,
|
||||
},
|
||||
|
|
|
@ -9,13 +9,13 @@ import { get } from 'lodash/fp';
|
|||
import React from 'react';
|
||||
|
||||
import type { RowRenderer } from '../../../../../../../common/types/timeline';
|
||||
import { RowRendererId } from '../../../../../../../common/api/timeline';
|
||||
import { RowRendererIdEnum } from '../../../../../../../common/api/timeline';
|
||||
|
||||
import { RowRendererContainer } from '../row_renderer';
|
||||
import { SuricataDetails } from './suricata_details';
|
||||
|
||||
export const suricataRowRenderer: RowRenderer = {
|
||||
id: RowRendererId.suricata,
|
||||
id: RowRendererIdEnum.suricata,
|
||||
isInstance: (ecs) => {
|
||||
const module: string | null | undefined = get('event.module[0]', ecs);
|
||||
return module != null && module.toLowerCase() === 'suricata';
|
||||
|
|
|
@ -9,7 +9,7 @@ import { get } from 'lodash/fp';
|
|||
import React from 'react';
|
||||
|
||||
import type { RowRenderer } from '../../../../../../../common/types/timeline';
|
||||
import { RowRendererId } from '../../../../../../../common/api/timeline';
|
||||
import { RowRendererIdEnum } from '../../../../../../../common/api/timeline';
|
||||
|
||||
import { DnsRequestEventDetails } from '../dns/dns_request_event_details';
|
||||
import { EndgameSecurityEventDetails } from '../endgame/endgame_security_event_details';
|
||||
|
@ -28,7 +28,7 @@ export const createGenericSystemRowRenderer = ({
|
|||
actionName: string;
|
||||
text: string;
|
||||
}): RowRenderer => ({
|
||||
id: RowRendererId.system,
|
||||
id: RowRendererIdEnum.system,
|
||||
isInstance: (ecs) => {
|
||||
const module: string | null | undefined = get('event.module[0]', ecs);
|
||||
const action: string | null | undefined = get('event.action[0]', ecs);
|
||||
|
@ -59,7 +59,7 @@ export const createEndgameProcessRowRenderer = ({
|
|||
actionName: string;
|
||||
text: string;
|
||||
}): RowRenderer => ({
|
||||
id: RowRendererId.system_file,
|
||||
id: RowRendererIdEnum.system_file,
|
||||
isInstance: (ecs) => {
|
||||
const action: string | null | undefined = get('event.action[0]', ecs);
|
||||
const category: string | null | undefined = get('event.category[0]', ecs);
|
||||
|
@ -91,7 +91,7 @@ export const createFimRowRenderer = ({
|
|||
actionName: string;
|
||||
text: string;
|
||||
}): RowRenderer => ({
|
||||
id: RowRendererId.system_fim,
|
||||
id: RowRendererIdEnum.system_fim,
|
||||
isInstance: (ecs) => {
|
||||
const action: string | null | undefined = get('event.action[0]', ecs);
|
||||
const category: string | null | undefined = get('event.category[0]', ecs);
|
||||
|
@ -132,7 +132,7 @@ export const createEndpointAlertsRowRenderer = ({
|
|||
skipRedundantProcessDetails = false,
|
||||
text,
|
||||
}: EndpointAlertCriteria): RowRenderer => ({
|
||||
id: RowRendererId.alerts,
|
||||
id: RowRendererIdEnum.alerts,
|
||||
isInstance: (ecs) => {
|
||||
const action: string[] | null | undefined = get('event.action', ecs);
|
||||
const category: string[] | null | undefined = get('event.category', ecs);
|
||||
|
@ -173,7 +173,7 @@ export const createEndpointLibraryRowRenderer = ({
|
|||
actionName: string;
|
||||
text: string;
|
||||
}): RowRenderer => ({
|
||||
id: RowRendererId.library,
|
||||
id: RowRendererIdEnum.library,
|
||||
isInstance: (ecs) => {
|
||||
const action: string | null | undefined = get('event.action[0]', ecs);
|
||||
const dataset: string | null | undefined = get('event.dataset[0]', ecs);
|
||||
|
@ -202,7 +202,7 @@ export const createGenericFileRowRenderer = ({
|
|||
actionName: string;
|
||||
text: string;
|
||||
}): RowRenderer => ({
|
||||
id: RowRendererId.system_file,
|
||||
id: RowRendererIdEnum.system_file,
|
||||
isInstance: (ecs) => {
|
||||
const module: string | null | undefined = get('event.module[0]', ecs);
|
||||
const action: string | null | undefined = get('event.action[0]', ecs);
|
||||
|
@ -233,7 +233,7 @@ export const createSocketRowRenderer = ({
|
|||
actionName: string;
|
||||
text: string;
|
||||
}): RowRenderer => ({
|
||||
id: RowRendererId.system_socket,
|
||||
id: RowRendererIdEnum.system_socket,
|
||||
isInstance: (ecs) => {
|
||||
const action: string | null | undefined = get('event.action[0]', ecs);
|
||||
return action != null && action.toLowerCase() === actionName;
|
||||
|
@ -256,7 +256,7 @@ export const createSecurityEventRowRenderer = ({
|
|||
}: {
|
||||
actionName: string;
|
||||
}): RowRenderer => ({
|
||||
id: RowRendererId.system_security_event,
|
||||
id: RowRendererIdEnum.system_security_event,
|
||||
isInstance: (ecs) => {
|
||||
const category: string | null | undefined = get('event.category[0]', ecs);
|
||||
const action: string | null | undefined = get('event.action[0]', ecs);
|
||||
|
@ -280,7 +280,7 @@ export const createSecurityEventRowRenderer = ({
|
|||
});
|
||||
|
||||
export const createDnsRowRenderer = (): RowRenderer => ({
|
||||
id: RowRendererId.system_dns,
|
||||
id: RowRendererIdEnum.system_dns,
|
||||
isInstance: (ecs) => {
|
||||
const dnsQuestionType: string | null | undefined = get('dns.question.type[0]', ecs);
|
||||
const dnsQuestionName: string | null | undefined = get('dns.question.name[0]', ecs);
|
||||
|
@ -305,7 +305,7 @@ export const createEndpointRegistryRowRenderer = ({
|
|||
actionName: string;
|
||||
text: string;
|
||||
}): RowRenderer => ({
|
||||
id: RowRendererId.registry,
|
||||
id: RowRendererIdEnum.registry,
|
||||
isInstance: (ecs) => {
|
||||
const action: string | null | undefined = get('event.action[0]', ecs);
|
||||
const dataset: string | null | undefined = get('event.dataset[0]', ecs);
|
||||
|
|
|
@ -9,13 +9,13 @@ import { get } from 'lodash/fp';
|
|||
import React from 'react';
|
||||
|
||||
import type { RowRenderer } from '../../../../../../../common/types/timeline';
|
||||
import { RowRendererId } from '../../../../../../../common/api/timeline';
|
||||
import { RowRendererIdEnum } from '../../../../../../../common/api/timeline';
|
||||
|
||||
import { RowRendererContainer } from '../row_renderer';
|
||||
import { ZeekDetails } from './zeek_details';
|
||||
|
||||
export const zeekRowRenderer: RowRenderer = {
|
||||
id: RowRendererId.zeek,
|
||||
id: RowRendererIdEnum.zeek,
|
||||
isInstance: (ecs) => {
|
||||
const module: string | null | undefined = get('event.module[0]', ecs);
|
||||
return module != null && module.toLowerCase() === 'zeek';
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue