UNPKG

@finos/legend-data-cube

Version:
64 lines 3.44 kB
import { jsx as _jsx } from "react/jsx-runtime"; /** * Copyright (c) 2020-present, Goldman Sachs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { languages as monacoLanguagesAPI, } from 'monaco-editor'; // Since we render the editor in a window which has been CSS transformed, and monaco-editor renders // the widgets with position=fixed, the position of the widgets will be off, we need to move the root // which monaco-editor uses to calculate the offset to outside of the transformed container // See https://dev.to/salilnaik/the-uncanny-relationship-between-position-fixed-and-transform-property-32f6 // See https://github.com/microsoft/monaco-editor/issues/2793#issuecomment-999337740 export const MONACO_EDITOR_OVERFLOW_WIDGETS_ROOT_ID = 'monaco-editor-overflow-widgets-root'; export function INTERNAL__MonacoEditorWidgetsRoot() { return (_jsx("div", { id: MONACO_EDITOR_OVERFLOW_WIDGETS_ROOT_ID, className: "monaco-editor" // keep this root class so widgets can be styled properly })); } export async function getCodeSuggestions(position, model, prefix, engine, source, baseQueryBuilder) { const textUntilPosition = model.getValueInRange({ startLineNumber: 1, startColumn: 1, endLineNumber: position.lineNumber, endColumn: position.column, }); const currentWord = model.getWordAtPosition(position); let suggestions = []; try { suggestions = await engine.getQueryTypeahead((prefix ?? '') + textUntilPosition, baseQueryBuilder(), source); } catch { // do nothing: provide no suggestions when error ocurred } return suggestions.map((suggestion) => ({ label: suggestion.display, kind: monacoLanguagesAPI.CompletionItemKind.Text, // TODO?: the engine should provide this information filterText: suggestion.display, insertTextRules: monacoLanguagesAPI.CompletionItemInsertTextRule.InsertAsSnippet, insertText: suggestion.completion, // NOTE: the following replace range is equivalent to the current word range, if there is a current word, // replace this word with the suggestions, otherwise, if there is no current word, we use the current position // as insertion point for the suggestion. This is due to the fact that the auto-completer gives full word // suggestions even when the user is typing the middle of that word // // For example, if the current input is 'a' and the suggestion is 'abc', we need to make sure // the suggestion is inserted so that the final result is 'abc', not 'aabc' range: { startLineNumber: position.lineNumber, startColumn: currentWord?.startColumn ?? position.column, endLineNumber: position.lineNumber, endColumn: currentWord?.endColumn ?? position.column, }, })); } //# sourceMappingURL=DataCubePureCodeEditorUtils.js.map