@fc-components/monaco-editor 0.1.6 → 0.1.7

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.
@@ -1,7 +1,7 @@
1
1
  import React, { useRef, useEffect } from 'react';
2
2
  import MonacoEditor from 'react-monaco-editor';
3
3
  import * as monaco from 'monaco-editor';
4
- import { languages, editor, KeyMod, KeyCode, Range, MarkerSeverity } from 'monaco-editor';
4
+ import { languages, Range, editor, KeyMod, KeyCode, MarkerSeverity } from 'monaco-editor';
5
5
  import { promLanguageDefinition } from 'monaco-promql';
6
6
  import { parser, LabelMatchers, VectorSelector, PromQL, FunctionCallBody, StringLiteral, UnquotedLabelMatcher, BinaryExpr, NumberDurationLiteralInDurationContext, MatrixSelector, GroupingLabels, AggregateModifier, AggregateExpr, Identifier, LabelName, MatchOp, EqlSingle, EqlRegex, Neq, NeqRegex } from '@fc-components/lezer-metricsql';
7
7
  import { v4 } from 'uuid';
@@ -1990,7 +1990,6 @@ function PromQLEditor(props) {
1990
1990
  size = _props$size === void 0 ? 'middle' : _props$size,
1991
1991
  _props$theme = props.theme,
1992
1992
  theme = _props$theme === void 0 ? 'light' : _props$theme,
1993
- variablesNames = props.variablesNames,
1994
1993
  value = props.value,
1995
1994
  placeholder = props.placeholder,
1996
1995
  interpolateString = props.interpolateString,
@@ -2003,8 +2002,10 @@ function PromQLEditor(props) {
2003
2002
  var autocompleteDisposeFun = useRef(null);
2004
2003
  var containerRef = useRef(null);
2005
2004
  var dataProviderRef = useRef(null);
2005
+ var editorRef = useRef(null);
2006
2006
  var styles = getStyles(placeholder);
2007
2007
  var handleEditorDidMount = function handleEditorDidMount(editor$1) {
2008
+ editorRef.current = editor$1;
2008
2009
  editor.defineTheme('n9e-dark', {
2009
2010
  base: 'vs-dark',
2010
2011
  inherit: true,
@@ -2023,35 +2024,7 @@ function PromQLEditor(props) {
2023
2024
  editor$1.onDidFocusEditorText(function () {
2024
2025
  isEditorFocused.set(true);
2025
2026
  });
2026
- if (enableAutocomplete) {
2027
- var dataProvider = new DataProvider({
2028
- url: props.url,
2029
- lookbackInterval: props.lookbackInterval,
2030
- variablesNames: props.variablesNames,
2031
- durationVariablesCompletion: props.durationVariablesCompletion,
2032
- request: props.request,
2033
- httpMethod: props.httpMethod,
2034
- apiPrefix: props.apiPrefix,
2035
- httpErrorHandler: props.httpErrorHandler
2036
- });
2037
- dataProviderRef.current = dataProvider;
2038
- dataProvider.start();
2039
- var completionProvider = getCompletionProvider(monaco, dataProvider);
2040
- var filteringCompletionProvider = _extends({}, completionProvider, {
2041
- provideCompletionItems: function provideCompletionItems(model, position, context, token) {
2042
- var _editor$getModel;
2043
- if (((_editor$getModel = editor$1.getModel()) == null ? void 0 : _editor$getModel.id) !== model.id) {
2044
- return {
2045
- suggestions: []
2046
- };
2047
- }
2048
- return completionProvider.provideCompletionItems(model, position, context, token);
2049
- }
2050
- });
2051
- var _monaco$languages$reg = languages.registerCompletionItemProvider(PROMQL_LANG_ID, filteringCompletionProvider),
2052
- dispose = _monaco$languages$reg.dispose;
2053
- autocompleteDisposeFun.current = dispose;
2054
- }
2027
+ // set the height of the editor container
2055
2028
  var updateElementHeight = function updateElementHeight() {
2056
2029
  var containerDiv = containerRef.current;
2057
2030
  if (containerDiv !== null) {
@@ -2076,26 +2049,6 @@ function PromQLEditor(props) {
2076
2049
  editor$1.addCommand(KeyMod.Shift | KeyCode.Enter, function () {
2077
2050
  onShiftEnter == null || onShiftEnter(editor$1.getValue());
2078
2051
  }, 'isEditorFocused' + id);
2079
- if (placeholder) {
2080
- var placeholderDecorators = [{
2081
- range: new Range(1, 1, 1, 1),
2082
- options: {
2083
- className: styles.placeholder,
2084
- isWholeLine: true
2085
- }
2086
- }];
2087
- var decorators = [];
2088
- var checkDecorators = function checkDecorators() {
2089
- var model = editor$1.getModel();
2090
- if (!model) {
2091
- return;
2092
- }
2093
- var newDecorators = model.getValueLength() === 0 ? placeholderDecorators : [];
2094
- decorators = model.deltaDecorations(decorators, newDecorators);
2095
- };
2096
- checkDecorators();
2097
- editor$1.onDidChangeModelContent(checkDecorators);
2098
- }
2099
2052
  editor$1.onDidChangeModelContent(function () {
2100
2053
  var model = editor$1.getModel();
2101
2054
  if (model) {
@@ -2131,14 +2084,76 @@ function PromQLEditor(props) {
2131
2084
  languages.setLanguageConfiguration(PROMQL_LANG_ID, languageConfiguration);
2132
2085
  return function () {
2133
2086
  autocompleteDisposeFun.current == null || autocompleteDisposeFun.current();
2087
+ dataProviderRef.current = null;
2134
2088
  };
2135
2089
  }, []);
2136
2090
  useEffect(function () {
2137
- var dataProvider = dataProviderRef.current;
2138
- if (dataProvider) {
2139
- dataProvider.setVariablesNames(variablesNames || []);
2091
+ var editor = editorRef.current;
2092
+ if (!editor) return;
2093
+ // clean up previous autocomplete provider
2094
+ if (autocompleteDisposeFun.current) {
2095
+ autocompleteDisposeFun.current();
2096
+ autocompleteDisposeFun.current = null;
2097
+ }
2098
+ dataProviderRef.current = null;
2099
+ // If autocomplete is enabled, set up a new autocomplete provider
2100
+ if (enableAutocomplete) {
2101
+ var dataProvider = new DataProvider({
2102
+ url: props.url,
2103
+ lookbackInterval: props.lookbackInterval,
2104
+ variablesNames: props.variablesNames,
2105
+ durationVariablesCompletion: props.durationVariablesCompletion,
2106
+ request: props.request,
2107
+ httpMethod: props.httpMethod,
2108
+ apiPrefix: props.apiPrefix,
2109
+ httpErrorHandler: props.httpErrorHandler
2110
+ });
2111
+ dataProviderRef.current = dataProvider;
2112
+ dataProvider.start();
2113
+ var completionProvider = getCompletionProvider(monaco, dataProvider);
2114
+ var filteringCompletionProvider = _extends({}, completionProvider, {
2115
+ provideCompletionItems: function provideCompletionItems(model, position, context, token) {
2116
+ var _editor$getModel;
2117
+ if (((_editor$getModel = editor.getModel()) == null ? void 0 : _editor$getModel.id) !== model.id) {
2118
+ return {
2119
+ suggestions: []
2120
+ };
2121
+ }
2122
+ return completionProvider.provideCompletionItems(model, position, context, token);
2123
+ }
2124
+ });
2125
+ var _monaco$languages$reg = languages.registerCompletionItemProvider(PROMQL_LANG_ID, filteringCompletionProvider),
2126
+ dispose = _monaco$languages$reg.dispose;
2127
+ autocompleteDisposeFun.current = dispose;
2128
+ }
2129
+ // clean up previous placeholder decorations
2130
+ var model = editor.getModel();
2131
+ if (model) {
2132
+ model.deltaDecorations(model.getAllDecorations().map(function (d) {
2133
+ return d.id;
2134
+ }), []);
2135
+ }
2136
+ if (placeholder) {
2137
+ var placeholderDecorators = [{
2138
+ range: new Range(1, 1, 1, 1),
2139
+ options: {
2140
+ className: styles.placeholder,
2141
+ isWholeLine: true
2142
+ }
2143
+ }];
2144
+ var decorators = [];
2145
+ var checkDecorators = function checkDecorators() {
2146
+ var model = editor.getModel();
2147
+ if (!model) {
2148
+ return;
2149
+ }
2150
+ var newDecorators = model.getValueLength() === 0 ? placeholderDecorators : [];
2151
+ decorators = model.deltaDecorations(decorators, newDecorators);
2152
+ };
2153
+ checkDecorators();
2154
+ editor.onDidChangeModelContent(checkDecorators);
2140
2155
  }
2141
- }, [JSON.stringify(variablesNames)]);
2156
+ }, [enableAutocomplete, props.url, props.lookbackInterval, JSON.stringify(props.variablesNames), props.durationVariablesCompletion, props.httpMethod, props.apiPrefix, placeholder]);
2142
2157
  return React.createElement("div", {
2143
2158
  className: 'ant-input' + (size ? " " + SIZE_MAP[size].className : '')
2144
2159
  }, React.createElement("div", {