Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
7a4c32d7
Unverified
Commit
7a4c32d7
authored
Feb 02, 2021
by
tanner-bruce
Committed by
GitHub
Feb 02, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix typo in transformer registry (#30712)
parent
56dd7fcb
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
41 additions
and
41 deletions
+41
-41
packages/grafana-data/src/transformations/index.ts
+1
-1
packages/grafana-data/src/transformations/standardTransformersRegistry.ts
+2
-2
packages/grafana-data/src/transformations/transformDataFrame.ts
+2
-2
public/app/core/components/TransformersUI/CalculateFieldTransformerEditor.tsx
+2
-2
public/app/core/components/TransformersUI/ConcatenateTransformerEditor.tsx
+2
-2
public/app/core/components/TransformersUI/FilterByNameTransformerEditor.tsx
+2
-2
public/app/core/components/TransformersUI/FilterByRefIdTransformerEditor.tsx
+2
-2
public/app/core/components/TransformersUI/FilterByValueTransformer/FilterByValueTransformerEditor.tsx
+2
-2
public/app/core/components/TransformersUI/GroupByTransformerEditor.tsx
+2
-2
public/app/core/components/TransformersUI/LabelsToFieldsTransformerEditor.tsx
+2
-2
public/app/core/components/TransformersUI/MergeTransformerEditor.tsx
+3
-3
public/app/core/components/TransformersUI/OrganizeFieldsTransformerEditor.tsx
+2
-2
public/app/core/components/TransformersUI/ReduceTransformerEditor.tsx
+2
-2
public/app/core/components/TransformersUI/RenameByRegexTransformer.tsx
+2
-2
public/app/core/components/TransformersUI/SeriesToFieldsTransformerEditor.tsx
+2
-2
public/app/core/components/TransformersUI/SeriesToRowsTransformerEditor.tsx
+3
-3
public/app/core/components/TransformersUI/SortByTransformerEditor.tsx
+2
-2
public/app/core/utils/standardTransformers.ts
+2
-2
public/app/features/dashboard/components/TransformationsEditor/TransformationEditor.tsx
+2
-2
public/app/features/dashboard/components/TransformationsEditor/TransformationOperationRow.tsx
+2
-2
No files found.
packages/grafana-data/src/transformations/index.ts
View file @
7a4c32d7
...
...
@@ -5,7 +5,7 @@ export { standardTransformers } from './transformers';
export
*
from
'./fieldReducer'
;
export
{
transformDataFrame
}
from
'./transformDataFrame'
;
export
{
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
standardTransformersRegistry
,
}
from
'./standardTransformersRegistry'
;
...
...
packages/grafana-data/src/transformations/standardTransformersRegistry.ts
View file @
7a4c32d7
...
...
@@ -14,7 +14,7 @@ export interface TransformerUIProps<T> {
onChange
:
(
options
:
T
)
=>
void
;
}
export
interface
TransformerRegistyItem
<
TOptions
>
extends
RegistryItem
{
export
interface
TransformerRegist
r
yItem
<
TOptions
>
extends
RegistryItem
{
/**
* Object describing transformer configuration
*/
...
...
@@ -29,4 +29,4 @@ export interface TransformerRegistyItem<TOptions> extends RegistryItem {
* Registry of transformation options that can be driven by
* stored configuration files.
*/
export
const
standardTransformersRegistry
=
new
Registry
<
TransformerRegistyItem
<
any
>>
();
export
const
standardTransformersRegistry
=
new
Registry
<
TransformerRegist
r
yItem
<
any
>>
();
packages/grafana-data/src/transformations/transformDataFrame.ts
View file @
7a4c32d7
...
...
@@ -2,7 +2,7 @@ import { MonoTypeOperatorFunction, Observable, of } from 'rxjs';
import
{
map
,
mergeMap
}
from
'rxjs/operators'
;
import
{
DataFrame
,
DataTransformerConfig
}
from
'../types'
;
import
{
standardTransformersRegistry
,
TransformerRegistyItem
}
from
'./standardTransformersRegistry'
;
import
{
standardTransformersRegistry
,
TransformerRegist
r
yItem
}
from
'./standardTransformersRegistry'
;
const
getOperator
=
(
config
:
DataTransformerConfig
):
MonoTypeOperatorFunction
<
DataFrame
[]
>
=>
(
source
)
=>
{
const
info
=
standardTransformersRegistry
.
get
(
config
.
id
);
...
...
@@ -21,7 +21,7 @@ const getOperator = (config: DataTransformerConfig): MonoTypeOperatorFunction<Da
const
postProcessTransform
=
(
before
:
DataFrame
[],
info
:
TransformerRegistyItem
<
any
>
info
:
TransformerRegist
r
yItem
<
any
>
):
MonoTypeOperatorFunction
<
DataFrame
[]
>
=>
(
source
)
=>
source
.
pipe
(
map
((
after
)
=>
{
...
...
public/app/core/components/TransformersUI/CalculateFieldTransformerEditor.tsx
View file @
7a4c32d7
...
...
@@ -12,7 +12,7 @@ import {
ReducerID
,
SelectableValue
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
}
from
'@grafana/data'
;
import
{
FilterPill
,
HorizontalGroup
,
Input
,
LegacyForms
,
Select
,
StatsPicker
}
from
'@grafana/ui'
;
...
...
@@ -374,7 +374,7 @@ export class CalculateFieldTransformerEditor extends React.PureComponent<
}
}
export
const
calculateFieldTransformRegistryItem
:
TransformerRegistyItem
<
CalculateFieldTransformerOptions
>
=
{
export
const
calculateFieldTransformRegistryItem
:
TransformerRegist
r
yItem
<
CalculateFieldTransformerOptions
>
=
{
id
:
DataTransformerID
.
calculateField
,
editor
:
CalculateFieldTransformerEditor
,
transformation
:
standardTransformers
.
calculateFieldTransformer
,
...
...
public/app/core/components/TransformersUI/ConcatenateTransformerEditor.tsx
View file @
7a4c32d7
...
...
@@ -3,7 +3,7 @@ import {
DataTransformerID
,
SelectableValue
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
}
from
'@grafana/data'
;
import
{
Input
,
Select
}
from
'@grafana/ui'
;
...
...
@@ -82,7 +82,7 @@ export class ConcatenateTransformerEditor extends React.PureComponent<Concatenat
}
}
export
const
concatenateTransformRegistryItem
:
TransformerRegistyItem
<
ConcatenateTransformerOptions
>
=
{
export
const
concatenateTransformRegistryItem
:
TransformerRegist
r
yItem
<
ConcatenateTransformerOptions
>
=
{
id
:
DataTransformerID
.
concatenate
,
editor
:
ConcatenateTransformerEditor
,
transformation
:
standardTransformers
.
concatenateTransformer
,
...
...
public/app/core/components/TransformersUI/FilterByNameTransformerEditor.tsx
View file @
7a4c32d7
...
...
@@ -3,7 +3,7 @@ import {
DataTransformerID
,
KeyValue
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
getFieldDisplayName
,
stringToJsRegex
,
...
...
@@ -202,7 +202,7 @@ export class FilterByNameTransformerEditor extends React.PureComponent<
}
}
export
const
filterFieldsByNameTransformRegistryItem
:
TransformerRegistyItem
<
FilterFieldsByNameTransformerOptions
>
=
{
export
const
filterFieldsByNameTransformRegistryItem
:
TransformerRegist
r
yItem
<
FilterFieldsByNameTransformerOptions
>
=
{
id
:
DataTransformerID
.
filterFieldsByName
,
editor
:
FilterByNameTransformerEditor
,
transformation
:
standardTransformers
.
filterFieldsByNameTransformer
,
...
...
public/app/core/components/TransformersUI/FilterByRefIdTransformerEditor.tsx
View file @
7a4c32d7
...
...
@@ -3,7 +3,7 @@ import {
DataTransformerID
,
KeyValue
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
}
from
'@grafana/data'
;
import
{
HorizontalGroup
,
FilterPill
}
from
'@grafana/ui'
;
...
...
@@ -129,7 +129,7 @@ export class FilterByRefIdTransformerEditor extends React.PureComponent<
}
}
export
const
filterFramesByRefIdTransformRegistryItem
:
TransformerRegistyItem
<
FilterFramesByRefIdTransformerOptions
>
=
{
export
const
filterFramesByRefIdTransformRegistryItem
:
TransformerRegist
r
yItem
<
FilterFramesByRefIdTransformerOptions
>
=
{
id
:
DataTransformerID
.
filterByRefId
,
editor
:
FilterByRefIdTransformerEditor
,
transformation
:
standardTransformers
.
filterFramesByRefIdTransformer
,
...
...
public/app/core/components/TransformersUI/FilterByValueTransformer/FilterByValueTransformerEditor.tsx
View file @
7a4c32d7
...
...
@@ -3,7 +3,7 @@ import { css } from 'emotion';
import
{
DataTransformerID
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
getFieldDisplayName
,
DataFrame
,
...
...
@@ -133,7 +133,7 @@ export const FilterByValueTransformerEditor: React.FC<TransformerUIProps<FilterB
);
};
export
const
filterByValueTransformRegistryItem
:
TransformerRegistyItem
<
FilterByValueTransformerOptions
>
=
{
export
const
filterByValueTransformRegistryItem
:
TransformerRegist
r
yItem
<
FilterByValueTransformerOptions
>
=
{
id
:
DataTransformerID
.
filterByValue
,
editor
:
FilterByValueTransformerEditor
,
transformation
:
standardTransformers
.
filterByValueTransformer
,
...
...
public/app/core/components/TransformersUI/GroupByTransformerEditor.tsx
View file @
7a4c32d7
...
...
@@ -5,7 +5,7 @@ import {
ReducerID
,
SelectableValue
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
}
from
'@grafana/data'
;
import
{
getAllFieldNamesFromDataFrames
}
from
'./OrganizeFieldsTransformerEditor'
;
...
...
@@ -136,7 +136,7 @@ const getStyling = stylesFactory(() => {
};
});
export
const
groupByTransformRegistryItem
:
TransformerRegistyItem
<
GroupByTransformerOptions
>
=
{
export
const
groupByTransformRegistryItem
:
TransformerRegist
r
yItem
<
GroupByTransformerOptions
>
=
{
id
:
DataTransformerID
.
groupBy
,
editor
:
GroupByTransformerEditor
,
transformation
:
standardTransformers
.
groupByTransformer
,
...
...
public/app/core/components/TransformersUI/LabelsToFieldsTransformerEditor.tsx
View file @
7a4c32d7
...
...
@@ -3,7 +3,7 @@ import {
DataTransformerID
,
SelectableValue
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
}
from
'@grafana/data'
;
import
{
Select
}
from
'@grafana/ui'
;
...
...
@@ -55,7 +55,7 @@ export const LabelsAsFieldsTransformerEditor: React.FC<TransformerUIProps<Labels
);
};
export
const
labelsToFieldsTransformerRegistryItem
:
TransformerRegistyItem
<
LabelsToFieldsOptions
>
=
{
export
const
labelsToFieldsTransformerRegistryItem
:
TransformerRegist
r
yItem
<
LabelsToFieldsOptions
>
=
{
id
:
DataTransformerID
.
labelsToFields
,
editor
:
LabelsAsFieldsTransformerEditor
,
transformation
:
standardTransformers
.
labelsToFieldsTransformer
,
...
...
public/app/core/components/TransformersUI/MergeTransformerEditor.tsx
View file @
7a4c32d7
import
React
from
'react'
;
import
{
DataTransformerID
,
standardTransformers
,
TransformerRegistyItem
,
TransformerUIProps
}
from
'@grafana/data'
;
import
{
DataTransformerID
,
standardTransformers
,
TransformerRegist
r
yItem
,
TransformerUIProps
}
from
'@grafana/data'
;
import
{
MergeTransformerOptions
}
from
'@grafana/data/src/transformations/transformers/merge'
;
export
const
MergeTransformerEditor
:
React
.
FC
<
TransformerUIProps
<
MergeTransformerOptions
>>
=
({
...
...
@@ -10,11 +10,11 @@ export const MergeTransformerEditor: React.FC<TransformerUIProps<MergeTransforme
return
null
;
};
export
const
mergeTransformerRegistryItem
:
TransformerRegistyItem
<
MergeTransformerOptions
>
=
{
export
const
mergeTransformerRegistryItem
:
TransformerRegist
r
yItem
<
MergeTransformerOptions
>
=
{
id
:
DataTransformerID
.
merge
,
editor
:
MergeTransformerEditor
,
transformation
:
standardTransformers
.
mergeTransformer
,
name
:
'Merge'
,
description
:
`Merge many series/tables and return a single table where mergeable values will be combined into the same row.
description
:
`Merge many series/tables and return a single table where mergeable values will be combined into the same row.
Useful for showing multiple series, tables or a combination of both visualized in a table.`
,
};
public/app/core/components/TransformersUI/OrganizeFieldsTransformerEditor.tsx
View file @
7a4c32d7
...
...
@@ -6,7 +6,7 @@ import {
DataTransformerID
,
GrafanaTheme
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
getFieldDisplayName
,
}
from
'@grafana/data'
;
...
...
@@ -221,7 +221,7 @@ export const getAllFieldNamesFromDataFrames = (input: DataFrame[]): string[] =>
);
};
export
const
organizeFieldsTransformRegistryItem
:
TransformerRegistyItem
<
OrganizeFieldsTransformerOptions
>
=
{
export
const
organizeFieldsTransformRegistryItem
:
TransformerRegist
r
yItem
<
OrganizeFieldsTransformerOptions
>
=
{
id
:
DataTransformerID
.
organize
,
editor
:
OrganizeFieldsTransformerEditor
,
transformation
:
standardTransformers
.
organizeFieldsTransformer
,
...
...
public/app/core/components/TransformersUI/ReduceTransformerEditor.tsx
View file @
7a4c32d7
...
...
@@ -5,7 +5,7 @@ import {
ReducerID
,
SelectableValue
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
}
from
'@grafana/data'
;
...
...
@@ -99,7 +99,7 @@ export const ReduceTransformerEditor: React.FC<TransformerUIProps<ReduceTransfor
);
};
export
const
reduceTransformRegistryItem
:
TransformerRegistyItem
<
ReduceTransformerOptions
>
=
{
export
const
reduceTransformRegistryItem
:
TransformerRegist
r
yItem
<
ReduceTransformerOptions
>
=
{
id
:
DataTransformerID
.
reduce
,
editor
:
ReduceTransformerEditor
,
transformation
:
standardTransformers
.
reduceTransformer
,
...
...
public/app/core/components/TransformersUI/RenameByRegexTransformer.tsx
View file @
7a4c32d7
...
...
@@ -2,7 +2,7 @@ import React from 'react';
import
{
DataTransformerID
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
stringToJsRegex
,
}
from
'@grafana/data'
;
...
...
@@ -122,7 +122,7 @@ export class RenameByRegexTransformerEditor extends React.PureComponent<
}
}
export
const
renameByRegexTransformRegistryItem
:
TransformerRegistyItem
<
RenameByRegexTransformerOptions
>
=
{
export
const
renameByRegexTransformRegistryItem
:
TransformerRegist
r
yItem
<
RenameByRegexTransformerOptions
>
=
{
id
:
DataTransformerID
.
renameByRegex
,
editor
:
RenameByRegexTransformerEditor
,
transformation
:
standardTransformers
.
renameByRegexTransformer
,
...
...
public/app/core/components/TransformersUI/SeriesToFieldsTransformerEditor.tsx
View file @
7a4c32d7
...
...
@@ -3,7 +3,7 @@ import {
DataTransformerID
,
SelectableValue
,
standardTransformers
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
TransformerUIProps
,
}
from
'@grafana/data'
;
import
{
getAllFieldNamesFromDataFrames
}
from
'./OrganizeFieldsTransformerEditor'
;
...
...
@@ -39,7 +39,7 @@ export const SeriesToFieldsTransformerEditor: React.FC<TransformerUIProps<Series
);
};
export
const
seriesToFieldsTransformerRegistryItem
:
TransformerRegistyItem
<
SeriesToColumnsOptions
>
=
{
export
const
seriesToFieldsTransformerRegistryItem
:
TransformerRegist
r
yItem
<
SeriesToColumnsOptions
>
=
{
id
:
DataTransformerID
.
seriesToColumns
,
editor
:
SeriesToFieldsTransformerEditor
,
transformation
:
standardTransformers
.
seriesToColumnsTransformer
,
...
...
public/app/core/components/TransformersUI/SeriesToRowsTransformerEditor.tsx
View file @
7a4c32d7
import
React
from
'react'
;
import
{
DataTransformerID
,
standardTransformers
,
TransformerRegistyItem
,
TransformerUIProps
}
from
'@grafana/data'
;
import
{
DataTransformerID
,
standardTransformers
,
TransformerRegist
r
yItem
,
TransformerUIProps
}
from
'@grafana/data'
;
import
{
SeriesToRowsTransformerOptions
}
from
'@grafana/data/src/transformations/transformers/seriesToRows'
;
export
const
SeriesToRowsTransformerEditor
:
React
.
FC
<
TransformerUIProps
<
SeriesToRowsTransformerOptions
>>
=
({
...
...
@@ -10,11 +10,11 @@ export const SeriesToRowsTransformerEditor: React.FC<TransformerUIProps<SeriesTo
return
null
;
};
export
const
seriesToRowsTransformerRegistryItem
:
TransformerRegistyItem
<
SeriesToRowsTransformerOptions
>
=
{
export
const
seriesToRowsTransformerRegistryItem
:
TransformerRegist
r
yItem
<
SeriesToRowsTransformerOptions
>
=
{
id
:
DataTransformerID
.
seriesToRows
,
editor
:
SeriesToRowsTransformerEditor
,
transformation
:
standardTransformers
.
seriesToRowsTransformer
,
name
:
'Series to rows'
,
description
:
`Merge many series and return a single series with time, metric and value as columns.
description
:
`Merge many series and return a single series with time, metric and value as columns.
Useful for showing multiple time series visualized in a table.`
,
};
public/app/core/components/TransformersUI/SortByTransformerEditor.tsx
View file @
7a4c32d7
import
React
,
{
useCallback
,
useMemo
}
from
'react'
;
import
{
DataTransformerID
,
standardTransformers
,
TransformerRegistyItem
,
TransformerUIProps
}
from
'@grafana/data'
;
import
{
DataTransformerID
,
standardTransformers
,
TransformerRegist
r
yItem
,
TransformerUIProps
}
from
'@grafana/data'
;
import
{
getAllFieldNamesFromDataFrames
}
from
'./OrganizeFieldsTransformerEditor'
;
import
{
InlineField
,
InlineSwitch
,
InlineFieldRow
,
Select
}
from
'@grafana/ui'
;
...
...
@@ -59,7 +59,7 @@ export const SortByTransformerEditor: React.FC<TransformerUIProps<SortByTransfor
);
};
export
const
sortByTransformRegistryItem
:
TransformerRegistyItem
<
SortByTransformerOptions
>
=
{
export
const
sortByTransformRegistryItem
:
TransformerRegist
r
yItem
<
SortByTransformerOptions
>
=
{
id
:
DataTransformerID
.
sortBy
,
editor
:
SortByTransformerEditor
,
transformation
:
standardTransformers
.
sortByTransformer
,
...
...
public/app/core/utils/standardTransformers.ts
View file @
7a4c32d7
import
{
TransformerRegistyItem
}
from
'@grafana/data'
;
import
{
TransformerRegist
r
yItem
}
from
'@grafana/data'
;
import
{
reduceTransformRegistryItem
}
from
'../components/TransformersUI/ReduceTransformerEditor'
;
import
{
filterFieldsByNameTransformRegistryItem
}
from
'../components/TransformersUI/FilterByNameTransformerEditor'
;
import
{
filterFramesByRefIdTransformRegistryItem
}
from
'../components/TransformersUI/FilterByRefIdTransformerEditor'
;
...
...
@@ -14,7 +14,7 @@ import { seriesToRowsTransformerRegistryItem } from '../components/TransformersU
import
{
concatenateTransformRegistryItem
}
from
'../components/TransformersUI/ConcatenateTransformerEditor'
;
import
{
renameByRegexTransformRegistryItem
}
from
'../components/TransformersUI/RenameByRegexTransformer'
;
export
const
getStandardTransformers
=
():
Array
<
TransformerRegistyItem
<
any
>>
=>
{
export
const
getStandardTransformers
=
():
Array
<
TransformerRegist
r
yItem
<
any
>>
=>
{
return
[
reduceTransformRegistryItem
,
filterFieldsByNameTransformRegistryItem
,
...
...
public/app/features/dashboard/components/TransformationsEditor/TransformationEditor.tsx
View file @
7a4c32d7
...
...
@@ -7,7 +7,7 @@ import {
DataTransformerConfig
,
GrafanaTheme
,
transformDataFrame
,
TransformerRegistyItem
,
TransformerRegist
r
yItem
,
}
from
'@grafana/data'
;
import
{
selectors
}
from
'@grafana/e2e-selectors'
;
...
...
@@ -17,7 +17,7 @@ interface TransformationEditorProps {
debugMode
?:
boolean
;
index
:
number
;
data
:
DataFrame
[];
uiConfig
:
TransformerRegistyItem
<
any
>
;
uiConfig
:
TransformerRegist
r
yItem
<
any
>
;
configs
:
TransformationsEditorTransformation
[];
onChange
:
(
index
:
number
,
config
:
DataTransformerConfig
)
=>
void
;
}
...
...
public/app/features/dashboard/components/TransformationsEditor/TransformationOperationRow.tsx
View file @
7a4c32d7
import
React
,
{
useState
}
from
'react'
;
import
{
DataFrame
,
DataTransformerConfig
,
TransformerRegistyItem
}
from
'@grafana/data'
;
import
{
DataFrame
,
DataTransformerConfig
,
TransformerRegist
r
yItem
}
from
'@grafana/data'
;
import
{
HorizontalGroup
}
from
'@grafana/ui'
;
import
{
TransformationEditor
}
from
'./TransformationEditor'
;
...
...
@@ -14,7 +14,7 @@ interface TransformationOperationRowProps {
id
:
string
;
index
:
number
;
data
:
DataFrame
[];
uiConfig
:
TransformerRegistyItem
<
any
>
;
uiConfig
:
TransformerRegist
r
yItem
<
any
>
;
configs
:
TransformationsEditorTransformation
[];
onRemove
:
(
index
:
number
)
=>
void
;
onChange
:
(
index
:
number
,
config
:
DataTransformerConfig
)
=>
void
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment