mirror of
https://github.com/codex-team/editor.js
synced 2024-06-10 09:52:36 +02:00
Get rid of buildItems override
This commit is contained in:
parent
5c7415c5bb
commit
7e90001fed
|
@ -3,7 +3,8 @@ import { IconDotCircle, IconChevronRight } from '@codexteam/icons';
|
|||
import {
|
||||
PopoverItemDefaultParams as PopoverItemDefaultParams,
|
||||
PopoverItemParams as PopoverItemParams,
|
||||
PopoverItemRenderParams
|
||||
PopoverItemRenderParamsMap,
|
||||
PopoverItemType
|
||||
} from '../popover-item.types';
|
||||
import { PopoverItem } from '../popover-item';
|
||||
import { css } from './popover-item-default.const';
|
||||
|
@ -87,7 +88,7 @@ export class PopoverItemDefault extends PopoverItem {
|
|||
* @param renderParams - popover item render params.
|
||||
* The parameters that are not set by user via popover api but rather depend on technical implementation
|
||||
*/
|
||||
constructor(private readonly params: PopoverItemDefaultParams, renderParams?: PopoverItemRenderParams) {
|
||||
constructor(private readonly params: PopoverItemDefaultParams, renderParams?: PopoverItemRenderParamsMap[PopoverItemType.Default]) {
|
||||
super();
|
||||
|
||||
this.nodes.root = this.make(params, renderParams);
|
||||
|
@ -160,7 +161,7 @@ export class PopoverItemDefault extends PopoverItem {
|
|||
* @param params - item construction params
|
||||
* @param renderParams - popover item render params
|
||||
*/
|
||||
private make(params: PopoverItemDefaultParams, renderParams?: PopoverItemRenderParams): HTMLElement {
|
||||
private make(params: PopoverItemDefaultParams, renderParams?: PopoverItemRenderParamsMap[PopoverItemType.Default]): HTMLElement {
|
||||
const el = Dom.make('div', css.container);
|
||||
|
||||
if (params.name) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { PopoverItem } from '../popover-item';
|
||||
import { PopoverItemHtmlParams, PopoverItemRenderParams } from '../popover-item.types';
|
||||
import { PopoverItemHtmlParams, PopoverItemRenderParamsMap, PopoverItemType } from '../popover-item.types';
|
||||
import { css } from './popover-item-html.const';
|
||||
import Dom from '../../../../../dom';
|
||||
|
||||
|
@ -19,7 +19,7 @@ export class PopoverItemHtml extends PopoverItem {
|
|||
* @param renderParams – popover item render params.
|
||||
* The parameters that are not set by user via popover api but rather depend on technical implementation
|
||||
*/
|
||||
constructor(params: PopoverItemHtmlParams, renderParams?: PopoverItemRenderParams) {
|
||||
constructor(params: PopoverItemHtmlParams, renderParams?: PopoverItemRenderParamsMap[PopoverItemType.Html]) {
|
||||
super();
|
||||
|
||||
this.nodes = {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { HintPosition } from '../hint';
|
||||
import { HintParams, HintPosition } from '../hint';
|
||||
|
||||
/**
|
||||
* Popover item types
|
||||
|
@ -42,17 +42,7 @@ export interface PopoverItemHtmlParams {
|
|||
/**
|
||||
* Hint data to be displayed on item hover
|
||||
*/
|
||||
hint?: {
|
||||
/**
|
||||
* Hint title
|
||||
*/
|
||||
title: string;
|
||||
|
||||
/**
|
||||
* Secondary text to be displayed below the title
|
||||
*/
|
||||
description?: string;
|
||||
}
|
||||
hint?: HintParams;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -110,17 +100,7 @@ interface PopoverItemDefaultBaseParams {
|
|||
/**
|
||||
* Hint data to be displayed on item hover
|
||||
*/
|
||||
hint?: {
|
||||
/**
|
||||
* Hint title
|
||||
*/
|
||||
title: string;
|
||||
|
||||
/**
|
||||
* Secondary text to be displayed below the title
|
||||
*/
|
||||
description?: string;
|
||||
}
|
||||
hint?: HintParams;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -188,20 +168,22 @@ export type PopoverItemParams =
|
|||
* Popover item render params.
|
||||
* The parameters that are not set by user via popover api but rather depend on technical implementation
|
||||
*/
|
||||
export interface PopoverItemRenderParams {
|
||||
/**
|
||||
* Hint render params
|
||||
*/
|
||||
hint?: {
|
||||
export type PopoverItemRenderParamsMap = {
|
||||
[key in PopoverItemType.Default | PopoverItemType.Html]?: {
|
||||
/**
|
||||
* Hint position relative to the item
|
||||
* Hint render params
|
||||
*/
|
||||
position?: HintPosition;
|
||||
hint?: {
|
||||
/**
|
||||
* Hint position relative to the item
|
||||
*/
|
||||
position?: HintPosition;
|
||||
|
||||
/**
|
||||
* If false, hint will not be rendered.
|
||||
* True by default
|
||||
*/
|
||||
enabled: boolean;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* If false, hint will not be rendered.
|
||||
* True by default
|
||||
*/
|
||||
enabled: boolean;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { PopoverItem, PopoverItemDefault, PopoverItemRenderParams, PopoverItemSeparator, PopoverItemType } from './components/popover-item';
|
||||
import { PopoverItem, PopoverItemDefault, PopoverItemRenderParamsMap, PopoverItemSeparator, PopoverItemType } from './components/popover-item';
|
||||
import Dom from '../../dom';
|
||||
import { SearchInput, SearchInputEvent, SearchableItem } from './components/search-input';
|
||||
import EventsDispatcher from '../events';
|
||||
|
@ -39,6 +39,7 @@ export abstract class PopoverAbstract<Nodes extends PopoverNodes = PopoverNodes>
|
|||
*/
|
||||
protected search: SearchInput | undefined;
|
||||
|
||||
|
||||
/**
|
||||
* Messages that will be displayed in popover
|
||||
*/
|
||||
|
@ -51,8 +52,13 @@ export abstract class PopoverAbstract<Nodes extends PopoverNodes = PopoverNodes>
|
|||
* Constructs the instance
|
||||
*
|
||||
* @param params - popover construction params
|
||||
* @param itemsRenderParams - popover item render params.
|
||||
* The parameters that are not set by user via popover api but rather depend on technical implementation
|
||||
*/
|
||||
constructor(protected readonly params: PopoverParams) {
|
||||
constructor(
|
||||
protected readonly params: PopoverParams,
|
||||
protected readonly itemsRenderParams: PopoverItemRenderParamsMap = {}
|
||||
) {
|
||||
super();
|
||||
|
||||
this.items = this.buildItems(params.items);
|
||||
|
@ -147,17 +153,16 @@ export abstract class PopoverAbstract<Nodes extends PopoverNodes = PopoverNodes>
|
|||
* Factory method for creating popover items
|
||||
*
|
||||
* @param items - list of items params
|
||||
* @param params - popover item render params
|
||||
*/
|
||||
protected buildItems(items: PopoverItemParams[], params?: PopoverItemRenderParams): Array<PopoverItem> {
|
||||
protected buildItems(items: PopoverItemParams[]): Array<PopoverItem> {
|
||||
return items.map(item => {
|
||||
switch (item.type) {
|
||||
case PopoverItemType.Separator:
|
||||
return new PopoverItemSeparator();
|
||||
case PopoverItemType.Html:
|
||||
return new PopoverItemHtml(item, params);
|
||||
return new PopoverItemHtml(item, this.itemsRenderParams[PopoverItemType.Html]);
|
||||
default:
|
||||
return new PopoverItemDefault(item, params);
|
||||
return new PopoverItemDefault(item, this.itemsRenderParams[PopoverItemType.Default]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -3,10 +3,11 @@ import ScrollLocker from '../scroll-locker';
|
|||
import { PopoverHeader } from './components/popover-header';
|
||||
import { PopoverStatesHistory } from './utils/popover-states-history';
|
||||
import { PopoverMobileNodes, PopoverParams } from './popover.types';
|
||||
import { PopoverItem, PopoverItemDefault, PopoverItemParams } from './components/popover-item';
|
||||
import { PopoverItemDefault, PopoverItemParams, PopoverItemType } from './components/popover-item';
|
||||
import { css } from './popover.const';
|
||||
import Dom from '../../dom';
|
||||
|
||||
|
||||
/**
|
||||
* Mobile Popover.
|
||||
* On mobile devices Popover behaves like a fixed panel at the bottom of screen. Nested item appears like "pages" with the "back" button
|
||||
|
@ -41,7 +42,13 @@ export class PopoverMobile extends PopoverAbstract<PopoverMobileNodes> {
|
|||
* @param params - popover params
|
||||
*/
|
||||
constructor(params: PopoverParams) {
|
||||
super(params);
|
||||
super(params, {
|
||||
[PopoverItemType.Default]: {
|
||||
hint: {
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.nodes.overlay = Dom.make('div', [css.overlay, css.overlayHidden]);
|
||||
this.nodes.popover.insertBefore(this.nodes.overlay, this.nodes.popover.firstChild);
|
||||
|
@ -109,20 +116,6 @@ export class PopoverMobile extends PopoverAbstract<PopoverMobileNodes> {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the method to build items.
|
||||
* Hides items hints, as hint is not supported in mobile popover
|
||||
*
|
||||
* @param items - list of items params
|
||||
*/
|
||||
protected override buildItems(items: PopoverItemParams[]): Array<PopoverItem> {
|
||||
return super.buildItems(items, {
|
||||
hint: {
|
||||
enabled: false,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes rendered popover items and header and displays new ones
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue