@perses-dev/plugin-system 0.53.0-beta.2 → 0.53.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/DatasourceSelect/DatasourceSelect.js +8 -8
- package/dist/cjs/components/HTTPSettingsEditor/HTTPSettingsEditor.js +104 -73
- package/dist/cjs/components/MultiQueryEditor/MultiQueryEditor.js +5 -1
- package/dist/cjs/components/MultiQueryEditor/QueryEditorContainer.js +6 -6
- package/dist/cjs/components/PanelSpecEditor/PanelSpecEditor.js +8 -1
- package/dist/cjs/components/PluginEditor/PluginEditor.js +11 -45
- package/dist/cjs/components/PluginEditor/plugin-editor-api.js +2 -1
- package/dist/cjs/components/PluginRegistry/plugin-indexes.js +3 -3
- package/dist/cjs/components/TimeRangeControls/TimeRangeControls.js +3 -3
- package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +24 -18
- package/dist/cjs/components/Variables/VariableEditorForm/VariablePreview.js +3 -3
- package/dist/cjs/components/Variables/VariableEditorForm/variable-editor-form-model.js +4 -4
- package/dist/cjs/components/Variables/variable-model.js +5 -5
- package/dist/cjs/context/ValidationProvider.js +4 -4
- package/dist/cjs/model/legend.js +8 -8
- package/dist/cjs/model/panels.js +0 -6
- package/dist/cjs/model/plugin-base.js +0 -6
- package/dist/cjs/remote/PluginRuntime.js +13 -13
- package/dist/cjs/runtime/DataQueriesProvider/DataQueriesProvider.js +5 -5
- package/dist/cjs/runtime/DataQueriesProvider/model.js +3 -3
- package/dist/cjs/runtime/QueryCountProvider.js +3 -3
- package/dist/cjs/runtime/RouterProvider.js +5 -5
- package/dist/cjs/runtime/TimeRangeProvider/TimeRangeProvider.js +6 -6
- package/dist/cjs/runtime/TimeRangeProvider/TimeRangeProviders.js +3 -3
- package/dist/cjs/runtime/TimeRangeProvider/TimeRangeSettingsProvider.js +8 -8
- package/dist/cjs/runtime/TimeRangeProvider/query-params.js +10 -10
- package/dist/cjs/runtime/UsageMetricsProvider.js +5 -5
- package/dist/cjs/runtime/builtin-variables.js +5 -5
- package/dist/cjs/runtime/datasources.js +6 -6
- package/dist/cjs/runtime/log-queries.js +9 -5
- package/dist/cjs/runtime/plugin-registry.js +7 -7
- package/dist/cjs/runtime/profile-queries.js +11 -6
- package/dist/cjs/runtime/time-series-queries.js +10 -6
- package/dist/cjs/runtime/trace-queries.js +9 -5
- package/dist/cjs/runtime/utils.js +3 -3
- package/dist/cjs/runtime/variables.js +7 -7
- package/dist/cjs/test/mock-data.js +13 -13
- package/dist/cjs/test/test-plugins/bert/index.js +3 -3
- package/dist/cjs/test/test-plugins/ernie/index.js +3 -3
- package/dist/cjs/test-utils/mock-plugin-registry.js +3 -3
- package/dist/cjs/utils/action.js +3 -3
- package/dist/cjs/utils/variables.js +7 -7
- package/dist/components/HTTPSettingsEditor/HTTPSettingsEditor.d.ts.map +1 -1
- package/dist/components/HTTPSettingsEditor/HTTPSettingsEditor.js +105 -74
- package/dist/components/HTTPSettingsEditor/HTTPSettingsEditor.js.map +1 -1
- package/dist/components/MultiQueryEditor/MultiQueryEditor.d.ts +1 -0
- package/dist/components/MultiQueryEditor/MultiQueryEditor.d.ts.map +1 -1
- package/dist/components/MultiQueryEditor/MultiQueryEditor.js +5 -1
- package/dist/components/MultiQueryEditor/MultiQueryEditor.js.map +1 -1
- package/dist/components/MultiQueryEditor/QueryEditorContainer.d.ts +1 -0
- package/dist/components/MultiQueryEditor/QueryEditorContainer.d.ts.map +1 -1
- package/dist/components/MultiQueryEditor/QueryEditorContainer.js +6 -6
- package/dist/components/MultiQueryEditor/QueryEditorContainer.js.map +1 -1
- package/dist/components/PanelSpecEditor/PanelSpecEditor.d.ts +1 -0
- package/dist/components/PanelSpecEditor/PanelSpecEditor.d.ts.map +1 -1
- package/dist/components/PanelSpecEditor/PanelSpecEditor.js +8 -1
- package/dist/components/PanelSpecEditor/PanelSpecEditor.js.map +1 -1
- package/dist/components/PluginEditor/PluginEditor.d.ts +3 -3
- package/dist/components/PluginEditor/PluginEditor.d.ts.map +1 -1
- package/dist/components/PluginEditor/PluginEditor.js +12 -46
- package/dist/components/PluginEditor/PluginEditor.js.map +1 -1
- package/dist/components/PluginEditor/plugin-editor-api.d.ts +1 -1
- package/dist/components/PluginEditor/plugin-editor-api.d.ts.map +1 -1
- package/dist/components/PluginEditor/plugin-editor-api.js +2 -1
- package/dist/components/PluginEditor/plugin-editor-api.js.map +1 -1
- package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +1 -1
- package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +24 -18
- package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +1 -1
- package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts.map +1 -1
- package/dist/components/Variables/VariableEditorForm/VariablePreview.js.map +1 -1
- package/dist/model/log-queries.d.ts +1 -1
- package/dist/model/log-queries.d.ts.map +1 -1
- package/dist/model/log-queries.js.map +1 -1
- package/dist/model/panels.js +1 -1
- package/dist/model/panels.js.map +1 -1
- package/dist/model/plugin-base.d.ts +1 -6
- package/dist/model/plugin-base.d.ts.map +1 -1
- package/dist/model/plugin-base.js +3 -1
- package/dist/model/plugin-base.js.map +1 -1
- package/dist/model/profile-queries.d.ts +1 -1
- package/dist/model/profile-queries.d.ts.map +1 -1
- package/dist/model/profile-queries.js.map +1 -1
- package/dist/model/trace-queries.d.ts +1 -1
- package/dist/model/trace-queries.d.ts.map +1 -1
- package/dist/model/trace-queries.js.map +1 -1
- package/dist/remote/PluginRuntime.js +10 -10
- package/dist/remote/PluginRuntime.js.map +1 -1
- package/dist/runtime/log-queries.d.ts.map +1 -1
- package/dist/runtime/log-queries.js +6 -2
- package/dist/runtime/log-queries.js.map +1 -1
- package/dist/runtime/profile-queries.d.ts.map +1 -1
- package/dist/runtime/profile-queries.js +8 -3
- package/dist/runtime/profile-queries.js.map +1 -1
- package/dist/runtime/time-series-queries.d.ts.map +1 -1
- package/dist/runtime/time-series-queries.js +4 -0
- package/dist/runtime/time-series-queries.js.map +1 -1
- package/dist/runtime/trace-queries.d.ts.map +1 -1
- package/dist/runtime/trace-queries.js +6 -2
- package/dist/runtime/trace-queries.js.map +1 -1
- package/package.json +6 -5
- package/LICENSE +0 -201
|
@@ -17,14 +17,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
17
17
|
function _export(target, all) {
|
|
18
18
|
for(var name in all)Object.defineProperty(target, name, {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: all
|
|
20
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
_export(exports, {
|
|
24
|
-
TRACE_QUERY_KEY
|
|
24
|
+
get TRACE_QUERY_KEY () {
|
|
25
25
|
return TRACE_QUERY_KEY;
|
|
26
26
|
},
|
|
27
|
-
useTraceQueries
|
|
27
|
+
get useTraceQueries () {
|
|
28
28
|
return useTraceQueries;
|
|
29
29
|
}
|
|
30
30
|
});
|
|
@@ -55,9 +55,13 @@ function useTraceQueries(definitions) {
|
|
|
55
55
|
return {
|
|
56
56
|
enabled: queryEnabled,
|
|
57
57
|
queryKey: queryKey,
|
|
58
|
-
|
|
58
|
+
refetchOnMount: false,
|
|
59
|
+
refetchOnWindowFocus: false,
|
|
60
|
+
refetchOnReconnect: false,
|
|
61
|
+
staleTime: Infinity,
|
|
62
|
+
queryFn: async ({ signal })=>{
|
|
59
63
|
const plugin = await getPlugin(TRACE_QUERY_KEY, traceQueryKind);
|
|
60
|
-
const data = await plugin.getTraceData(definition.spec.plugin.spec, context);
|
|
64
|
+
const data = await plugin.getTraceData(definition.spec.plugin.spec, context, signal);
|
|
61
65
|
return data;
|
|
62
66
|
}
|
|
63
67
|
};
|
|
@@ -17,14 +17,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
17
17
|
function _export(target, all) {
|
|
18
18
|
for(var name in all)Object.defineProperty(target, name, {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: all
|
|
20
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
_export(exports, {
|
|
24
|
-
filterVariableStateMap
|
|
24
|
+
get filterVariableStateMap () {
|
|
25
25
|
return filterVariableStateMap;
|
|
26
26
|
},
|
|
27
|
-
getVariableValuesKey
|
|
27
|
+
get getVariableValuesKey () {
|
|
28
28
|
return getVariableValuesKey;
|
|
29
29
|
}
|
|
30
30
|
});
|
|
@@ -17,26 +17,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
17
17
|
function _export(target, all) {
|
|
18
18
|
for(var name in all)Object.defineProperty(target, name, {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: all
|
|
20
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
_export(exports, {
|
|
24
|
-
VariableContext
|
|
24
|
+
get VariableContext () {
|
|
25
25
|
return VariableContext;
|
|
26
26
|
},
|
|
27
|
-
VariableStoreStateMap
|
|
27
|
+
get VariableStoreStateMap () {
|
|
28
28
|
return VariableStoreStateMap;
|
|
29
29
|
},
|
|
30
|
-
replaceVariablesInString
|
|
30
|
+
get replaceVariablesInString () {
|
|
31
31
|
return replaceVariablesInString;
|
|
32
32
|
},
|
|
33
|
-
useAllVariableValues
|
|
33
|
+
get useAllVariableValues () {
|
|
34
34
|
return useAllVariableValues;
|
|
35
35
|
},
|
|
36
|
-
useReplaceVariablesInString
|
|
36
|
+
get useReplaceVariablesInString () {
|
|
37
37
|
return useReplaceVariablesInString;
|
|
38
38
|
},
|
|
39
|
-
useVariableValues
|
|
39
|
+
get useVariableValues () {
|
|
40
40
|
return useVariableValues;
|
|
41
41
|
}
|
|
42
42
|
});
|
|
@@ -17,44 +17,44 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
17
17
|
function _export(target, all) {
|
|
18
18
|
for(var name in all)Object.defineProperty(target, name, {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: all
|
|
20
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
_export(exports, {
|
|
24
|
-
MOCK_EMPTY_PLUGIN_MODULE
|
|
24
|
+
get MOCK_EMPTY_PLUGIN_MODULE () {
|
|
25
25
|
return MOCK_EMPTY_PLUGIN_MODULE;
|
|
26
26
|
},
|
|
27
|
-
MOCK_INVALID_PLUGIN_MODULE
|
|
27
|
+
get MOCK_INVALID_PLUGIN_MODULE () {
|
|
28
28
|
return MOCK_INVALID_PLUGIN_MODULE;
|
|
29
29
|
},
|
|
30
|
-
MOCK_LOG_DATA
|
|
30
|
+
get MOCK_LOG_DATA () {
|
|
31
31
|
return MOCK_LOG_DATA;
|
|
32
32
|
},
|
|
33
|
-
MOCK_MIXED_VALIDITY_PLUGIN_MODULES
|
|
33
|
+
get MOCK_MIXED_VALIDITY_PLUGIN_MODULES () {
|
|
34
34
|
return MOCK_MIXED_VALIDITY_PLUGIN_MODULES;
|
|
35
35
|
},
|
|
36
|
-
MOCK_MULTI_PLUGIN_MODULE
|
|
36
|
+
get MOCK_MULTI_PLUGIN_MODULE () {
|
|
37
37
|
return MOCK_MULTI_PLUGIN_MODULE;
|
|
38
38
|
},
|
|
39
|
-
MOCK_PARTIAL_FAILURE_MODULE
|
|
39
|
+
get MOCK_PARTIAL_FAILURE_MODULE () {
|
|
40
40
|
return MOCK_PARTIAL_FAILURE_MODULE;
|
|
41
41
|
},
|
|
42
|
-
MOCK_PROFILE_DATA
|
|
42
|
+
get MOCK_PROFILE_DATA () {
|
|
43
43
|
return MOCK_PROFILE_DATA;
|
|
44
44
|
},
|
|
45
|
-
MOCK_REMOTE_PLUGIN_MODULE
|
|
45
|
+
get MOCK_REMOTE_PLUGIN_MODULE () {
|
|
46
46
|
return MOCK_REMOTE_PLUGIN_MODULE;
|
|
47
47
|
},
|
|
48
|
-
MOCK_TIME_SERIES_DATA
|
|
48
|
+
get MOCK_TIME_SERIES_DATA () {
|
|
49
49
|
return MOCK_TIME_SERIES_DATA;
|
|
50
50
|
},
|
|
51
|
-
MOCK_TRACE_DATA
|
|
51
|
+
get MOCK_TRACE_DATA () {
|
|
52
52
|
return MOCK_TRACE_DATA;
|
|
53
53
|
},
|
|
54
|
-
MOCK_VALID_PLUGIN_METADATA
|
|
54
|
+
get MOCK_VALID_PLUGIN_METADATA () {
|
|
55
55
|
return MOCK_VALID_PLUGIN_METADATA;
|
|
56
56
|
},
|
|
57
|
-
MOCK_VALID_PLUGIN_MODULE_RESOURCE
|
|
57
|
+
get MOCK_VALID_PLUGIN_MODULE_RESOURCE () {
|
|
58
58
|
return MOCK_VALID_PLUGIN_MODULE_RESOURCE;
|
|
59
59
|
}
|
|
60
60
|
});
|
|
@@ -17,14 +17,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
17
17
|
function _export(target, all) {
|
|
18
18
|
for(var name in all)Object.defineProperty(target, name, {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: all
|
|
20
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
_export(exports, {
|
|
24
|
-
BertPanel1
|
|
24
|
+
get BertPanel1 () {
|
|
25
25
|
return BertPanel1;
|
|
26
26
|
},
|
|
27
|
-
BertPanel2
|
|
27
|
+
get BertPanel2 () {
|
|
28
28
|
return BertPanel2;
|
|
29
29
|
}
|
|
30
30
|
});
|
|
@@ -17,14 +17,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
17
17
|
function _export(target, all) {
|
|
18
18
|
for(var name in all)Object.defineProperty(target, name, {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: all
|
|
20
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
_export(exports, {
|
|
24
|
-
ErnieVariable1
|
|
24
|
+
get ErnieVariable1 () {
|
|
25
25
|
return ErnieVariable1;
|
|
26
26
|
},
|
|
27
|
-
ErnieVariable2
|
|
27
|
+
get ErnieVariable2 () {
|
|
28
28
|
return ErnieVariable2;
|
|
29
29
|
}
|
|
30
30
|
});
|
|
@@ -17,14 +17,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
17
17
|
function _export(target, all) {
|
|
18
18
|
for(var name in all)Object.defineProperty(target, name, {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: all
|
|
20
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
_export(exports, {
|
|
24
|
-
getMockPluginName
|
|
24
|
+
get getMockPluginName () {
|
|
25
25
|
return getMockPluginName;
|
|
26
26
|
},
|
|
27
|
-
mockPluginRegistry
|
|
27
|
+
get mockPluginRegistry () {
|
|
28
28
|
return mockPluginRegistry;
|
|
29
29
|
}
|
|
30
30
|
});
|
package/dist/cjs/utils/action.js
CHANGED
|
@@ -17,14 +17,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
17
17
|
function _export(target, all) {
|
|
18
18
|
for(var name in all)Object.defineProperty(target, name, {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: all
|
|
20
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
_export(exports, {
|
|
24
|
-
getSubmitText
|
|
24
|
+
get getSubmitText () {
|
|
25
25
|
return getSubmitText;
|
|
26
26
|
},
|
|
27
|
-
getTitleAction
|
|
27
|
+
get getTitleAction () {
|
|
28
28
|
return getTitleAction;
|
|
29
29
|
}
|
|
30
30
|
});
|
|
@@ -17,26 +17,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
17
17
|
function _export(target, all) {
|
|
18
18
|
for(var name in all)Object.defineProperty(target, name, {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: all
|
|
20
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
_export(exports, {
|
|
24
|
-
InterpolationFormat
|
|
24
|
+
get InterpolationFormat () {
|
|
25
25
|
return InterpolationFormat;
|
|
26
26
|
},
|
|
27
|
-
interpolate
|
|
27
|
+
get interpolate () {
|
|
28
28
|
return interpolate;
|
|
29
29
|
},
|
|
30
|
-
parseVariables
|
|
30
|
+
get parseVariables () {
|
|
31
31
|
return parseVariables;
|
|
32
32
|
},
|
|
33
|
-
parseVariablesAndFormat
|
|
33
|
+
get parseVariablesAndFormat () {
|
|
34
34
|
return parseVariablesAndFormat;
|
|
35
35
|
},
|
|
36
|
-
replaceVariable
|
|
36
|
+
get replaceVariable () {
|
|
37
37
|
return replaceVariable;
|
|
38
38
|
},
|
|
39
|
-
replaceVariables
|
|
39
|
+
get replaceVariables () {
|
|
40
40
|
return replaceVariables;
|
|
41
41
|
}
|
|
42
42
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HTTPSettingsEditor.d.ts","sourceRoot":"","sources":["../../../src/components/HTTPSettingsEditor/HTTPSettingsEditor.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAkB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAc,EAAY,YAAY,EAAY,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"HTTPSettingsEditor.d.ts","sourceRoot":"","sources":["../../../src/components/HTTPSettingsEditor/HTTPSettingsEditor.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAkB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAc,EAAY,YAAY,EAAY,MAAM,OAAO,CAAC;AAgBhE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,gBAAgB,EAAE,kBAAkB,CAAC;CACtC;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CA8b1E"}
|
|
@@ -14,7 +14,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
14
14
|
import { Grid, IconButton, MenuItem, TextField, Typography } from '@mui/material';
|
|
15
15
|
import React, { Fragment, useState } from 'react';
|
|
16
16
|
import { produce } from 'immer';
|
|
17
|
-
import { Controller } from 'react-hook-form';
|
|
17
|
+
import { Controller, useForm, useFieldArray } from 'react-hook-form';
|
|
18
18
|
import MinusIcon from 'mdi-material-ui/Minus';
|
|
19
19
|
import PlusIcon from 'mdi-material-ui/Plus';
|
|
20
20
|
import { OptionsEditorRadios } from '../OptionsEditorRadios';
|
|
@@ -26,22 +26,50 @@ export function HTTPSettingsEditor(props) {
|
|
|
26
26
|
if (value.directUrl === undefined && value.proxy === undefined) {
|
|
27
27
|
Object.assign(value, initialSpecProxy);
|
|
28
28
|
}
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
29
|
+
// Use local state to maintain an array of header entries during editing, instead of
|
|
30
|
+
// manipulating a map directly which causes weird UX.
|
|
31
|
+
const headersForm = useForm({
|
|
32
|
+
defaultValues: {
|
|
33
|
+
headers: Object.entries(value.proxy?.spec.headers ?? {}).map(([name, headerValue])=>({
|
|
34
|
+
name,
|
|
35
|
+
value: headerValue
|
|
36
|
+
}))
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
const { fields, append, remove } = useFieldArray({
|
|
40
|
+
control: headersForm.control,
|
|
41
|
+
name: 'headers'
|
|
42
|
+
});
|
|
43
|
+
// Watch the headers array for changes to detect duplicates
|
|
44
|
+
const watchedHeaders = headersForm.watch('headers');
|
|
45
|
+
// Check for duplicate header names
|
|
46
|
+
// TODO: duplication detection logic to be replaced by proper zod schema validation in the future
|
|
47
|
+
// ref https://github.com/perses/perses/issues/3014
|
|
48
|
+
const nameMap = new Map();
|
|
49
|
+
const duplicateNames = new Set();
|
|
50
|
+
watchedHeaders.forEach(({ name })=>{
|
|
51
|
+
if (name !== '') {
|
|
52
|
+
const count = (nameMap.get(name) || 0) + 1;
|
|
53
|
+
nameMap.set(name, count);
|
|
54
|
+
if (count > 1) {
|
|
55
|
+
duplicateNames.add(name);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
const hasDuplicates = duplicateNames.size > 0;
|
|
60
|
+
// Sync headers to parent
|
|
61
|
+
const syncHeadersToParent = (headers)=>{
|
|
62
|
+
const headersObject = {};
|
|
63
|
+
headers.forEach(({ name, value: headerValue })=>{
|
|
64
|
+
if (name !== '') {
|
|
65
|
+
headersObject[name] = headerValue;
|
|
39
66
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
67
|
+
});
|
|
68
|
+
onChange(produce(value, (draft)=>{
|
|
69
|
+
if (draft.proxy !== undefined) {
|
|
70
|
+
draft.proxy.spec.headers = Object.keys(headersObject).length > 0 ? headersObject : undefined;
|
|
71
|
+
}
|
|
72
|
+
}));
|
|
45
73
|
};
|
|
46
74
|
const tabs = [
|
|
47
75
|
{
|
|
@@ -77,7 +105,7 @@ export function HTTPSettingsEditor(props) {
|
|
|
77
105
|
})
|
|
78
106
|
}),
|
|
79
107
|
/*#__PURE__*/ _jsx(Typography, {
|
|
80
|
-
variant: "
|
|
108
|
+
variant: "h5",
|
|
81
109
|
mb: 2,
|
|
82
110
|
children: "Allowed endpoints"
|
|
83
111
|
}),
|
|
@@ -252,7 +280,7 @@ export function HTTPSettingsEditor(props) {
|
|
|
252
280
|
]
|
|
253
281
|
}),
|
|
254
282
|
/*#__PURE__*/ _jsx(Typography, {
|
|
255
|
-
variant: "
|
|
283
|
+
variant: "h5",
|
|
256
284
|
mb: 2,
|
|
257
285
|
children: "Request Headers"
|
|
258
286
|
}),
|
|
@@ -261,20 +289,19 @@ export function HTTPSettingsEditor(props) {
|
|
|
261
289
|
spacing: 2,
|
|
262
290
|
mb: 2,
|
|
263
291
|
children: [
|
|
264
|
-
|
|
265
|
-
return /*#__PURE__*/ _jsxs(Fragment, {
|
|
292
|
+
fields.length > 0 ? fields.map((field, index)=>/*#__PURE__*/ _jsxs(Fragment, {
|
|
266
293
|
children: [
|
|
267
294
|
/*#__PURE__*/ _jsx(Grid, {
|
|
268
295
|
item: true,
|
|
269
296
|
xs: 4,
|
|
270
297
|
children: /*#__PURE__*/ _jsx(Controller, {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
298
|
+
control: headersForm.control,
|
|
299
|
+
name: `headers.${index}.name`,
|
|
300
|
+
render: ({ field: controllerField, fieldState })=>/*#__PURE__*/ _jsx(TextField, {
|
|
301
|
+
...controllerField,
|
|
274
302
|
fullWidth: true,
|
|
275
303
|
label: "Header name",
|
|
276
|
-
|
|
277
|
-
error: !!fieldState.error,
|
|
304
|
+
error: !!fieldState.error || duplicateNames.has(controllerField.value),
|
|
278
305
|
helperText: fieldState.error?.message,
|
|
279
306
|
InputProps: {
|
|
280
307
|
readOnly: isReadonly
|
|
@@ -283,12 +310,15 @@ export function HTTPSettingsEditor(props) {
|
|
|
283
310
|
shrink: isReadonly ? true : undefined
|
|
284
311
|
},
|
|
285
312
|
onChange: (e)=>{
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
313
|
+
controllerField.onChange(e);
|
|
314
|
+
const updatedHeaders = [
|
|
315
|
+
...watchedHeaders
|
|
316
|
+
];
|
|
317
|
+
updatedHeaders[index] = {
|
|
318
|
+
name: e.target.value,
|
|
319
|
+
value: updatedHeaders[index]?.value ?? ''
|
|
320
|
+
};
|
|
321
|
+
syncHeadersToParent(updatedHeaders);
|
|
292
322
|
}
|
|
293
323
|
})
|
|
294
324
|
})
|
|
@@ -297,12 +327,12 @@ export function HTTPSettingsEditor(props) {
|
|
|
297
327
|
item: true,
|
|
298
328
|
xs: 7,
|
|
299
329
|
children: /*#__PURE__*/ _jsx(Controller, {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
330
|
+
control: headersForm.control,
|
|
331
|
+
name: `headers.${index}.value`,
|
|
332
|
+
render: ({ field: controllerField, fieldState })=>/*#__PURE__*/ _jsx(TextField, {
|
|
333
|
+
...controllerField,
|
|
303
334
|
fullWidth: true,
|
|
304
335
|
label: "Header value",
|
|
305
|
-
value: value.proxy?.spec.headers?.[headerName],
|
|
306
336
|
error: !!fieldState.error,
|
|
307
337
|
helperText: fieldState.error?.message,
|
|
308
338
|
InputProps: {
|
|
@@ -312,15 +342,15 @@ export function HTTPSettingsEditor(props) {
|
|
|
312
342
|
shrink: isReadonly ? true : undefined
|
|
313
343
|
},
|
|
314
344
|
onChange: (e)=>{
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
345
|
+
controllerField.onChange(e);
|
|
346
|
+
const updatedHeaders = [
|
|
347
|
+
...watchedHeaders
|
|
348
|
+
];
|
|
349
|
+
updatedHeaders[index] = {
|
|
350
|
+
name: updatedHeaders[index]?.name ?? '',
|
|
351
|
+
value: e.target.value
|
|
352
|
+
};
|
|
353
|
+
syncHeadersToParent(updatedHeaders);
|
|
324
354
|
}
|
|
325
355
|
})
|
|
326
356
|
})
|
|
@@ -328,30 +358,36 @@ export function HTTPSettingsEditor(props) {
|
|
|
328
358
|
/*#__PURE__*/ _jsx(Grid, {
|
|
329
359
|
item: true,
|
|
330
360
|
xs: 1,
|
|
331
|
-
children: /*#__PURE__*/ _jsx(
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
...value.proxy?.spec.headers
|
|
341
|
-
};
|
|
342
|
-
delete newHeaders[headerName];
|
|
343
|
-
onChange(produce(value, (draft)=>{
|
|
344
|
-
if (draft.proxy !== undefined) {
|
|
345
|
-
draft.proxy.spec.headers = newHeaders;
|
|
346
|
-
}
|
|
347
|
-
}));
|
|
348
|
-
},
|
|
349
|
-
children: /*#__PURE__*/ _jsx(MinusIcon, {})
|
|
350
|
-
})
|
|
361
|
+
children: /*#__PURE__*/ _jsx(IconButton, {
|
|
362
|
+
disabled: isReadonly,
|
|
363
|
+
"aria-label": `Remove header ${watchedHeaders[index]?.name || index}`,
|
|
364
|
+
onClick: ()=>{
|
|
365
|
+
remove(index);
|
|
366
|
+
const updatedHeaders = watchedHeaders.filter((_, i)=>i !== index);
|
|
367
|
+
syncHeadersToParent(updatedHeaders);
|
|
368
|
+
},
|
|
369
|
+
children: /*#__PURE__*/ _jsx(MinusIcon, {})
|
|
351
370
|
})
|
|
352
371
|
})
|
|
353
372
|
]
|
|
354
|
-
},
|
|
373
|
+
}, field.id)) : /*#__PURE__*/ _jsx(Grid, {
|
|
374
|
+
item: true,
|
|
375
|
+
xs: 4,
|
|
376
|
+
children: /*#__PURE__*/ _jsx(Typography, {
|
|
377
|
+
sx: {
|
|
378
|
+
fontStyle: 'italic'
|
|
379
|
+
},
|
|
380
|
+
children: "None"
|
|
381
|
+
})
|
|
382
|
+
}),
|
|
383
|
+
hasDuplicates && /*#__PURE__*/ _jsx(Grid, {
|
|
384
|
+
item: true,
|
|
385
|
+
xs: 12,
|
|
386
|
+
children: /*#__PURE__*/ _jsx(Typography, {
|
|
387
|
+
variant: "body2",
|
|
388
|
+
color: "error",
|
|
389
|
+
children: "Duplicate header names detected. Each header name must be unique."
|
|
390
|
+
})
|
|
355
391
|
}),
|
|
356
392
|
/*#__PURE__*/ _jsx(Grid, {
|
|
357
393
|
item: true,
|
|
@@ -362,15 +398,10 @@ export function HTTPSettingsEditor(props) {
|
|
|
362
398
|
},
|
|
363
399
|
children: /*#__PURE__*/ _jsx(IconButton, {
|
|
364
400
|
disabled: isReadonly,
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
...draft.proxy.spec.headers,
|
|
370
|
-
'': ''
|
|
371
|
-
};
|
|
372
|
-
}
|
|
373
|
-
})),
|
|
401
|
+
onClick: ()=>append({
|
|
402
|
+
name: '',
|
|
403
|
+
value: ''
|
|
404
|
+
}),
|
|
374
405
|
children: /*#__PURE__*/ _jsx(PlusIcon, {})
|
|
375
406
|
})
|
|
376
407
|
})
|