From 4f91cba1c0dec8efa3357d19401770dae051818a Mon Sep 17 00:00:00 2001 From: Snehil Shah <130062020+Snehil-Shah@users.noreply.github.com> Date: Sat, 20 Apr 2024 19:50:44 +0530 Subject: [PATCH] Add deeplink above code block that links to the API reference for each request in the console (#142) * Add deeplink to the docs for each request in the console Signed-off-by: Snehil Shah * Move Core Logic to `autocomplete-openapi` module Signed-off-by: Snehil Shah * Fix Failing Workflow Signed-off-by: Snehil Shah * Refactor for 0c1f910256fb88b82875eef34a5056776d5a18f7 Signed-off-by: Snehil Shah * Refactor for a5693f7d5e811544a4fe245d630347c7b5148b0e Signed-off-by: Snehil Shah * Format Source Code Signed-off-by: Snehil Shah * refactor for `autocomplete-openapi=0.1.2` Signed-off-by: Snehil Shah * fix workflow Signed-off-by: Snehil Shah * Update src/components/EditorCommon/config/Rules.js Co-authored-by: Kartik Gupta <84975264+kartik-gupta-ij@users.noreply.github.com> * Update openapi import in Rules.js to use the "raw" query parameter --------- Signed-off-by: Snehil Shah Co-authored-by: Kartik Gupta <84975264+kartik-gupta-ij@users.noreply.github.com> Co-authored-by: kartik-gupta-ij --- package-lock.json | 14 ++++++------- package.json | 2 +- src/components/CodeEditorWindow/index.jsx | 8 +++++++- src/components/EditorCommon/config/Rules.js | 22 ++++++++++++++++++++- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 670342bfe..c974040b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "@uppy/react": "^3.1.2", "@uppy/xhr-upload": "^3.3.1", "@vitejs/plugin-react": "^4.0.0", - "autocomplete-openapi": "^0.1.1", + "autocomplete-openapi": "^0.1.2", "axios": "^1.6.7", "chart.js": "^4.3.0", "chroma-js": "^2.4.2", @@ -2665,9 +2665,9 @@ "license": "MIT" }, "node_modules/autocomplete-openapi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/autocomplete-openapi/-/autocomplete-openapi-0.1.1.tgz", - "integrity": "sha512-SEnDaskRUzn1zcacopmmX1O/ZRtISQkL1WzIqH4UDhDn0naV6CwTcCeGgQA44eCmXNeiBoA22qhr5rCwRz6xdA==" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/autocomplete-openapi/-/autocomplete-openapi-0.1.2.tgz", + "integrity": "sha512-m181So8ih34tiWGX1J62tmZTvxirajpV0mWr5PZsg2lnmiGD76HARf1Z/Qlg6oNsKp3DXIs6K+7nm8upTHQ2uQ==" }, "node_modules/available-typed-arrays": { "version": "1.0.5", @@ -9868,9 +9868,9 @@ "version": "0.4.0" }, "autocomplete-openapi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/autocomplete-openapi/-/autocomplete-openapi-0.1.1.tgz", - "integrity": "sha512-SEnDaskRUzn1zcacopmmX1O/ZRtISQkL1WzIqH4UDhDn0naV6CwTcCeGgQA44eCmXNeiBoA22qhr5rCwRz6xdA==" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/autocomplete-openapi/-/autocomplete-openapi-0.1.2.tgz", + "integrity": "sha512-m181So8ih34tiWGX1J62tmZTvxirajpV0mWr5PZsg2lnmiGD76HARf1Z/Qlg6oNsKp3DXIs6K+7nm8upTHQ2uQ==" }, "available-typed-arrays": { "version": "1.0.5" diff --git a/package.json b/package.json index 28743a667..62244dc40 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "@uppy/react": "^3.1.2", "@uppy/xhr-upload": "^3.3.1", "@vitejs/plugin-react": "^4.0.0", - "autocomplete-openapi": "^0.1.1", + "autocomplete-openapi": "^0.1.2", "axios": "^1.6.7", "chart.js": "^4.3.0", "chroma-js": "^2.4.2", diff --git a/src/components/CodeEditorWindow/index.jsx b/src/components/CodeEditorWindow/index.jsx index 69ebb8c64..5e36b760b 100644 --- a/src/components/CodeEditorWindow/index.jsx +++ b/src/components/CodeEditorWindow/index.jsx @@ -19,6 +19,7 @@ const CodeEditorWindow = ({ onChange, code, onChangeResult, setRequestCount }) = let runBtnCommandId = null; let beautifyBtnCommandId = null; + let docsBtnCommandId = null; const handleEditorChange = (code) => { onChange('code', code); @@ -74,10 +75,15 @@ const CodeEditorWindow = ({ onChange, code, onChangeResult, setRequestCount }) = '' ); + docsBtnCommandId = editor.addCommand(0, async (_ctx, ...args) => { + const docsURL = args[0]; + window.open(docsURL, '_blank'); + }); + // Register Code Lens Provider (Run Button) lensesRef.current = monaco.languages.registerCodeLensProvider( 'custom-language', - btnconfig(runBtnCommandId, beautifyBtnCommandId) + btnconfig(runBtnCommandId, beautifyBtnCommandId, docsBtnCommandId) ); // Listen for Mouse Postion Change diff --git a/src/components/EditorCommon/config/Rules.js b/src/components/EditorCommon/config/Rules.js index 81fd8bb4c..29203e109 100644 --- a/src/components/EditorCommon/config/Rules.js +++ b/src/components/EditorCommon/config/Rules.js @@ -1,4 +1,10 @@ +import { OpenapiDocs } from 'autocomplete-openapi/src/request-docs'; +import openapi from '/openapi.json??url&raw'; + const Method = ['POST', 'GET', 'PUT', 'DELETE', 'PATCH', 'HEAD']; +const DOCS_BASE_URL = 'https://qdrant.github.io/qdrant/redoc/index.html#tag/'; + +const apiDocs = new OpenapiDocs(JSON.parse(openapi)); export const Rules = { Method, @@ -54,7 +60,7 @@ export const options = { }, }; -export function btnconfig(commandId, beutifyCommandId) { +export function btnconfig(commandId, beutifyCommandId, docsCommandId) { return { // function takes model and token as arguments provideCodeLenses: function (model) { @@ -88,6 +94,20 @@ export function btnconfig(commandId, beutifyCommandId) { arguments: [codeBlocks[i]], }, }); + + const terminal = apiDocs.getRequestDocs(codeBlocks[i].blockText.split('\n')[0]); + if (terminal) { + const docsURL = DOCS_BASE_URL + terminal.tags[0] + '/operation/' + terminal.operationId; + lenses.push({ + range, + id: 'DOCS', + command: { + id: docsCommandId, + title: 'DOCS', + arguments: [docsURL], + }, + }); + } } return {