UNPKG

@eurostat/vtl-editor

Version:
154 lines (115 loc) 4.5 kB
# VTL Antlr Editor [![VTL Editor CI](https://github.com/eurostat/vtl-editor/actions/workflows/ci.yaml/badge.svg)](https://github.com/eurostat/vtl-editor/actions/workflows/ci.yaml) [![npm version](https://badge.fury.io/js/%40eurostat%2Fvtl-editor.svg)](https://badge.fury.io/js/%40eurostat%2Fvtl-editor) See example into deployed [Storybook](https://eurostat.github.io/vtl-editor/index.html) ## Usage ### Install ```bash yarn add typescript @eurostat/vtl-editor antlr4ts monaco-editor react-monaco-editor ``` ### VTLEditor ```bash yarn add vtl-2-0-antlr-tools-ts ``` ```javascript import React, { useState } from "react"; import { AntlrEditor as VTLEditor } from "@eurostat/vtl-editor"; import * as VTLTools from "vtl-2-0-antlr-tools-ts"; import { getSuggestions } from "./custom-suggestions"; const Editor = ({}) => { const [script, setScript] = useState(""); const [errors, setErrors] = useState([]); const customTools = { ...VTLTools, getSuggestionsFromRange: getSuggestions }; return ( <> <VTLEditor script={script} setScript={setScript} onListErrors={setErrors} variables={{}} variableURLs={[]} sdmxResult={{}} sdmxResultURL={""} readOnly={false} tools={customTools} /> {errors.length > 0 && <div>{`Errors: ${errors.join(" - ")}`}</div>} </> ); }; export default Editor; ``` ### VTLEditor Props | Name | Type | Default value | | -------------- | :-------------: | :-----------: | | script | string | - | | setScript | Function | - | | customFetcher | Function \* | - | | tools | Tools \* | - | | variables | Variables \* | { } | | variableURLs | VariableURLs \* | [ ] | | sdmxResult | SdmxResult \* | undefined | | sdmxResultURL | string \* | undefined | | onListErrors | Function | undefined | | movedCursor | object | undefined | | onCursorChange | Function | undefined | | resizeLayout | any | - | | options | Options \* | {} | See details about \* props below ### Props #### `tools` `tools` has to be mainly antlr4 auto-generated Lexer & Parser. | Name | Type | Default value | | ----------------------- | :-----------: | :-----------: | | id | string | - | | initialRule | string | - | | grammar | string | - | | Lexer | Antlr4 Lexer | - | | Parser | Antlr4 Parser | - | | getSuggestionsFromRange | func | () => [] | Have a look to [VTL 2.0 Antlr Tools](https://github.com/NicoLaval/vtl-2-0-antlr-tools-ts) for example. #### `customFetcher` `customFetcher` enable to provide a custom fetch, adding Authorization header for instance: ```javascript u => fetch(u, headers:{ Authorization: 'Bearer XXX'}) ``` This function will be used to fetch `variableURLs` & `sdmxResultURL` props. #### `variables` `variables` enable to pass an object to provide auto-suggestion. The shape of this object is: ```json const obj = { "var1": {"type": "STRING", "role": "IDENTIFIER"}, "var2": {"type": "INTEGER", "role": "MEASURE"}, } ``` #### `variableURLs` `variableURLs` enable to pass an array of string to fetch to provide auto-suggestion: ```json ["http://metadata/1", "http://metadata/2"] ``` The shape of each fetched resources has to be: ```json [ { "name": "var1", "type": "STRING", "role": "IDENTIFIER" }, { "name": "var2", "type": "INTEGER", "role": "MEASURE" } ] ``` #### `sdmxResult` See an example [here](https://github.com/eurostat/vtl-editor/blob/master/src/stories/sdmxResult.json) #### `sdmxResultURL` Has to be an URL string to fetch, returning a SdmxResult. #### `options` The shape of `options` props has to be: ```json { "minimap": "Values: true | false - Default: true", "theme": "Values: 'vs-dark' | 'vs-light' - Default: 'vs-dark'", "hideLines": "Values: true | false - Default: false", "style": { "cssProperty": "value", "...": "...", "comment": "Style props are applied to editor container" } } ```