Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/content_editor/extensions/suggestions.js')
-rw-r--r--app/assets/javascripts/content_editor/extensions/suggestions.js10
1 files changed, 6 insertions, 4 deletions
diff --git a/app/assets/javascripts/content_editor/extensions/suggestions.js b/app/assets/javascripts/content_editor/extensions/suggestions.js
index 1b345a36c7e..b6db7f9d358 100644
--- a/app/assets/javascripts/content_editor/extensions/suggestions.js
+++ b/app/assets/javascripts/content_editor/extensions/suggestions.js
@@ -3,7 +3,7 @@ import { VueRenderer } from '@tiptap/vue-2';
import tippy from 'tippy.js';
import Suggestion from '@tiptap/suggestion';
import { PluginKey } from 'prosemirror-state';
-import { isFunction, uniqueId } from 'lodash';
+import { isFunction, uniqueId, memoize } from 'lodash';
import axios from '~/lib/utils/axios_utils';
import { initEmojiMap, getAllEmoji } from '~/emoji';
import SuggestionsDropdown from '../components/suggestions_dropdown.vue';
@@ -21,6 +21,10 @@ function createSuggestionPlugin({
nodeType,
nodeProps = {},
}) {
+ const fetchData = memoize(
+ isFunction(dataSource) ? dataSource : async () => (await axios.get(dataSource)).data,
+ );
+
return Suggestion({
editor,
char,
@@ -38,9 +42,7 @@ function createSuggestionPlugin({
if (!dataSource) return [];
try {
- const items = isFunction(dataSource)
- ? await dataSource()
- : (await axios.get(dataSource)).data;
+ const items = await fetchData();
return items.filter(search(query)).slice(0, limit);
} catch {