@atlaskit/editor-plugin-quick-insert
Version:
Quick insert plugin for @atlaskit/editor-core
56 lines (55 loc) • 2.98 kB
JavaScript
import { find } from '@atlaskit/editor-common/quick-insert';
import { dedupe } from '@atlaskit/editor-common/utils';
import { fg } from '@atlaskit/platform-feature-flags';
const isRegisteredLayoutQuickInsertItem = item => {
var _item$keywords, _item$keywords2;
return Boolean(item.id && item.id !== 'layout' && ((_item$keywords = item.keywords) === null || _item$keywords === void 0 ? void 0 : _item$keywords.includes('layout')) && ((_item$keywords2 = item.keywords) === null || _item$keywords2 === void 0 ? void 0 : _item$keywords2.includes('column')));
};
const getLayoutQuickInsertItemIdRank = items => new Map(items.filter(isRegisteredLayoutQuickInsertItem).map((item, index) => [item.id, index]));
const getQuickInsertItemId = (items, result) => {
var _items$result$idx;
return (_items$result$idx = items[result.idx]) === null || _items$result$idx === void 0 ? void 0 : _items$result$idx.id;
};
export const withLayoutQuickInsertPrioritySorting = prioritySortingFn => items => {
const consumerSortFn = prioritySortingFn === null || prioritySortingFn === void 0 ? void 0 : prioritySortingFn(items);
const layoutItemIdRank = getLayoutQuickInsertItemIdRank(items);
if (layoutItemIdRank.size < 2) {
return consumerSortFn;
}
return (firstItem, secondItem) => {
const firstLayoutItemRank = layoutItemIdRank.get(getQuickInsertItemId(items, firstItem));
const secondLayoutItemRank = layoutItemIdRank.get(getQuickInsertItemId(items, secondItem));
if (firstLayoutItemRank !== undefined && secondLayoutItemRank !== undefined) {
return firstLayoutItemRank - secondLayoutItemRank;
}
if (consumerSortFn) {
return consumerSortFn(firstItem, secondItem);
}
return firstItem.score === secondItem.score ? firstItem.idx < secondItem.idx ? -1 : 1 : firstItem.score < secondItem.score ? -1 : 1;
};
};
export const getQuickInsertSuggestions = (searchOptions, lazyDefaultItems = () => [], providedItems) => {
// @ts-ignore
const {
query,
category,
disableDefaultItems,
featuredItems,
itemFilter,
prioritySortingFn
} = searchOptions;
const defaultItems = disableDefaultItems ? [] : lazyDefaultItems();
const dedupeFn = item => {
var _item$description;
return `${item.title}-${(_item$description = item.description) !== null && _item$description !== void 0 ? _item$description : ''}`;
};
let items = providedItems ? dedupe([...defaultItems, ...providedItems], dedupeFn) : defaultItems;
// EDITOR-6558: apply consumer-supplied filter (e.g. Markdown Mode allowlist).
if (itemFilter) {
items = items.filter(itemFilter);
}
if (featuredItems) {
return items.filter(item => item.featured);
}
return find((fg('platform_editor_fix_space_triggering_ai') ? query === null || query === void 0 ? void 0 : query.trimEnd() : query) || '', category === 'all' || !category ? items : items.filter(item => item.categories && item.categories.includes(category)), prioritySortingFn);
};