@gravity-ui/dashkit 9.2.1-beta1 → 9.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/components/OverlayControls/OverlayControls.d.ts +2 -0
- package/build/cjs/components/OverlayControls/OverlayControls.js +4 -3
- package/build/cjs/components/OverlayControls/OverlayControls.js.map +1 -1
- package/build/esm/components/OverlayControls/OverlayControls.d.ts +2 -0
- package/build/esm/components/OverlayControls/OverlayControls.js +4 -3
- package/build/esm/components/OverlayControls/OverlayControls.js.map +1 -1
- package/package.json +1 -1
|
@@ -12,6 +12,7 @@ export declare enum OverlayControlsPosition {
|
|
|
12
12
|
export interface OverlayControlItem {
|
|
13
13
|
title?: string;
|
|
14
14
|
icon?: IconProps['data'];
|
|
15
|
+
renderIcon?: (item: ConfigItem) => IconProps['data'];
|
|
15
16
|
iconSize?: number | string;
|
|
16
17
|
handler?: (item: ConfigItem) => void;
|
|
17
18
|
visible?: (item: ConfigItem) => boolean;
|
|
@@ -19,6 +20,7 @@ export interface OverlayControlItem {
|
|
|
19
20
|
excludeWidgetsTypes?: Array<PluginBase['type']>;
|
|
20
21
|
id?: string;
|
|
21
22
|
qa?: string;
|
|
23
|
+
className?: string;
|
|
22
24
|
}
|
|
23
25
|
export interface OverlayCustomControlItem {
|
|
24
26
|
id: string;
|
|
@@ -40,13 +40,14 @@ class OverlayControls extends react_1.default.Component {
|
|
|
40
40
|
};
|
|
41
41
|
this.renderControlsItem = (item, index, length) => {
|
|
42
42
|
const { view, size, onItemClick } = this.props;
|
|
43
|
-
const { title, handler, icon, iconSize, qa } = item;
|
|
43
|
+
const { title, handler, icon, renderIcon, iconSize, qa, className } = item;
|
|
44
|
+
const iconData = renderIcon ? renderIcon(this.props.configItem) : icon;
|
|
44
45
|
const onItemClickHandler = typeof handler === 'function' ? handler : noop_1.default;
|
|
45
46
|
return (react_1.default.createElement(uikit_1.Button, { key: `control_${index}`, view: view, size: size, title: title, pin: this.getControlItemPinStyle(index, length), onClick: () => {
|
|
46
47
|
onItemClickHandler(this.props.configItem);
|
|
47
48
|
onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick();
|
|
48
|
-
}, qa: qa },
|
|
49
|
-
react_1.default.createElement(uikit_1.Icon, { data:
|
|
49
|
+
}, className: className, qa: qa },
|
|
50
|
+
react_1.default.createElement(uikit_1.Icon, { data: iconData || icons_1.Gear, size: icon ? iconSize : constants_1.OVERLAY_ICON_SIZE })));
|
|
50
51
|
};
|
|
51
52
|
this.getDefaultControls = () => {
|
|
52
53
|
const { view, size } = this.props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayControls.js","sourceRoot":"../../../../src","sources":["components/OverlayControls/OverlayControls.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Ellipsis, Gear, Xmark} from '@gravity-ui/icons';\nimport {\n Button,\n ButtonSize,\n ButtonView,\n DropdownMenu,\n DropdownMenuItem,\n Icon,\n IconProps,\n MenuItemProps,\n} from '@gravity-ui/uikit';\nimport noop from 'lodash/noop';\n\nimport {\n COPIED_WIDGET_STORE_KEY,\n DRAGGABLE_CANCEL_CLASS_NAME,\n MenuItems,\n OVERLAY_CONTROLS_CLASS_NAME,\n OVERLAY_ICON_SIZE,\n} from '../../constants';\nimport {DashkitOvelayControlsContext, OverlayControlsCtxShape} from '../../context';\nimport {i18n} from '../../i18n';\nimport {\n type ConfigItem,\n type ItemParams,\n type ItemState,\n type PluginBase,\n isItemWithTabs,\n resolveItemInnerId,\n} from '../../shared';\nimport {MenuItem, Settings} from '../../typings';\nimport {cn} from '../../utils/cn';\n\nimport './OverlayControls.scss';\n\nconst b = cn(OVERLAY_CONTROLS_CLASS_NAME);\n\nexport enum OverlayControlsPosition {\n TopRight = 'top_right',\n TopLeft = 'top_left',\n BottomRight = 'bottom_right',\n BottomLeft = 'bottom_left',\n}\n\nexport interface OverlayControlItem {\n title?: string;\n icon?: IconProps['data'];\n iconSize?: number | string;\n handler?: (item: ConfigItem) => void;\n visible?: (item: ConfigItem) => boolean;\n allWidgetsControls?: boolean; // флаг кастомного контрола (без кастомного виджета), которые показываются не в списке меню\n excludeWidgetsTypes?: Array<PluginBase['type']>; // массив с типами виджетов (плагинов), которые исключаем из отображения контрола по настройке allWidgetsControls\n id?: string; // id дефолтного пункта меню для возможноти использования дефолтного action в кастомных контролах\n qa?: string;\n}\n\nexport interface OverlayCustomControlItem {\n id: string;\n title?: string;\n icon?: MenuItemProps['iconStart'];\n iconSize?: number | string;\n handler?: (item: ConfigItem, params: ItemParams, state: ItemState) => void;\n visible?: (item: ConfigItem) => boolean;\n className?: string;\n qa?: string;\n}\n\ninterface OverlayControlsDefaultProps {\n position: OverlayControlsPosition;\n view: ButtonView;\n size: ButtonSize;\n}\n\ninterface OverlayControlsProps extends OverlayControlsDefaultProps {\n configItem: ConfigItem;\n onItemClick?: () => void | null;\n}\n\ntype PreparedCopyItemOptionsArg = Pick<ConfigItem, 'data' | 'type' | 'defaults' | 'namespace'> & {\n timestamp: number;\n layout: {\n w: number;\n h: number;\n };\n targetId?: string;\n targetInnerId?: string;\n};\n\nexport type PreparedCopyItemOptions<C extends object = {}> = PreparedCopyItemOptionsArg & {\n copyContext?: C;\n};\n\ntype OverlayControlsCtx = React.Context<OverlayControlsCtxShape>;\n\nconst DEFAULT_DROPDOWN_MENU = [MenuItems.Copy, MenuItems.Delete];\n\nclass OverlayControls extends React.Component<OverlayControlsProps> {\n static contextType = DashkitOvelayControlsContext;\n static defaultProps: OverlayControlsDefaultProps = {\n position: OverlayControlsPosition.TopRight,\n view: 'flat',\n size: 'm',\n };\n context!: React.ContextType<OverlayControlsCtx>;\n\n state = {\n dropdownMenuItems: [] as DropdownMenuItem[],\n };\n\n componentDidMount() {\n this.updateDropdownMenuItems();\n }\n\n componentDidUpdate() {\n this.updateDropdownMenuItems();\n }\n\n render() {\n const {position} = this.props;\n const items = this.getItems();\n const hasCustomControlsWithWidgets = items.length > 0;\n\n const controls = hasCustomControlsWithWidgets\n ? this.getCustomControlsWithWidgets()\n : this.renderControls();\n\n return <div className={b({position}, [DRAGGABLE_CANCEL_CLASS_NAME])}>{controls}</div>;\n }\n\n private shallowEqualDropdownMenu(menuA: DropdownMenuItem[], menuB: DropdownMenuItem[]) {\n return (\n menuA.length === menuB.length &&\n menuA.every((itemA, index) => {\n const itemB = menuB[index];\n\n if (!itemB) {\n return false;\n }\n\n return Object.entries(itemA).every(\n ([key, value]) =>\n /**\n * field 'action' is new every time\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061L297}\n */\n key === 'action' || itemB[key as keyof DropdownMenuItem] === value,\n );\n })\n );\n }\n\n private updateDropdownMenuItems = () => {\n const items = this.getDropdownMenuItems();\n if (!this.shallowEqualDropdownMenu(items, this.state.dropdownMenuItems)) {\n this.setState({dropdownMenuItems: items});\n }\n };\n\n private getItems = () => {\n const {overlayControls} = this.context;\n const {configItem} = this.props;\n\n return (overlayControls && overlayControls[configItem.type]) || [];\n };\n\n private renderControlsItem = (item: OverlayControlItem, index: number, length: number) => {\n const {view, size, onItemClick} = this.props;\n const {title, handler, icon, iconSize, qa} = item;\n\n const onItemClickHandler = typeof handler === 'function' ? handler : noop;\n return (\n <Button\n key={`control_${index}`}\n view={view}\n size={size}\n title={title}\n pin={this.getControlItemPinStyle(index, length)}\n onClick={() => {\n onItemClickHandler(this.props.configItem);\n onItemClick?.();\n }}\n qa={qa}\n >\n <Icon data={icon || Gear} size={icon ? iconSize : OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private getDropDownMenuItemConfig(menuName: string, isDefaultMenu?: boolean) {\n switch (menuName) {\n case MenuItems.Copy: {\n return {\n action: this.onCopyItem,\n text: i18n('label_copy'),\n };\n }\n case MenuItems.Delete: {\n return {\n action: this.onRemoveItem,\n text: i18n('label_delete'),\n };\n }\n case MenuItems.Settings: {\n // для дефолтного состояния меню нет настройки settings, а для кастомного можно использовать дефолтный action и text\n if (isDefaultMenu) {\n return null;\n }\n return {\n action: this.onEditItem,\n text: i18n('label_settings'),\n };\n }\n }\n return null;\n }\n\n private getDefaultControls = () => {\n const {view, size} = this.props;\n\n if (this.context.overlayControls === null) {\n return null;\n }\n\n return (\n <Button\n key={'control_default'}\n view={view}\n size={size}\n title={i18n('label_settings')}\n pin=\"round-brick\"\n onClick={this.onEditItem}\n qa=\"dashkit-overlay-control-settings\"\n >\n <Icon data={Gear} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private renderControls() {\n const customLeftControls = this.getCustomLeftOverlayControls();\n const hasCustomOverlayLeftControls = Boolean(customLeftControls.length);\n\n const controls = hasCustomOverlayLeftControls\n ? customLeftControls.map(\n (item: OverlayControlItem, index: number, items: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, items.length + 1),\n )\n : this.getDefaultControls();\n\n const menu = this.renderMenu(controls === null);\n\n return (\n <div\n className={b('default-controls', {\n 'with-custom-left': hasCustomOverlayLeftControls,\n })}\n >\n {controls}\n {menu}\n </div>\n );\n }\n private renderMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const dropdown = this.renderDropdownMenu(isOnlyOneItem);\n\n if (dropdown) {\n return dropdown;\n }\n\n return (\n <Button\n key={'delete-control'}\n view={view}\n size={size}\n title={i18n('label_delete')}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n onClick={this.onRemoveItem}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Xmark} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n }\n\n private isDefaultMenu(menu: Settings['menu']) {\n return menu?.every((item) =>\n (Object.values(MenuItems) as Array<string>).includes(String(item)),\n );\n }\n private getDropdownMenuItems(): DropdownMenuItem[] {\n const {onItemClick} = this.props;\n const {menu: contextMenu, itemsParams, itemsState} = this.context;\n\n const configItem = this.props.configItem;\n const itemParams = itemsParams[configItem.id];\n const itemState = itemsState?.[configItem.id] || {};\n\n const menu = contextMenu && contextMenu.length > 0 ? contextMenu : DEFAULT_DROPDOWN_MENU;\n\n const isDefaultMenu = this.isDefaultMenu(menu);\n\n return isDefaultMenu\n ? ((menu || []) as string[]).reduce<DropdownMenuItem[]>((memo, name: string) => {\n const item = this.getDropDownMenuItemConfig(name, true);\n if (item) {\n memo.push(item);\n }\n\n return memo;\n }, [])\n : menu.reduce<DropdownMenuItem[]>((memo, item: MenuItem) => {\n if (typeof item === 'string') {\n return memo;\n }\n // custom menu dropdown item filter\n if (item.visible && !item.visible(configItem)) {\n return memo;\n }\n\n const itemHandler = item.handler;\n\n const itemAction =\n typeof itemHandler === 'function'\n ? () => {\n const result = itemHandler(configItem, itemParams, itemState);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {});\n\n memo.push({\n // @ts-expect-error\n text: item.title || i18n(item.id),\n iconStart: item.icon,\n /**\n * if the logic of creating the 'action' field is changed, it is necessary to update the logic of the method shallowEqualDropdownMenu\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061R143}\n */\n action: itemAction,\n className: item.className,\n qa: item.qa,\n });\n\n return memo;\n }, []);\n }\n\n private renderDropdownMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const items = this.getDropdownMenuItems();\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <DropdownMenu\n key={'controls_dropdown'}\n items={items}\n renderSwitcher={(props) => (\n <Button\n {...props}\n view={view}\n size={size}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n extraProps={{'aria-label': i18n('label_more-options')}}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Ellipsis} size={OVERLAY_ICON_SIZE} />\n </Button>\n )}\n onOpenToggle={this.updateDropdownMenuItems}\n popupProps={{\n className: DRAGGABLE_CANCEL_CLASS_NAME,\n }}\n />\n );\n }\n private getCustomLeftOverlayControls = () => {\n // выбираем только items-ы у которых проставлено поле `allWidgetsControls:true`\n // те контролы, которые будут показываться слева от меню\n let controls: OverlayControlItem[] = [];\n const {onItemClick} = this.props;\n\n for (const controlItem of Object.values(this.context.overlayControls || {})) {\n controls = controls.concat(\n (\n (controlItem as OverlayControlItem[]).filter((item) => {\n // если тип виджета-плагина в списке исключаемых, то не показываем такой контрол\n if (item.excludeWidgetsTypes?.includes(this.props.configItem.type)) {\n return false;\n }\n\n return item.visible\n ? item.visible(this.props.configItem)\n : item.allWidgetsControls;\n }) || []\n ).map((item) => {\n if (!item?.id) {\n return item;\n }\n return {\n ...item,\n handler:\n typeof item.handler === 'function'\n ? (...args) => {\n const result = item.handler?.(...args);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {}),\n };\n }),\n );\n }\n\n return controls;\n };\n private onCopyItem = () => {\n const {configItem} = this.props;\n const correspondedItemLayout = this.context.getLayoutItem(configItem.id);\n\n let targetInnerId;\n\n if (isItemWithTabs(this.props.configItem)) {\n targetInnerId = resolveItemInnerId({\n item: this.props.configItem,\n itemsStateAndParams: this.context.itemsStateAndParams,\n });\n }\n\n let options: PreparedCopyItemOptions = {\n timestamp: Date.now(),\n data: configItem.data,\n type: configItem.type,\n defaults: configItem.defaults,\n namespace: configItem.namespace,\n layout: {\n w: correspondedItemLayout!.w,\n h: correspondedItemLayout!.h,\n },\n targetId: this.props.configItem.id,\n targetInnerId,\n };\n\n if (this.context.context?.getPreparedCopyItemOptions) {\n console.warn?.(\n '`context.getPreparedCopyItemOptions` is deprecated. Please use `getPreparedCopyItemOptions` prop instead',\n );\n }\n\n const getPreparedCopyItemOptions =\n this.context?.getPreparedCopyItemOptions ??\n this.context.context?.getPreparedCopyItemOptions;\n\n if (typeof getPreparedCopyItemOptions === 'function') {\n options = getPreparedCopyItemOptions(options);\n }\n\n try {\n localStorage.setItem(COPIED_WIDGET_STORE_KEY, JSON.stringify(options));\n this.context.onCopyFulfill?.(null, options);\n } catch (e) {\n const error = e instanceof Error ? e : new Error('Unknown error while copying item');\n this.context.onCopyFulfill?.(error);\n }\n // https://stackoverflow.com/questions/35865481/storage-event-not-firing\n window.dispatchEvent(new Event('storage'));\n this.props.onItemClick?.();\n };\n private onEditItem = () => {\n this.context.editItem?.(this.props.configItem);\n this.props.onItemClick?.();\n };\n private onRemoveItem = () => {\n const {id} = this.props.configItem;\n this.context.removeItem(id);\n this.props.onItemClick?.();\n };\n private getControlItemPinStyle(index: number, itemsLength: number) {\n const isOnlyOneItem = itemsLength === 1;\n const isFirstItem = index === 0;\n const isLastItem = index === itemsLength - 1;\n\n if (isOnlyOneItem) {\n return 'round-round';\n }\n\n if (isFirstItem) {\n return 'round-brick';\n }\n\n if (isLastItem) {\n return 'brick-round';\n }\n\n return 'brick-brick';\n }\n private getCustomControlsWithWidgets() {\n const items = this.getItems();\n\n const result = items.map(\n (item: OverlayControlItem, index: number, controlItems: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, controlItems.length),\n );\n const isOnlyOneItem = items.length === 0;\n\n // Добавляем контрол удаления или меню виджета по умолчанию\n result.push(this.renderMenu(isOnlyOneItem));\n\n return result;\n }\n}\n\nexport default OverlayControls;\n"]}
|
|
1
|
+
{"version":3,"file":"OverlayControls.js","sourceRoot":"../../../../src","sources":["components/OverlayControls/OverlayControls.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Ellipsis, Gear, Xmark} from '@gravity-ui/icons';\nimport {\n Button,\n ButtonSize,\n ButtonView,\n DropdownMenu,\n DropdownMenuItem,\n Icon,\n IconProps,\n MenuItemProps,\n} from '@gravity-ui/uikit';\nimport noop from 'lodash/noop';\n\nimport {\n COPIED_WIDGET_STORE_KEY,\n DRAGGABLE_CANCEL_CLASS_NAME,\n MenuItems,\n OVERLAY_CONTROLS_CLASS_NAME,\n OVERLAY_ICON_SIZE,\n} from '../../constants';\nimport {DashkitOvelayControlsContext, OverlayControlsCtxShape} from '../../context';\nimport {i18n} from '../../i18n';\nimport {\n type ConfigItem,\n type ItemParams,\n type ItemState,\n type PluginBase,\n isItemWithTabs,\n resolveItemInnerId,\n} from '../../shared';\nimport {MenuItem, Settings} from '../../typings';\nimport {cn} from '../../utils/cn';\n\nimport './OverlayControls.scss';\n\nconst b = cn(OVERLAY_CONTROLS_CLASS_NAME);\n\nexport enum OverlayControlsPosition {\n TopRight = 'top_right',\n TopLeft = 'top_left',\n BottomRight = 'bottom_right',\n BottomLeft = 'bottom_left',\n}\n\nexport interface OverlayControlItem {\n title?: string;\n icon?: IconProps['data'];\n renderIcon?: (item: ConfigItem) => IconProps['data'];\n iconSize?: number | string;\n handler?: (item: ConfigItem) => void;\n visible?: (item: ConfigItem) => boolean;\n allWidgetsControls?: boolean; // флаг кастомного контрола (без кастомного виджета), которые показываются не в списке меню\n excludeWidgetsTypes?: Array<PluginBase['type']>; // массив с типами виджетов (плагинов), которые исключаем из отображения контрола по настройке allWidgetsControls\n id?: string; // id дефолтного пункта меню для возможноти использования дефолтного action в кастомных контролах\n qa?: string;\n className?: string;\n}\n\nexport interface OverlayCustomControlItem {\n id: string;\n title?: string;\n icon?: MenuItemProps['iconStart'];\n iconSize?: number | string;\n handler?: (item: ConfigItem, params: ItemParams, state: ItemState) => void;\n visible?: (item: ConfigItem) => boolean;\n className?: string;\n qa?: string;\n}\n\ninterface OverlayControlsDefaultProps {\n position: OverlayControlsPosition;\n view: ButtonView;\n size: ButtonSize;\n}\n\ninterface OverlayControlsProps extends OverlayControlsDefaultProps {\n configItem: ConfigItem;\n onItemClick?: () => void | null;\n}\n\ntype PreparedCopyItemOptionsArg = Pick<ConfigItem, 'data' | 'type' | 'defaults' | 'namespace'> & {\n timestamp: number;\n layout: {\n w: number;\n h: number;\n };\n targetId?: string;\n targetInnerId?: string;\n};\n\nexport type PreparedCopyItemOptions<C extends object = {}> = PreparedCopyItemOptionsArg & {\n copyContext?: C;\n};\n\ntype OverlayControlsCtx = React.Context<OverlayControlsCtxShape>;\n\nconst DEFAULT_DROPDOWN_MENU = [MenuItems.Copy, MenuItems.Delete];\n\nclass OverlayControls extends React.Component<OverlayControlsProps> {\n static contextType = DashkitOvelayControlsContext;\n static defaultProps: OverlayControlsDefaultProps = {\n position: OverlayControlsPosition.TopRight,\n view: 'flat',\n size: 'm',\n };\n context!: React.ContextType<OverlayControlsCtx>;\n\n state = {\n dropdownMenuItems: [] as DropdownMenuItem[],\n };\n\n componentDidMount() {\n this.updateDropdownMenuItems();\n }\n\n componentDidUpdate() {\n this.updateDropdownMenuItems();\n }\n\n render() {\n const {position} = this.props;\n const items = this.getItems();\n const hasCustomControlsWithWidgets = items.length > 0;\n\n const controls = hasCustomControlsWithWidgets\n ? this.getCustomControlsWithWidgets()\n : this.renderControls();\n\n return <div className={b({position}, [DRAGGABLE_CANCEL_CLASS_NAME])}>{controls}</div>;\n }\n\n private shallowEqualDropdownMenu(menuA: DropdownMenuItem[], menuB: DropdownMenuItem[]) {\n return (\n menuA.length === menuB.length &&\n menuA.every((itemA, index) => {\n const itemB = menuB[index];\n\n if (!itemB) {\n return false;\n }\n\n return Object.entries(itemA).every(\n ([key, value]) =>\n /**\n * field 'action' is new every time\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061L297}\n */\n key === 'action' || itemB[key as keyof DropdownMenuItem] === value,\n );\n })\n );\n }\n\n private updateDropdownMenuItems = () => {\n const items = this.getDropdownMenuItems();\n if (!this.shallowEqualDropdownMenu(items, this.state.dropdownMenuItems)) {\n this.setState({dropdownMenuItems: items});\n }\n };\n\n private getItems = () => {\n const {overlayControls} = this.context;\n const {configItem} = this.props;\n\n return (overlayControls && overlayControls[configItem.type]) || [];\n };\n\n private renderControlsItem = (item: OverlayControlItem, index: number, length: number) => {\n const {view, size, onItemClick} = this.props;\n const {title, handler, icon, renderIcon, iconSize, qa, className} = item;\n\n const iconData = renderIcon ? renderIcon(this.props.configItem) : icon;\n\n const onItemClickHandler = typeof handler === 'function' ? handler : noop;\n return (\n <Button\n key={`control_${index}`}\n view={view}\n size={size}\n title={title}\n pin={this.getControlItemPinStyle(index, length)}\n onClick={() => {\n onItemClickHandler(this.props.configItem);\n onItemClick?.();\n }}\n className={className}\n qa={qa}\n >\n <Icon data={iconData || Gear} size={icon ? iconSize : OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private getDropDownMenuItemConfig(menuName: string, isDefaultMenu?: boolean) {\n switch (menuName) {\n case MenuItems.Copy: {\n return {\n action: this.onCopyItem,\n text: i18n('label_copy'),\n };\n }\n case MenuItems.Delete: {\n return {\n action: this.onRemoveItem,\n text: i18n('label_delete'),\n };\n }\n case MenuItems.Settings: {\n // для дефолтного состояния меню нет настройки settings, а для кастомного можно использовать дефолтный action и text\n if (isDefaultMenu) {\n return null;\n }\n return {\n action: this.onEditItem,\n text: i18n('label_settings'),\n };\n }\n }\n return null;\n }\n\n private getDefaultControls = () => {\n const {view, size} = this.props;\n\n if (this.context.overlayControls === null) {\n return null;\n }\n\n return (\n <Button\n key={'control_default'}\n view={view}\n size={size}\n title={i18n('label_settings')}\n pin=\"round-brick\"\n onClick={this.onEditItem}\n qa=\"dashkit-overlay-control-settings\"\n >\n <Icon data={Gear} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private renderControls() {\n const customLeftControls = this.getCustomLeftOverlayControls();\n const hasCustomOverlayLeftControls = Boolean(customLeftControls.length);\n\n const controls = hasCustomOverlayLeftControls\n ? customLeftControls.map(\n (item: OverlayControlItem, index: number, items: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, items.length + 1),\n )\n : this.getDefaultControls();\n\n const menu = this.renderMenu(controls === null);\n\n return (\n <div\n className={b('default-controls', {\n 'with-custom-left': hasCustomOverlayLeftControls,\n })}\n >\n {controls}\n {menu}\n </div>\n );\n }\n private renderMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const dropdown = this.renderDropdownMenu(isOnlyOneItem);\n\n if (dropdown) {\n return dropdown;\n }\n\n return (\n <Button\n key={'delete-control'}\n view={view}\n size={size}\n title={i18n('label_delete')}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n onClick={this.onRemoveItem}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Xmark} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n }\n\n private isDefaultMenu(menu: Settings['menu']) {\n return menu?.every((item) =>\n (Object.values(MenuItems) as Array<string>).includes(String(item)),\n );\n }\n private getDropdownMenuItems(): DropdownMenuItem[] {\n const {onItemClick} = this.props;\n const {menu: contextMenu, itemsParams, itemsState} = this.context;\n\n const configItem = this.props.configItem;\n const itemParams = itemsParams[configItem.id];\n const itemState = itemsState?.[configItem.id] || {};\n\n const menu = contextMenu && contextMenu.length > 0 ? contextMenu : DEFAULT_DROPDOWN_MENU;\n\n const isDefaultMenu = this.isDefaultMenu(menu);\n\n return isDefaultMenu\n ? ((menu || []) as string[]).reduce<DropdownMenuItem[]>((memo, name: string) => {\n const item = this.getDropDownMenuItemConfig(name, true);\n if (item) {\n memo.push(item);\n }\n\n return memo;\n }, [])\n : menu.reduce<DropdownMenuItem[]>((memo, item: MenuItem) => {\n if (typeof item === 'string') {\n return memo;\n }\n // custom menu dropdown item filter\n if (item.visible && !item.visible(configItem)) {\n return memo;\n }\n\n const itemHandler = item.handler;\n\n const itemAction =\n typeof itemHandler === 'function'\n ? () => {\n const result = itemHandler(configItem, itemParams, itemState);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {});\n\n memo.push({\n // @ts-expect-error\n text: item.title || i18n(item.id),\n iconStart: item.icon,\n /**\n * if the logic of creating the 'action' field is changed, it is necessary to update the logic of the method shallowEqualDropdownMenu\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061R143}\n */\n action: itemAction,\n className: item.className,\n qa: item.qa,\n });\n\n return memo;\n }, []);\n }\n\n private renderDropdownMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const items = this.getDropdownMenuItems();\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <DropdownMenu\n key={'controls_dropdown'}\n items={items}\n renderSwitcher={(props) => (\n <Button\n {...props}\n view={view}\n size={size}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n extraProps={{'aria-label': i18n('label_more-options')}}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Ellipsis} size={OVERLAY_ICON_SIZE} />\n </Button>\n )}\n onOpenToggle={this.updateDropdownMenuItems}\n popupProps={{\n className: DRAGGABLE_CANCEL_CLASS_NAME,\n }}\n />\n );\n }\n private getCustomLeftOverlayControls = () => {\n // выбираем только items-ы у которых проставлено поле `allWidgetsControls:true`\n // те контролы, которые будут показываться слева от меню\n let controls: OverlayControlItem[] = [];\n const {onItemClick} = this.props;\n\n for (const controlItem of Object.values(this.context.overlayControls || {})) {\n controls = controls.concat(\n (\n (controlItem as OverlayControlItem[]).filter((item) => {\n // если тип виджета-плагина в списке исключаемых, то не показываем такой контрол\n if (item.excludeWidgetsTypes?.includes(this.props.configItem.type)) {\n return false;\n }\n\n return item.visible\n ? item.visible(this.props.configItem)\n : item.allWidgetsControls;\n }) || []\n ).map((item) => {\n if (!item?.id) {\n return item;\n }\n return {\n ...item,\n handler:\n typeof item.handler === 'function'\n ? (...args) => {\n const result = item.handler?.(...args);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {}),\n };\n }),\n );\n }\n\n return controls;\n };\n private onCopyItem = () => {\n const {configItem} = this.props;\n const correspondedItemLayout = this.context.getLayoutItem(configItem.id);\n\n let targetInnerId;\n\n if (isItemWithTabs(this.props.configItem)) {\n targetInnerId = resolveItemInnerId({\n item: this.props.configItem,\n itemsStateAndParams: this.context.itemsStateAndParams,\n });\n }\n\n let options: PreparedCopyItemOptions = {\n timestamp: Date.now(),\n data: configItem.data,\n type: configItem.type,\n defaults: configItem.defaults,\n namespace: configItem.namespace,\n layout: {\n w: correspondedItemLayout!.w,\n h: correspondedItemLayout!.h,\n },\n targetId: this.props.configItem.id,\n targetInnerId,\n };\n\n if (this.context.context?.getPreparedCopyItemOptions) {\n console.warn?.(\n '`context.getPreparedCopyItemOptions` is deprecated. Please use `getPreparedCopyItemOptions` prop instead',\n );\n }\n\n const getPreparedCopyItemOptions =\n this.context?.getPreparedCopyItemOptions ??\n this.context.context?.getPreparedCopyItemOptions;\n\n if (typeof getPreparedCopyItemOptions === 'function') {\n options = getPreparedCopyItemOptions(options);\n }\n\n try {\n localStorage.setItem(COPIED_WIDGET_STORE_KEY, JSON.stringify(options));\n this.context.onCopyFulfill?.(null, options);\n } catch (e) {\n const error = e instanceof Error ? e : new Error('Unknown error while copying item');\n this.context.onCopyFulfill?.(error);\n }\n // https://stackoverflow.com/questions/35865481/storage-event-not-firing\n window.dispatchEvent(new Event('storage'));\n this.props.onItemClick?.();\n };\n private onEditItem = () => {\n this.context.editItem?.(this.props.configItem);\n this.props.onItemClick?.();\n };\n private onRemoveItem = () => {\n const {id} = this.props.configItem;\n this.context.removeItem(id);\n this.props.onItemClick?.();\n };\n private getControlItemPinStyle(index: number, itemsLength: number) {\n const isOnlyOneItem = itemsLength === 1;\n const isFirstItem = index === 0;\n const isLastItem = index === itemsLength - 1;\n\n if (isOnlyOneItem) {\n return 'round-round';\n }\n\n if (isFirstItem) {\n return 'round-brick';\n }\n\n if (isLastItem) {\n return 'brick-round';\n }\n\n return 'brick-brick';\n }\n private getCustomControlsWithWidgets() {\n const items = this.getItems();\n\n const result = items.map(\n (item: OverlayControlItem, index: number, controlItems: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, controlItems.length),\n );\n const isOnlyOneItem = items.length === 0;\n\n // Добавляем контрол удаления или меню виджета по умолчанию\n result.push(this.renderMenu(isOnlyOneItem));\n\n return result;\n }\n}\n\nexport default OverlayControls;\n"]}
|
|
@@ -12,6 +12,7 @@ export declare enum OverlayControlsPosition {
|
|
|
12
12
|
export interface OverlayControlItem {
|
|
13
13
|
title?: string;
|
|
14
14
|
icon?: IconProps['data'];
|
|
15
|
+
renderIcon?: (item: ConfigItem) => IconProps['data'];
|
|
15
16
|
iconSize?: number | string;
|
|
16
17
|
handler?: (item: ConfigItem) => void;
|
|
17
18
|
visible?: (item: ConfigItem) => boolean;
|
|
@@ -19,6 +20,7 @@ export interface OverlayControlItem {
|
|
|
19
20
|
excludeWidgetsTypes?: Array<PluginBase['type']>;
|
|
20
21
|
id?: string;
|
|
21
22
|
qa?: string;
|
|
23
|
+
className?: string;
|
|
22
24
|
}
|
|
23
25
|
export interface OverlayCustomControlItem {
|
|
24
26
|
id: string;
|
|
@@ -36,13 +36,14 @@ class OverlayControls extends React.Component {
|
|
|
36
36
|
};
|
|
37
37
|
this.renderControlsItem = (item, index, length) => {
|
|
38
38
|
const { view, size, onItemClick } = this.props;
|
|
39
|
-
const { title, handler, icon, iconSize, qa } = item;
|
|
39
|
+
const { title, handler, icon, renderIcon, iconSize, qa, className } = item;
|
|
40
|
+
const iconData = renderIcon ? renderIcon(this.props.configItem) : icon;
|
|
40
41
|
const onItemClickHandler = typeof handler === 'function' ? handler : noop;
|
|
41
42
|
return (React.createElement(Button, { key: `control_${index}`, view: view, size: size, title: title, pin: this.getControlItemPinStyle(index, length), onClick: () => {
|
|
42
43
|
onItemClickHandler(this.props.configItem);
|
|
43
44
|
onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick();
|
|
44
|
-
}, qa: qa },
|
|
45
|
-
React.createElement(Icon, { data:
|
|
45
|
+
}, className: className, qa: qa },
|
|
46
|
+
React.createElement(Icon, { data: iconData || Gear, size: icon ? iconSize : OVERLAY_ICON_SIZE })));
|
|
46
47
|
};
|
|
47
48
|
this.getDefaultControls = () => {
|
|
48
49
|
const { view, size } = this.props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayControls.js","sourceRoot":"../../../../src","sources":["components/OverlayControls/OverlayControls.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Ellipsis, Gear, Xmark} from '@gravity-ui/icons';\nimport {\n Button,\n ButtonSize,\n ButtonView,\n DropdownMenu,\n DropdownMenuItem,\n Icon,\n IconProps,\n MenuItemProps,\n} from '@gravity-ui/uikit';\nimport noop from 'lodash/noop';\n\nimport {\n COPIED_WIDGET_STORE_KEY,\n DRAGGABLE_CANCEL_CLASS_NAME,\n MenuItems,\n OVERLAY_CONTROLS_CLASS_NAME,\n OVERLAY_ICON_SIZE,\n} from '../../constants';\nimport {DashkitOvelayControlsContext, OverlayControlsCtxShape} from '../../context';\nimport {i18n} from '../../i18n';\nimport {\n type ConfigItem,\n type ItemParams,\n type ItemState,\n type PluginBase,\n isItemWithTabs,\n resolveItemInnerId,\n} from '../../shared';\nimport {MenuItem, Settings} from '../../typings';\nimport {cn} from '../../utils/cn';\n\nimport './OverlayControls.scss';\n\nconst b = cn(OVERLAY_CONTROLS_CLASS_NAME);\n\nexport enum OverlayControlsPosition {\n TopRight = 'top_right',\n TopLeft = 'top_left',\n BottomRight = 'bottom_right',\n BottomLeft = 'bottom_left',\n}\n\nexport interface OverlayControlItem {\n title?: string;\n icon?: IconProps['data'];\n iconSize?: number | string;\n handler?: (item: ConfigItem) => void;\n visible?: (item: ConfigItem) => boolean;\n allWidgetsControls?: boolean; // флаг кастомного контрола (без кастомного виджета), которые показываются не в списке меню\n excludeWidgetsTypes?: Array<PluginBase['type']>; // массив с типами виджетов (плагинов), которые исключаем из отображения контрола по настройке allWidgetsControls\n id?: string; // id дефолтного пункта меню для возможноти использования дефолтного action в кастомных контролах\n qa?: string;\n}\n\nexport interface OverlayCustomControlItem {\n id: string;\n title?: string;\n icon?: MenuItemProps['iconStart'];\n iconSize?: number | string;\n handler?: (item: ConfigItem, params: ItemParams, state: ItemState) => void;\n visible?: (item: ConfigItem) => boolean;\n className?: string;\n qa?: string;\n}\n\ninterface OverlayControlsDefaultProps {\n position: OverlayControlsPosition;\n view: ButtonView;\n size: ButtonSize;\n}\n\ninterface OverlayControlsProps extends OverlayControlsDefaultProps {\n configItem: ConfigItem;\n onItemClick?: () => void | null;\n}\n\ntype PreparedCopyItemOptionsArg = Pick<ConfigItem, 'data' | 'type' | 'defaults' | 'namespace'> & {\n timestamp: number;\n layout: {\n w: number;\n h: number;\n };\n targetId?: string;\n targetInnerId?: string;\n};\n\nexport type PreparedCopyItemOptions<C extends object = {}> = PreparedCopyItemOptionsArg & {\n copyContext?: C;\n};\n\ntype OverlayControlsCtx = React.Context<OverlayControlsCtxShape>;\n\nconst DEFAULT_DROPDOWN_MENU = [MenuItems.Copy, MenuItems.Delete];\n\nclass OverlayControls extends React.Component<OverlayControlsProps> {\n static contextType = DashkitOvelayControlsContext;\n static defaultProps: OverlayControlsDefaultProps = {\n position: OverlayControlsPosition.TopRight,\n view: 'flat',\n size: 'm',\n };\n context!: React.ContextType<OverlayControlsCtx>;\n\n state = {\n dropdownMenuItems: [] as DropdownMenuItem[],\n };\n\n componentDidMount() {\n this.updateDropdownMenuItems();\n }\n\n componentDidUpdate() {\n this.updateDropdownMenuItems();\n }\n\n render() {\n const {position} = this.props;\n const items = this.getItems();\n const hasCustomControlsWithWidgets = items.length > 0;\n\n const controls = hasCustomControlsWithWidgets\n ? this.getCustomControlsWithWidgets()\n : this.renderControls();\n\n return <div className={b({position}, [DRAGGABLE_CANCEL_CLASS_NAME])}>{controls}</div>;\n }\n\n private shallowEqualDropdownMenu(menuA: DropdownMenuItem[], menuB: DropdownMenuItem[]) {\n return (\n menuA.length === menuB.length &&\n menuA.every((itemA, index) => {\n const itemB = menuB[index];\n\n if (!itemB) {\n return false;\n }\n\n return Object.entries(itemA).every(\n ([key, value]) =>\n /**\n * field 'action' is new every time\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061L297}\n */\n key === 'action' || itemB[key as keyof DropdownMenuItem] === value,\n );\n })\n );\n }\n\n private updateDropdownMenuItems = () => {\n const items = this.getDropdownMenuItems();\n if (!this.shallowEqualDropdownMenu(items, this.state.dropdownMenuItems)) {\n this.setState({dropdownMenuItems: items});\n }\n };\n\n private getItems = () => {\n const {overlayControls} = this.context;\n const {configItem} = this.props;\n\n return (overlayControls && overlayControls[configItem.type]) || [];\n };\n\n private renderControlsItem = (item: OverlayControlItem, index: number, length: number) => {\n const {view, size, onItemClick} = this.props;\n const {title, handler, icon, iconSize, qa} = item;\n\n const onItemClickHandler = typeof handler === 'function' ? handler : noop;\n return (\n <Button\n key={`control_${index}`}\n view={view}\n size={size}\n title={title}\n pin={this.getControlItemPinStyle(index, length)}\n onClick={() => {\n onItemClickHandler(this.props.configItem);\n onItemClick?.();\n }}\n qa={qa}\n >\n <Icon data={icon || Gear} size={icon ? iconSize : OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private getDropDownMenuItemConfig(menuName: string, isDefaultMenu?: boolean) {\n switch (menuName) {\n case MenuItems.Copy: {\n return {\n action: this.onCopyItem,\n text: i18n('label_copy'),\n };\n }\n case MenuItems.Delete: {\n return {\n action: this.onRemoveItem,\n text: i18n('label_delete'),\n };\n }\n case MenuItems.Settings: {\n // для дефолтного состояния меню нет настройки settings, а для кастомного можно использовать дефолтный action и text\n if (isDefaultMenu) {\n return null;\n }\n return {\n action: this.onEditItem,\n text: i18n('label_settings'),\n };\n }\n }\n return null;\n }\n\n private getDefaultControls = () => {\n const {view, size} = this.props;\n\n if (this.context.overlayControls === null) {\n return null;\n }\n\n return (\n <Button\n key={'control_default'}\n view={view}\n size={size}\n title={i18n('label_settings')}\n pin=\"round-brick\"\n onClick={this.onEditItem}\n qa=\"dashkit-overlay-control-settings\"\n >\n <Icon data={Gear} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private renderControls() {\n const customLeftControls = this.getCustomLeftOverlayControls();\n const hasCustomOverlayLeftControls = Boolean(customLeftControls.length);\n\n const controls = hasCustomOverlayLeftControls\n ? customLeftControls.map(\n (item: OverlayControlItem, index: number, items: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, items.length + 1),\n )\n : this.getDefaultControls();\n\n const menu = this.renderMenu(controls === null);\n\n return (\n <div\n className={b('default-controls', {\n 'with-custom-left': hasCustomOverlayLeftControls,\n })}\n >\n {controls}\n {menu}\n </div>\n );\n }\n private renderMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const dropdown = this.renderDropdownMenu(isOnlyOneItem);\n\n if (dropdown) {\n return dropdown;\n }\n\n return (\n <Button\n key={'delete-control'}\n view={view}\n size={size}\n title={i18n('label_delete')}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n onClick={this.onRemoveItem}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Xmark} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n }\n\n private isDefaultMenu(menu: Settings['menu']) {\n return menu?.every((item) =>\n (Object.values(MenuItems) as Array<string>).includes(String(item)),\n );\n }\n private getDropdownMenuItems(): DropdownMenuItem[] {\n const {onItemClick} = this.props;\n const {menu: contextMenu, itemsParams, itemsState} = this.context;\n\n const configItem = this.props.configItem;\n const itemParams = itemsParams[configItem.id];\n const itemState = itemsState?.[configItem.id] || {};\n\n const menu = contextMenu && contextMenu.length > 0 ? contextMenu : DEFAULT_DROPDOWN_MENU;\n\n const isDefaultMenu = this.isDefaultMenu(menu);\n\n return isDefaultMenu\n ? ((menu || []) as string[]).reduce<DropdownMenuItem[]>((memo, name: string) => {\n const item = this.getDropDownMenuItemConfig(name, true);\n if (item) {\n memo.push(item);\n }\n\n return memo;\n }, [])\n : menu.reduce<DropdownMenuItem[]>((memo, item: MenuItem) => {\n if (typeof item === 'string') {\n return memo;\n }\n // custom menu dropdown item filter\n if (item.visible && !item.visible(configItem)) {\n return memo;\n }\n\n const itemHandler = item.handler;\n\n const itemAction =\n typeof itemHandler === 'function'\n ? () => {\n const result = itemHandler(configItem, itemParams, itemState);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {});\n\n memo.push({\n // @ts-expect-error\n text: item.title || i18n(item.id),\n iconStart: item.icon,\n /**\n * if the logic of creating the 'action' field is changed, it is necessary to update the logic of the method shallowEqualDropdownMenu\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061R143}\n */\n action: itemAction,\n className: item.className,\n qa: item.qa,\n });\n\n return memo;\n }, []);\n }\n\n private renderDropdownMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const items = this.getDropdownMenuItems();\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <DropdownMenu\n key={'controls_dropdown'}\n items={items}\n renderSwitcher={(props) => (\n <Button\n {...props}\n view={view}\n size={size}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n extraProps={{'aria-label': i18n('label_more-options')}}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Ellipsis} size={OVERLAY_ICON_SIZE} />\n </Button>\n )}\n onOpenToggle={this.updateDropdownMenuItems}\n popupProps={{\n className: DRAGGABLE_CANCEL_CLASS_NAME,\n }}\n />\n );\n }\n private getCustomLeftOverlayControls = () => {\n // выбираем только items-ы у которых проставлено поле `allWidgetsControls:true`\n // те контролы, которые будут показываться слева от меню\n let controls: OverlayControlItem[] = [];\n const {onItemClick} = this.props;\n\n for (const controlItem of Object.values(this.context.overlayControls || {})) {\n controls = controls.concat(\n (\n (controlItem as OverlayControlItem[]).filter((item) => {\n // если тип виджета-плагина в списке исключаемых, то не показываем такой контрол\n if (item.excludeWidgetsTypes?.includes(this.props.configItem.type)) {\n return false;\n }\n\n return item.visible\n ? item.visible(this.props.configItem)\n : item.allWidgetsControls;\n }) || []\n ).map((item) => {\n if (!item?.id) {\n return item;\n }\n return {\n ...item,\n handler:\n typeof item.handler === 'function'\n ? (...args) => {\n const result = item.handler?.(...args);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {}),\n };\n }),\n );\n }\n\n return controls;\n };\n private onCopyItem = () => {\n const {configItem} = this.props;\n const correspondedItemLayout = this.context.getLayoutItem(configItem.id);\n\n let targetInnerId;\n\n if (isItemWithTabs(this.props.configItem)) {\n targetInnerId = resolveItemInnerId({\n item: this.props.configItem,\n itemsStateAndParams: this.context.itemsStateAndParams,\n });\n }\n\n let options: PreparedCopyItemOptions = {\n timestamp: Date.now(),\n data: configItem.data,\n type: configItem.type,\n defaults: configItem.defaults,\n namespace: configItem.namespace,\n layout: {\n w: correspondedItemLayout!.w,\n h: correspondedItemLayout!.h,\n },\n targetId: this.props.configItem.id,\n targetInnerId,\n };\n\n if (this.context.context?.getPreparedCopyItemOptions) {\n console.warn?.(\n '`context.getPreparedCopyItemOptions` is deprecated. Please use `getPreparedCopyItemOptions` prop instead',\n );\n }\n\n const getPreparedCopyItemOptions =\n this.context?.getPreparedCopyItemOptions ??\n this.context.context?.getPreparedCopyItemOptions;\n\n if (typeof getPreparedCopyItemOptions === 'function') {\n options = getPreparedCopyItemOptions(options);\n }\n\n try {\n localStorage.setItem(COPIED_WIDGET_STORE_KEY, JSON.stringify(options));\n this.context.onCopyFulfill?.(null, options);\n } catch (e) {\n const error = e instanceof Error ? e : new Error('Unknown error while copying item');\n this.context.onCopyFulfill?.(error);\n }\n // https://stackoverflow.com/questions/35865481/storage-event-not-firing\n window.dispatchEvent(new Event('storage'));\n this.props.onItemClick?.();\n };\n private onEditItem = () => {\n this.context.editItem?.(this.props.configItem);\n this.props.onItemClick?.();\n };\n private onRemoveItem = () => {\n const {id} = this.props.configItem;\n this.context.removeItem(id);\n this.props.onItemClick?.();\n };\n private getControlItemPinStyle(index: number, itemsLength: number) {\n const isOnlyOneItem = itemsLength === 1;\n const isFirstItem = index === 0;\n const isLastItem = index === itemsLength - 1;\n\n if (isOnlyOneItem) {\n return 'round-round';\n }\n\n if (isFirstItem) {\n return 'round-brick';\n }\n\n if (isLastItem) {\n return 'brick-round';\n }\n\n return 'brick-brick';\n }\n private getCustomControlsWithWidgets() {\n const items = this.getItems();\n\n const result = items.map(\n (item: OverlayControlItem, index: number, controlItems: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, controlItems.length),\n );\n const isOnlyOneItem = items.length === 0;\n\n // Добавляем контрол удаления или меню виджета по умолчанию\n result.push(this.renderMenu(isOnlyOneItem));\n\n return result;\n }\n}\n\nexport default OverlayControls;\n"]}
|
|
1
|
+
{"version":3,"file":"OverlayControls.js","sourceRoot":"../../../../src","sources":["components/OverlayControls/OverlayControls.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Ellipsis, Gear, Xmark} from '@gravity-ui/icons';\nimport {\n Button,\n ButtonSize,\n ButtonView,\n DropdownMenu,\n DropdownMenuItem,\n Icon,\n IconProps,\n MenuItemProps,\n} from '@gravity-ui/uikit';\nimport noop from 'lodash/noop';\n\nimport {\n COPIED_WIDGET_STORE_KEY,\n DRAGGABLE_CANCEL_CLASS_NAME,\n MenuItems,\n OVERLAY_CONTROLS_CLASS_NAME,\n OVERLAY_ICON_SIZE,\n} from '../../constants';\nimport {DashkitOvelayControlsContext, OverlayControlsCtxShape} from '../../context';\nimport {i18n} from '../../i18n';\nimport {\n type ConfigItem,\n type ItemParams,\n type ItemState,\n type PluginBase,\n isItemWithTabs,\n resolveItemInnerId,\n} from '../../shared';\nimport {MenuItem, Settings} from '../../typings';\nimport {cn} from '../../utils/cn';\n\nimport './OverlayControls.scss';\n\nconst b = cn(OVERLAY_CONTROLS_CLASS_NAME);\n\nexport enum OverlayControlsPosition {\n TopRight = 'top_right',\n TopLeft = 'top_left',\n BottomRight = 'bottom_right',\n BottomLeft = 'bottom_left',\n}\n\nexport interface OverlayControlItem {\n title?: string;\n icon?: IconProps['data'];\n renderIcon?: (item: ConfigItem) => IconProps['data'];\n iconSize?: number | string;\n handler?: (item: ConfigItem) => void;\n visible?: (item: ConfigItem) => boolean;\n allWidgetsControls?: boolean; // флаг кастомного контрола (без кастомного виджета), которые показываются не в списке меню\n excludeWidgetsTypes?: Array<PluginBase['type']>; // массив с типами виджетов (плагинов), которые исключаем из отображения контрола по настройке allWidgetsControls\n id?: string; // id дефолтного пункта меню для возможноти использования дефолтного action в кастомных контролах\n qa?: string;\n className?: string;\n}\n\nexport interface OverlayCustomControlItem {\n id: string;\n title?: string;\n icon?: MenuItemProps['iconStart'];\n iconSize?: number | string;\n handler?: (item: ConfigItem, params: ItemParams, state: ItemState) => void;\n visible?: (item: ConfigItem) => boolean;\n className?: string;\n qa?: string;\n}\n\ninterface OverlayControlsDefaultProps {\n position: OverlayControlsPosition;\n view: ButtonView;\n size: ButtonSize;\n}\n\ninterface OverlayControlsProps extends OverlayControlsDefaultProps {\n configItem: ConfigItem;\n onItemClick?: () => void | null;\n}\n\ntype PreparedCopyItemOptionsArg = Pick<ConfigItem, 'data' | 'type' | 'defaults' | 'namespace'> & {\n timestamp: number;\n layout: {\n w: number;\n h: number;\n };\n targetId?: string;\n targetInnerId?: string;\n};\n\nexport type PreparedCopyItemOptions<C extends object = {}> = PreparedCopyItemOptionsArg & {\n copyContext?: C;\n};\n\ntype OverlayControlsCtx = React.Context<OverlayControlsCtxShape>;\n\nconst DEFAULT_DROPDOWN_MENU = [MenuItems.Copy, MenuItems.Delete];\n\nclass OverlayControls extends React.Component<OverlayControlsProps> {\n static contextType = DashkitOvelayControlsContext;\n static defaultProps: OverlayControlsDefaultProps = {\n position: OverlayControlsPosition.TopRight,\n view: 'flat',\n size: 'm',\n };\n context!: React.ContextType<OverlayControlsCtx>;\n\n state = {\n dropdownMenuItems: [] as DropdownMenuItem[],\n };\n\n componentDidMount() {\n this.updateDropdownMenuItems();\n }\n\n componentDidUpdate() {\n this.updateDropdownMenuItems();\n }\n\n render() {\n const {position} = this.props;\n const items = this.getItems();\n const hasCustomControlsWithWidgets = items.length > 0;\n\n const controls = hasCustomControlsWithWidgets\n ? this.getCustomControlsWithWidgets()\n : this.renderControls();\n\n return <div className={b({position}, [DRAGGABLE_CANCEL_CLASS_NAME])}>{controls}</div>;\n }\n\n private shallowEqualDropdownMenu(menuA: DropdownMenuItem[], menuB: DropdownMenuItem[]) {\n return (\n menuA.length === menuB.length &&\n menuA.every((itemA, index) => {\n const itemB = menuB[index];\n\n if (!itemB) {\n return false;\n }\n\n return Object.entries(itemA).every(\n ([key, value]) =>\n /**\n * field 'action' is new every time\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061L297}\n */\n key === 'action' || itemB[key as keyof DropdownMenuItem] === value,\n );\n })\n );\n }\n\n private updateDropdownMenuItems = () => {\n const items = this.getDropdownMenuItems();\n if (!this.shallowEqualDropdownMenu(items, this.state.dropdownMenuItems)) {\n this.setState({dropdownMenuItems: items});\n }\n };\n\n private getItems = () => {\n const {overlayControls} = this.context;\n const {configItem} = this.props;\n\n return (overlayControls && overlayControls[configItem.type]) || [];\n };\n\n private renderControlsItem = (item: OverlayControlItem, index: number, length: number) => {\n const {view, size, onItemClick} = this.props;\n const {title, handler, icon, renderIcon, iconSize, qa, className} = item;\n\n const iconData = renderIcon ? renderIcon(this.props.configItem) : icon;\n\n const onItemClickHandler = typeof handler === 'function' ? handler : noop;\n return (\n <Button\n key={`control_${index}`}\n view={view}\n size={size}\n title={title}\n pin={this.getControlItemPinStyle(index, length)}\n onClick={() => {\n onItemClickHandler(this.props.configItem);\n onItemClick?.();\n }}\n className={className}\n qa={qa}\n >\n <Icon data={iconData || Gear} size={icon ? iconSize : OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private getDropDownMenuItemConfig(menuName: string, isDefaultMenu?: boolean) {\n switch (menuName) {\n case MenuItems.Copy: {\n return {\n action: this.onCopyItem,\n text: i18n('label_copy'),\n };\n }\n case MenuItems.Delete: {\n return {\n action: this.onRemoveItem,\n text: i18n('label_delete'),\n };\n }\n case MenuItems.Settings: {\n // для дефолтного состояния меню нет настройки settings, а для кастомного можно использовать дефолтный action и text\n if (isDefaultMenu) {\n return null;\n }\n return {\n action: this.onEditItem,\n text: i18n('label_settings'),\n };\n }\n }\n return null;\n }\n\n private getDefaultControls = () => {\n const {view, size} = this.props;\n\n if (this.context.overlayControls === null) {\n return null;\n }\n\n return (\n <Button\n key={'control_default'}\n view={view}\n size={size}\n title={i18n('label_settings')}\n pin=\"round-brick\"\n onClick={this.onEditItem}\n qa=\"dashkit-overlay-control-settings\"\n >\n <Icon data={Gear} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private renderControls() {\n const customLeftControls = this.getCustomLeftOverlayControls();\n const hasCustomOverlayLeftControls = Boolean(customLeftControls.length);\n\n const controls = hasCustomOverlayLeftControls\n ? customLeftControls.map(\n (item: OverlayControlItem, index: number, items: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, items.length + 1),\n )\n : this.getDefaultControls();\n\n const menu = this.renderMenu(controls === null);\n\n return (\n <div\n className={b('default-controls', {\n 'with-custom-left': hasCustomOverlayLeftControls,\n })}\n >\n {controls}\n {menu}\n </div>\n );\n }\n private renderMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const dropdown = this.renderDropdownMenu(isOnlyOneItem);\n\n if (dropdown) {\n return dropdown;\n }\n\n return (\n <Button\n key={'delete-control'}\n view={view}\n size={size}\n title={i18n('label_delete')}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n onClick={this.onRemoveItem}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Xmark} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n }\n\n private isDefaultMenu(menu: Settings['menu']) {\n return menu?.every((item) =>\n (Object.values(MenuItems) as Array<string>).includes(String(item)),\n );\n }\n private getDropdownMenuItems(): DropdownMenuItem[] {\n const {onItemClick} = this.props;\n const {menu: contextMenu, itemsParams, itemsState} = this.context;\n\n const configItem = this.props.configItem;\n const itemParams = itemsParams[configItem.id];\n const itemState = itemsState?.[configItem.id] || {};\n\n const menu = contextMenu && contextMenu.length > 0 ? contextMenu : DEFAULT_DROPDOWN_MENU;\n\n const isDefaultMenu = this.isDefaultMenu(menu);\n\n return isDefaultMenu\n ? ((menu || []) as string[]).reduce<DropdownMenuItem[]>((memo, name: string) => {\n const item = this.getDropDownMenuItemConfig(name, true);\n if (item) {\n memo.push(item);\n }\n\n return memo;\n }, [])\n : menu.reduce<DropdownMenuItem[]>((memo, item: MenuItem) => {\n if (typeof item === 'string') {\n return memo;\n }\n // custom menu dropdown item filter\n if (item.visible && !item.visible(configItem)) {\n return memo;\n }\n\n const itemHandler = item.handler;\n\n const itemAction =\n typeof itemHandler === 'function'\n ? () => {\n const result = itemHandler(configItem, itemParams, itemState);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {});\n\n memo.push({\n // @ts-expect-error\n text: item.title || i18n(item.id),\n iconStart: item.icon,\n /**\n * if the logic of creating the 'action' field is changed, it is necessary to update the logic of the method shallowEqualDropdownMenu\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061R143}\n */\n action: itemAction,\n className: item.className,\n qa: item.qa,\n });\n\n return memo;\n }, []);\n }\n\n private renderDropdownMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const items = this.getDropdownMenuItems();\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <DropdownMenu\n key={'controls_dropdown'}\n items={items}\n renderSwitcher={(props) => (\n <Button\n {...props}\n view={view}\n size={size}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n extraProps={{'aria-label': i18n('label_more-options')}}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Ellipsis} size={OVERLAY_ICON_SIZE} />\n </Button>\n )}\n onOpenToggle={this.updateDropdownMenuItems}\n popupProps={{\n className: DRAGGABLE_CANCEL_CLASS_NAME,\n }}\n />\n );\n }\n private getCustomLeftOverlayControls = () => {\n // выбираем только items-ы у которых проставлено поле `allWidgetsControls:true`\n // те контролы, которые будут показываться слева от меню\n let controls: OverlayControlItem[] = [];\n const {onItemClick} = this.props;\n\n for (const controlItem of Object.values(this.context.overlayControls || {})) {\n controls = controls.concat(\n (\n (controlItem as OverlayControlItem[]).filter((item) => {\n // если тип виджета-плагина в списке исключаемых, то не показываем такой контрол\n if (item.excludeWidgetsTypes?.includes(this.props.configItem.type)) {\n return false;\n }\n\n return item.visible\n ? item.visible(this.props.configItem)\n : item.allWidgetsControls;\n }) || []\n ).map((item) => {\n if (!item?.id) {\n return item;\n }\n return {\n ...item,\n handler:\n typeof item.handler === 'function'\n ? (...args) => {\n const result = item.handler?.(...args);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {}),\n };\n }),\n );\n }\n\n return controls;\n };\n private onCopyItem = () => {\n const {configItem} = this.props;\n const correspondedItemLayout = this.context.getLayoutItem(configItem.id);\n\n let targetInnerId;\n\n if (isItemWithTabs(this.props.configItem)) {\n targetInnerId = resolveItemInnerId({\n item: this.props.configItem,\n itemsStateAndParams: this.context.itemsStateAndParams,\n });\n }\n\n let options: PreparedCopyItemOptions = {\n timestamp: Date.now(),\n data: configItem.data,\n type: configItem.type,\n defaults: configItem.defaults,\n namespace: configItem.namespace,\n layout: {\n w: correspondedItemLayout!.w,\n h: correspondedItemLayout!.h,\n },\n targetId: this.props.configItem.id,\n targetInnerId,\n };\n\n if (this.context.context?.getPreparedCopyItemOptions) {\n console.warn?.(\n '`context.getPreparedCopyItemOptions` is deprecated. Please use `getPreparedCopyItemOptions` prop instead',\n );\n }\n\n const getPreparedCopyItemOptions =\n this.context?.getPreparedCopyItemOptions ??\n this.context.context?.getPreparedCopyItemOptions;\n\n if (typeof getPreparedCopyItemOptions === 'function') {\n options = getPreparedCopyItemOptions(options);\n }\n\n try {\n localStorage.setItem(COPIED_WIDGET_STORE_KEY, JSON.stringify(options));\n this.context.onCopyFulfill?.(null, options);\n } catch (e) {\n const error = e instanceof Error ? e : new Error('Unknown error while copying item');\n this.context.onCopyFulfill?.(error);\n }\n // https://stackoverflow.com/questions/35865481/storage-event-not-firing\n window.dispatchEvent(new Event('storage'));\n this.props.onItemClick?.();\n };\n private onEditItem = () => {\n this.context.editItem?.(this.props.configItem);\n this.props.onItemClick?.();\n };\n private onRemoveItem = () => {\n const {id} = this.props.configItem;\n this.context.removeItem(id);\n this.props.onItemClick?.();\n };\n private getControlItemPinStyle(index: number, itemsLength: number) {\n const isOnlyOneItem = itemsLength === 1;\n const isFirstItem = index === 0;\n const isLastItem = index === itemsLength - 1;\n\n if (isOnlyOneItem) {\n return 'round-round';\n }\n\n if (isFirstItem) {\n return 'round-brick';\n }\n\n if (isLastItem) {\n return 'brick-round';\n }\n\n return 'brick-brick';\n }\n private getCustomControlsWithWidgets() {\n const items = this.getItems();\n\n const result = items.map(\n (item: OverlayControlItem, index: number, controlItems: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, controlItems.length),\n );\n const isOnlyOneItem = items.length === 0;\n\n // Добавляем контрол удаления или меню виджета по умолчанию\n result.push(this.renderMenu(isOnlyOneItem));\n\n return result;\n }\n}\n\nexport default OverlayControls;\n"]}
|