@gravity-ui/dashkit 9.0.0 → 9.1.1

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.
@@ -241,7 +241,7 @@ class OverlayControls extends react_1.default.Component {
241
241
  if (items.length === 0) {
242
242
  return null;
243
243
  }
244
- return (react_1.default.createElement(uikit_1.DropdownMenu, { key: 'controls_dropdown', items: items, renderSwitcher: (props) => (react_1.default.createElement(uikit_1.Button, Object.assign({}, props, { view: view, size: size, pin: isOnlyOneItem ? 'round-round' : 'brick-round', qa: "dashkit-overlay-control-menu" }),
244
+ return (react_1.default.createElement(uikit_1.DropdownMenu, { key: 'controls_dropdown', items: items, renderSwitcher: (props) => (react_1.default.createElement(uikit_1.Button, Object.assign({}, props, { view: view, size: size, pin: isOnlyOneItem ? 'round-round' : 'brick-round', extraProps: { 'aria-label': (0, i18n_1.i18n)('label_more-options') }, qa: "dashkit-overlay-control-menu" }),
245
245
  react_1.default.createElement(uikit_1.Icon, { data: icons_1.Ellipsis, size: constants_1.OVERLAY_ICON_SIZE }))), popupProps: {
246
246
  className: constants_1.DRAGGABLE_CANCEL_CLASS_NAME,
247
247
  } }));
@@ -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 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 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 renderDropdownMenu(isOnlyOneItem: boolean) {\n const {view, size, 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 const items: DropdownMenuItem[] = 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 action: itemAction,\n className: item.className,\n qa: item.qa,\n });\n\n return memo;\n }, []);\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 qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Ellipsis} size={OVERLAY_ICON_SIZE} />\n </Button>\n )}\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 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 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 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 renderDropdownMenu(isOnlyOneItem: boolean) {\n const {view, size, 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 const items: DropdownMenuItem[] = 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 action: itemAction,\n className: item.className,\n qa: item.qa,\n });\n\n return memo;\n }, []);\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 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"]}
@@ -2,6 +2,7 @@
2
2
  "button_retry": "Repeat",
3
3
  "label_render-markdown-error": "Markdown transformation error",
4
4
  "label_settings": "Settings",
5
+ "label_more-options": "Additional options",
5
6
  "label_copy": "Copy",
6
7
  "label_delete": "Delete",
7
8
  "label_error": "Error"
@@ -1,5 +1,5 @@
1
- export declare const i18n: ((key: "button_retry" | "label_render-markdown-error" | "label_settings" | "label_copy" | "label_delete" | "label_error", params?: import("@gravity-ui/i18n").Params) => string) & {
1
+ export declare const i18n: ((key: "button_retry" | "label_render-markdown-error" | "label_settings" | "label_more-options" | "label_copy" | "label_delete" | "label_error", params?: import("@gravity-ui/i18n").Params) => string) & {
2
2
  keysetData: {
3
- dashkit: Record<"button_retry" | "label_render-markdown-error" | "label_settings" | "label_copy" | "label_delete" | "label_error", import("@gravity-ui/i18n").KeyData>;
3
+ dashkit: Record<"button_retry" | "label_render-markdown-error" | "label_settings" | "label_more-options" | "label_copy" | "label_delete" | "label_error", import("@gravity-ui/i18n").KeyData>;
4
4
  };
5
5
  };
@@ -2,6 +2,7 @@
2
2
  "button_retry": "Повторить",
3
3
  "label_render-markdown-error": "Ошибка преобразования в markdown",
4
4
  "label_settings": "Настройки",
5
+ "label_more-options": "Дополнительные опции",
5
6
  "label_copy": "Копировать",
6
7
  "label_delete": "Удалить",
7
8
  "label_error": "Ошибка"
@@ -17,6 +17,7 @@ export interface PluginTextProps extends PluginWidgetProps {
17
17
  text: string;
18
18
  } & PluginWidgetProps['data'];
19
19
  onBeforeRender: () => () => void;
20
+ qa?: string;
20
21
  }
21
22
  interface PluginTextState {
22
23
  htmlText: string;
@@ -73,7 +73,7 @@ class PluginText extends react_1.default.PureComponent {
73
73
  react_1.default.createElement("br", null)));
74
74
  }
75
75
  renderText() {
76
- return (react_1.default.createElement("div", { className: b({ withMarkdown: this.withMarkdown }), [constants_1.PLUGIN_ROOT_ATTR_NAME]: 'text' }, this.withMarkdown ? (react_1.default.createElement("div", { className: "yfm" // className из стилей для markdown
76
+ return (react_1.default.createElement("div", { className: b({ withMarkdown: this.withMarkdown }), "data-qa": this.props.qa, [constants_1.PLUGIN_ROOT_ATTR_NAME]: 'text' }, this.withMarkdown ? (react_1.default.createElement("div", { className: "yfm" // className из стилей для markdown
77
77
  , dangerouslySetInnerHTML: { __html: this.state.htmlText } })) : (this.state.text)));
78
78
  }
79
79
  async getMarkdown() {
@@ -1 +1 @@
1
- {"version":3,"file":"Text.js","sourceRoot":"../../../../src","sources":["plugins/Text/Text.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Button, Loader} from '@gravity-ui/uikit';\n\nimport {i18n} from '../../i18n';\nimport {Plugin, PluginWidgetProps} from '../../typings';\nimport {cn} from '../../utils/cn';\nimport {PLUGIN_ROOT_ATTR_NAME} from '../constants';\n\nimport './Text.scss';\n\n// need to set markdown styles separately\n// for instance can use yfm-transform\n\nconst b = cn('dashkit-plugin-text');\n\nenum LoadStatus {\n Pending = 'pending',\n Success = 'success',\n Fail = 'fail',\n}\n\nexport type PluginTextApiHandler = (data: {text: string}) => Promise<{result: string}>;\n\nexport interface PluginTextProps extends PluginWidgetProps {\n apiHandler?: PluginTextApiHandler;\n data: {\n text: string;\n } & PluginWidgetProps['data'];\n onBeforeRender: () => () => void;\n}\n\ninterface PluginTextState {\n htmlText: string;\n status: LoadStatus;\n needUpdate?: boolean;\n text?: string;\n}\n\nexport class PluginText extends React.PureComponent<PluginTextProps, PluginTextState> {\n static getDerivedStateFromProps(props: PluginTextProps, state: PluginTextState) {\n const {\n data: {text},\n } = props;\n const needUpdate = text !== state.text;\n return {\n text,\n needUpdate,\n };\n }\n\n state: PluginTextState = {\n htmlText: '',\n status: this.withMarkdown ? LoadStatus.Pending : LoadStatus.Success,\n };\n\n private _isUnmounted = false;\n\n componentDidMount() {\n this._isUnmounted = false;\n this.getMarkdown();\n }\n\n componentDidUpdate() {\n if (this.state.needUpdate) {\n this.getMarkdown();\n }\n }\n\n componentWillUnmount() {\n this._isUnmounted = true;\n }\n\n render() {\n switch (this.state.status) {\n case LoadStatus.Success:\n return this.renderText();\n case LoadStatus.Pending:\n return this.renderLoader();\n default:\n return this.renderError();\n }\n }\n\n private renderLoader() {\n return (\n <div className={b({loading: true})}>\n <div className={b('loader')}>\n <div className={b('loader-view')}>\n <Loader size=\"m\" />\n </div>\n </div>\n </div>\n );\n }\n\n private renderError() {\n return (\n <div className={b({error: true})}>\n <div className={b('error')}>{i18n('label_render-markdown-error')}</div>\n <br />\n <Button view=\"action\" size=\"m\" onClick={this.onRetryClick}>\n {i18n('button_retry')}\n </Button>\n <br />\n </div>\n );\n }\n\n private renderText() {\n return (\n <div\n className={b({withMarkdown: this.withMarkdown})}\n {...{[PLUGIN_ROOT_ATTR_NAME]: 'text'}}\n >\n {this.withMarkdown ? (\n <div\n className=\"yfm\" // className из стилей для markdown\n dangerouslySetInnerHTML={{__html: this.state.htmlText}}\n />\n ) : (\n this.state.text\n )}\n </div>\n );\n }\n\n private async getMarkdown() {\n if (typeof this.props.apiHandler !== 'function') {\n return;\n }\n this.setState({status: LoadStatus.Pending});\n\n const onLoadComplete = this.props.onBeforeLoad();\n\n try {\n let htmlText = '';\n if (this.state.text && this.state.text.trim()) {\n const loadedData = await this.props.apiHandler({text: this.state.text});\n htmlText = loadedData.result;\n }\n if (this._isUnmounted) {\n return;\n }\n this.setState({\n htmlText,\n status: LoadStatus.Success,\n });\n } catch (e) {\n if (this._isUnmounted) {\n return;\n }\n this.setState({status: LoadStatus.Fail});\n }\n onLoadComplete();\n }\n\n private onRetryClick = () => {\n this.getMarkdown();\n };\n\n get withMarkdown() {\n return typeof this.props.apiHandler === 'function';\n }\n}\n\ntype PluginDataProps = Omit<PluginTextProps, 'apiHandler'>;\n\nexport type PluginTextObjectSettings = {apiHandler?: PluginTextApiHandler};\n\nexport type PluginTextObject = Plugin<PluginDataProps> & {\n setSettings: (settings: PluginTextObjectSettings) => PluginTextObject;\n _apiHandler?: PluginTextApiHandler;\n};\n\nconst plugin: PluginTextObject = {\n type: 'text',\n defaultLayout: {w: 12, h: 6},\n setSettings(settings) {\n const {apiHandler} = settings;\n plugin._apiHandler = apiHandler;\n return plugin;\n },\n renderer(props, forwardedRef) {\n return <PluginText {...props} apiHandler={plugin._apiHandler} ref={forwardedRef} />;\n },\n};\n\nexport default plugin;\n"]}
1
+ {"version":3,"file":"Text.js","sourceRoot":"../../../../src","sources":["plugins/Text/Text.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Button, Loader} from '@gravity-ui/uikit';\n\nimport {i18n} from '../../i18n';\nimport {Plugin, PluginWidgetProps} from '../../typings';\nimport {cn} from '../../utils/cn';\nimport {PLUGIN_ROOT_ATTR_NAME} from '../constants';\n\nimport './Text.scss';\n\n// need to set markdown styles separately\n// for instance can use yfm-transform\n\nconst b = cn('dashkit-plugin-text');\n\nenum LoadStatus {\n Pending = 'pending',\n Success = 'success',\n Fail = 'fail',\n}\n\nexport type PluginTextApiHandler = (data: {text: string}) => Promise<{result: string}>;\n\nexport interface PluginTextProps extends PluginWidgetProps {\n apiHandler?: PluginTextApiHandler;\n data: {\n text: string;\n } & PluginWidgetProps['data'];\n onBeforeRender: () => () => void;\n qa?: string;\n}\n\ninterface PluginTextState {\n htmlText: string;\n status: LoadStatus;\n needUpdate?: boolean;\n text?: string;\n}\n\nexport class PluginText extends React.PureComponent<PluginTextProps, PluginTextState> {\n static getDerivedStateFromProps(props: PluginTextProps, state: PluginTextState) {\n const {\n data: {text},\n } = props;\n const needUpdate = text !== state.text;\n return {\n text,\n needUpdate,\n };\n }\n\n state: PluginTextState = {\n htmlText: '',\n status: this.withMarkdown ? LoadStatus.Pending : LoadStatus.Success,\n };\n\n private _isUnmounted = false;\n\n componentDidMount() {\n this._isUnmounted = false;\n this.getMarkdown();\n }\n\n componentDidUpdate() {\n if (this.state.needUpdate) {\n this.getMarkdown();\n }\n }\n\n componentWillUnmount() {\n this._isUnmounted = true;\n }\n\n render() {\n switch (this.state.status) {\n case LoadStatus.Success:\n return this.renderText();\n case LoadStatus.Pending:\n return this.renderLoader();\n default:\n return this.renderError();\n }\n }\n\n private renderLoader() {\n return (\n <div className={b({loading: true})}>\n <div className={b('loader')}>\n <div className={b('loader-view')}>\n <Loader size=\"m\" />\n </div>\n </div>\n </div>\n );\n }\n\n private renderError() {\n return (\n <div className={b({error: true})}>\n <div className={b('error')}>{i18n('label_render-markdown-error')}</div>\n <br />\n <Button view=\"action\" size=\"m\" onClick={this.onRetryClick}>\n {i18n('button_retry')}\n </Button>\n <br />\n </div>\n );\n }\n\n private renderText() {\n return (\n <div\n className={b({withMarkdown: this.withMarkdown})}\n data-qa={this.props.qa}\n {...{[PLUGIN_ROOT_ATTR_NAME]: 'text'}}\n >\n {this.withMarkdown ? (\n <div\n className=\"yfm\" // className из стилей для markdown\n dangerouslySetInnerHTML={{__html: this.state.htmlText}}\n />\n ) : (\n this.state.text\n )}\n </div>\n );\n }\n\n private async getMarkdown() {\n if (typeof this.props.apiHandler !== 'function') {\n return;\n }\n this.setState({status: LoadStatus.Pending});\n\n const onLoadComplete = this.props.onBeforeLoad();\n\n try {\n let htmlText = '';\n if (this.state.text && this.state.text.trim()) {\n const loadedData = await this.props.apiHandler({text: this.state.text});\n htmlText = loadedData.result;\n }\n if (this._isUnmounted) {\n return;\n }\n this.setState({\n htmlText,\n status: LoadStatus.Success,\n });\n } catch (e) {\n if (this._isUnmounted) {\n return;\n }\n this.setState({status: LoadStatus.Fail});\n }\n onLoadComplete();\n }\n\n private onRetryClick = () => {\n this.getMarkdown();\n };\n\n get withMarkdown() {\n return typeof this.props.apiHandler === 'function';\n }\n}\n\ntype PluginDataProps = Omit<PluginTextProps, 'apiHandler'>;\n\nexport type PluginTextObjectSettings = {apiHandler?: PluginTextApiHandler};\n\nexport type PluginTextObject = Plugin<PluginDataProps> & {\n setSettings: (settings: PluginTextObjectSettings) => PluginTextObject;\n _apiHandler?: PluginTextApiHandler;\n};\n\nconst plugin: PluginTextObject = {\n type: 'text',\n defaultLayout: {w: 12, h: 6},\n setSettings(settings) {\n const {apiHandler} = settings;\n plugin._apiHandler = apiHandler;\n return plugin;\n },\n renderer(props, forwardedRef) {\n return <PluginText {...props} apiHandler={plugin._apiHandler} ref={forwardedRef} />;\n },\n};\n\nexport default plugin;\n"]}
@@ -237,7 +237,7 @@ class OverlayControls extends React.Component {
237
237
  if (items.length === 0) {
238
238
  return null;
239
239
  }
240
- return (React.createElement(DropdownMenu, { key: 'controls_dropdown', items: items, renderSwitcher: (props) => (React.createElement(Button, Object.assign({}, props, { view: view, size: size, pin: isOnlyOneItem ? 'round-round' : 'brick-round', qa: "dashkit-overlay-control-menu" }),
240
+ return (React.createElement(DropdownMenu, { key: 'controls_dropdown', items: items, renderSwitcher: (props) => (React.createElement(Button, Object.assign({}, props, { view: view, size: size, pin: isOnlyOneItem ? 'round-round' : 'brick-round', extraProps: { 'aria-label': i18n('label_more-options') }, qa: "dashkit-overlay-control-menu" }),
241
241
  React.createElement(Icon, { data: Ellipsis, size: OVERLAY_ICON_SIZE }))), popupProps: {
242
242
  className: DRAGGABLE_CANCEL_CLASS_NAME,
243
243
  } }));
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayControls.js","sourceRoot":"../../../../src","sources":["components/OverlayControls/OverlayControls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACH,MAAM,EAGN,YAAY,EAEZ,IAAI,GAGP,MAAM,mBAAmB,CAAC;AAC3B,OAAO,IAAI,uBAAoB;AAE/B,OAAO,EACH,uBAAuB,EACvB,2BAA2B,EAC3B,SAAS,EACT,2BAA2B,EAC3B,iBAAiB,GACpB,iCAAwB;AACzB,OAAO,EAAC,4BAA4B,EAA0B,+BAAsB;AACpF,OAAO,EAAC,IAAI,EAAC,4BAAmB;AAChC,OAAO,EAKH,cAAc,EACd,kBAAkB,GACrB,8BAAqB;AAEtB,OAAO,EAAC,EAAE,EAAC,0BAAuB;AAElC,+BAAgC;AAEhC,MAAM,CAAC,GAAG,EAAE,CAAC,2BAA2B,CAAC,CAAC;AAE1C,MAAM,CAAN,IAAY,uBAKX;AALD,WAAY,uBAAuB;IAC/B,iDAAsB,CAAA;IACtB,+CAAoB,CAAA;IACpB,uDAA4B,CAAA;IAC5B,qDAA0B,CAAA;AAC9B,CAAC,EALW,uBAAuB,KAAvB,uBAAuB,QAKlC;AAoDD,MAAM,qBAAqB,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,eAAgB,SAAQ,KAAK,CAAC,SAA+B;IAAnE;;QAoBY,aAAQ,GAAG,GAAG,EAAE;YACpB,MAAM,EAAC,eAAe,EAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YACvC,MAAM,EAAC,UAAU,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAEhC,OAAO,CAAC,eAAe,IAAI,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,CAAC,CAAC;QAEM,uBAAkB,GAAG,CAAC,IAAwB,EAAE,KAAa,EAAE,MAAc,EAAE,EAAE;YACrF,MAAM,EAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAC7C,MAAM,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAC,GAAG,IAAI,CAAC;YAElD,MAAM,kBAAkB,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1E,OAAO,CACH,oBAAC,MAAM,IACH,GAAG,EAAE,WAAW,KAAK,EAAE,EACvB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,EAC/C,OAAO,EAAE,GAAG,EAAE;oBACV,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAC1C,WAAW,aAAX,WAAW,uBAAX,WAAW,EAAI,CAAC;gBACpB,CAAC,EACD,EAAE,EAAE,EAAE;gBAEN,oBAAC,IAAI,IAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,GAAI,CAClE,CACZ,CAAC;QACN,CAAC,CAAC;QA8BM,uBAAkB,GAAG,GAAG,EAAE;YAC9B,MAAM,EAAC,IAAI,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAEhC,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,OAAO,CACH,oBAAC,MAAM,IACH,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAC7B,GAAG,EAAC,aAAa,EACjB,OAAO,EAAE,IAAI,CAAC,UAAU,EACxB,EAAE,EAAC,kCAAkC;gBAErC,oBAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,GAAI,CACxC,CACZ,CAAC;QACN,CAAC,CAAC;QAqIM,iCAA4B,GAAG,GAAG,EAAE;YACxC,+EAA+E;YAC/E,wDAAwD;YACxD,IAAI,QAAQ,GAAyB,EAAE,CAAC;YACxC,MAAM,EAAC,WAAW,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAEjC,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1E,QAAQ,GAAG,QAAQ,CAAC,MAAM,CACtB,CACK,WAAoC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;;oBAClD,gFAAgF;oBAChF,IAAI,MAAA,IAAI,CAAC,mBAAmB,0CAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjE,OAAO,KAAK,CAAC;oBACjB,CAAC;oBAED,OAAO,IAAI,CAAC,OAAO;wBACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;wBACrC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;gBAClC,CAAC,CAAC,IAAI,EAAE,CACX,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;oBACX,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAA,EAAE,CAAC;wBACZ,OAAO,IAAI,CAAC;oBAChB,CAAC;oBACD,uCACO,IAAI,KACP,OAAO,EACH,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU;4BAC9B,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE;;gCACR,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,OAAO,qDAAG,GAAG,IAAI,CAAC,CAAC;gCACvC,WAAW,aAAX,WAAW,uBAAX,WAAW,EAAI,CAAC;gCAChB,OAAO,MAAM,CAAC;4BAClB,CAAC;4BACH,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,0CAAE,MAAM,KAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,IACzE;gBACN,CAAC,CAAC,CACL,CAAC;YACN,CAAC;YAED,OAAO,QAAQ,CAAC;QACpB,CAAC,CAAC;QACM,eAAU,GAAG,GAAG,EAAE;;YACtB,MAAM,EAAC,UAAU,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAChC,MAAM,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAEzE,IAAI,aAAa,CAAC;YAElB,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACxC,aAAa,GAAG,kBAAkB,CAAC;oBAC/B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;oBAC3B,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB;iBACxD,CAAC,CAAC;YACP,CAAC;YAED,IAAI,OAAO,GAA4B;gBACnC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,MAAM,EAAE;oBACJ,CAAC,EAAE,sBAAuB,CAAC,CAAC;oBAC5B,CAAC,EAAE,sBAAuB,CAAC,CAAC;iBAC/B;gBACD,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;gBAClC,aAAa;aAChB,CAAC;YAEF,IAAI,MAAA,IAAI,CAAC,OAAO,CAAC,OAAO,0CAAE,0BAA0B,EAAE,CAAC;gBACnD,MAAA,OAAO,CAAC,IAAI,wDACR,0GAA0G,CAC7G,CAAC;YACN,CAAC;YAED,MAAM,0BAA0B,GAC5B,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,0BAA0B,mCACxC,MAAA,IAAI,CAAC,OAAO,CAAC,OAAO,0CAAE,0BAA0B,CAAC;YAErD,IAAI,OAAO,0BAA0B,KAAK,UAAU,EAAE,CAAC;gBACnD,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,CAAC;gBACD,YAAY,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBACvE,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,aAAa,mDAAG,IAAI,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACrF,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,aAAa,mDAAG,KAAK,CAAC,CAAC;YACxC,CAAC;YACD,wEAAwE;YACxE,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3C,MAAA,MAAA,IAAI,CAAC,KAAK,EAAC,WAAW,kDAAI,CAAC;QAC/B,CAAC,CAAC;QACM,eAAU,GAAG,GAAG,EAAE;;YACtB,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,QAAQ,mDAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAA,MAAA,IAAI,CAAC,KAAK,EAAC,WAAW,kDAAI,CAAC;QAC/B,CAAC,CAAC;QACM,iBAAY,GAAG,GAAG,EAAE;;YACxB,MAAM,EAAC,EAAE,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAA,MAAA,IAAI,CAAC,KAAK,EAAC,WAAW,kDAAI,CAAC;QAC/B,CAAC,CAAC;IAkCN,CAAC;IArWG,MAAM;QACF,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,4BAA4B,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtD,MAAM,QAAQ,GAAG,4BAA4B;YACzC,CAAC,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACrC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,OAAO,6BAAK,SAAS,EAAE,CAAC,CAAC,EAAC,QAAQ,EAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,IAAG,QAAQ,CAAO,CAAC;IAC1F,CAAC;IAgCO,yBAAyB,CAAC,QAAgB,EAAE,aAAuB;QACvE,QAAQ,QAAQ,EAAE,CAAC;YACf,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClB,OAAO;oBACH,MAAM,EAAE,IAAI,CAAC,UAAU;oBACvB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;iBAC3B,CAAC;YACN,CAAC;YACD,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpB,OAAO;oBACH,MAAM,EAAE,IAAI,CAAC,YAAY;oBACzB,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;iBAC7B,CAAC;YACN,CAAC;YACD,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACtB,oHAAoH;gBACpH,IAAI,aAAa,EAAE,CAAC;oBAChB,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,OAAO;oBACH,MAAM,EAAE,IAAI,CAAC,UAAU;oBACvB,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC;iBAC/B,CAAC;YACN,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAwBO,cAAc;QAClB,MAAM,kBAAkB,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAC/D,MAAM,4BAA4B,GAAG,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,4BAA4B;YACzC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAClB,CAAC,IAAwB,EAAE,KAAa,EAAE,KAA2B,EAAE,EAAE,CACrE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAC7D;YACH,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QAEhD,OAAO,CACH,6BACI,SAAS,EAAE,CAAC,CAAC,kBAAkB,EAAE;gBAC7B,kBAAkB,EAAE,4BAA4B;aACnD,CAAC;YAED,QAAQ;YACR,IAAI,CACH,CACT,CAAC;IACN,CAAC;IACO,UAAU,CAAC,aAAsB;QACrC,MAAM,EAAC,IAAI,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAExD,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,OAAO,CACH,oBAAC,MAAM,IACH,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,EAC3B,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAClD,OAAO,EAAE,IAAI,CAAC,YAAY,EAC1B,EAAE,EAAC,8BAA8B;YAEjC,oBAAC,IAAI,IAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,GAAI,CACzC,CACZ,CAAC;IACN,CAAC;IAEO,aAAa,CAAC,IAAsB;QACxC,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CACvB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CACrE,CAAC;IACN,CAAC;IACO,kBAAkB,CAAC,aAAsB;QAC7C,MAAM,EAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,MAAM,EAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAElE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QACzC,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,UAAU,CAAC,EAAE,CAAC,KAAI,EAAE,CAAC;QAEpD,MAAM,IAAI,GAAG,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAEzF,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/C,MAAM,KAAK,GAAuB,aAAa;YAC3C,CAAC,CAAE,CAAC,IAAI,IAAI,EAAE,CAAc,CAAC,MAAM,CAAqB,CAAC,IAAI,EAAE,IAAY,EAAE,EAAE;gBACzE,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACxD,IAAI,IAAI,EAAE,CAAC;oBACP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC;YACR,CAAC,CAAC,IAAI,CAAC,MAAM,CAAqB,CAAC,IAAI,EAAE,IAAc,EAAE,EAAE;;gBACrD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,mCAAmC;gBACnC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC5C,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;gBAEjC,MAAM,UAAU,GACZ,OAAO,WAAW,KAAK,UAAU;oBAC7B,CAAC,CAAC,GAAG,EAAE;wBACD,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;wBAC9D,WAAW,aAAX,WAAW,uBAAX,WAAW,EAAI,CAAC;wBAChB,OAAO,MAAM,CAAC;oBAClB,CAAC;oBACH,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,0CAAE,MAAM,KAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAExE,IAAI,CAAC,IAAI,CAAC;oBACN,mBAAmB;oBACnB,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,SAAS,EAAE,IAAI,CAAC,IAAI;oBACpB,MAAM,EAAE,UAAU;oBAClB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,EAAE,EAAE,IAAI,CAAC,EAAE;iBACd,CAAC,CAAC;gBAEH,OAAO,IAAI,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC,CAAC;QAEb,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,CACH,oBAAC,YAAY,IACT,GAAG,EAAE,mBAAmB,EACxB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CACvB,oBAAC,MAAM,oBACC,KAAK,IACT,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAClD,EAAE,EAAC,8BAA8B;gBAEjC,oBAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,GAAI,CAC5C,CACZ,EACD,UAAU,EAAE;gBACR,SAAS,EAAE,2BAA2B;aACzC,GACH,CACL,CAAC;IACN,CAAC;IAsGO,sBAAsB,CAAC,KAAa,EAAE,WAAmB;QAC7D,MAAM,aAAa,GAAG,WAAW,KAAK,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,KAAK,KAAK,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,KAAK,KAAK,WAAW,GAAG,CAAC,CAAC;QAE7C,IAAI,aAAa,EAAE,CAAC;YAChB,OAAO,aAAa,CAAC;QACzB,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YACd,OAAO,aAAa,CAAC;QACzB,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACb,OAAO,aAAa,CAAC;QACzB,CAAC;QAED,OAAO,aAAa,CAAC;IACzB,CAAC;IACO,4BAA4B;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CACpB,CAAC,IAAwB,EAAE,KAAa,EAAE,YAAkC,EAAE,EAAE,CAC5E,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,CAChE,CAAC;QACF,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QAEzC,2DAA2D;QAC3D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;QAE5C,OAAO,MAAM,CAAC;IAClB,CAAC;;AA3WM,2BAAW,GAAG,4BAA4B,AAA/B,CAAgC;AAC3C,4BAAY,GAAgC;IAC/C,QAAQ,EAAE,uBAAuB,CAAC,QAAQ;IAC1C,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,GAAG;CACZ,AAJkB,CAIjB;AAyWN,eAAe,eAAe,CAAC","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 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 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 renderDropdownMenu(isOnlyOneItem: boolean) {\n const {view, size, 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 const items: DropdownMenuItem[] = 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 action: itemAction,\n className: item.className,\n qa: item.qa,\n });\n\n return memo;\n }, []);\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 qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Ellipsis} size={OVERLAY_ICON_SIZE} />\n </Button>\n )}\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 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 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 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 renderDropdownMenu(isOnlyOneItem: boolean) {\n const {view, size, 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 const items: DropdownMenuItem[] = 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 action: itemAction,\n className: item.className,\n qa: item.qa,\n });\n\n return memo;\n }, []);\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 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"]}
@@ -2,6 +2,7 @@
2
2
  "button_retry": "Repeat",
3
3
  "label_render-markdown-error": "Markdown transformation error",
4
4
  "label_settings": "Settings",
5
+ "label_more-options": "Additional options",
5
6
  "label_copy": "Copy",
6
7
  "label_delete": "Delete",
7
8
  "label_error": "Error"
@@ -1,5 +1,5 @@
1
- export declare const i18n: ((key: "button_retry" | "label_render-markdown-error" | "label_settings" | "label_copy" | "label_delete" | "label_error", params?: import("@gravity-ui/i18n").Params) => string) & {
1
+ export declare const i18n: ((key: "button_retry" | "label_render-markdown-error" | "label_settings" | "label_more-options" | "label_copy" | "label_delete" | "label_error", params?: import("@gravity-ui/i18n").Params) => string) & {
2
2
  keysetData: {
3
- dashkit: Record<"button_retry" | "label_render-markdown-error" | "label_settings" | "label_copy" | "label_delete" | "label_error", import("@gravity-ui/i18n").KeyData>;
3
+ dashkit: Record<"button_retry" | "label_render-markdown-error" | "label_settings" | "label_more-options" | "label_copy" | "label_delete" | "label_error", import("@gravity-ui/i18n").KeyData>;
4
4
  };
5
5
  };
@@ -2,6 +2,7 @@
2
2
  "button_retry": "Повторить",
3
3
  "label_render-markdown-error": "Ошибка преобразования в markdown",
4
4
  "label_settings": "Настройки",
5
+ "label_more-options": "Дополнительные опции",
5
6
  "label_copy": "Копировать",
6
7
  "label_delete": "Удалить",
7
8
  "label_error": "Ошибка"
@@ -17,6 +17,7 @@ export interface PluginTextProps extends PluginWidgetProps {
17
17
  text: string;
18
18
  } & PluginWidgetProps['data'];
19
19
  onBeforeRender: () => () => void;
20
+ qa?: string;
20
21
  }
21
22
  interface PluginTextState {
22
23
  htmlText: string;
@@ -69,7 +69,7 @@ export class PluginText extends React.PureComponent {
69
69
  React.createElement("br", null)));
70
70
  }
71
71
  renderText() {
72
- return (React.createElement("div", { className: b({ withMarkdown: this.withMarkdown }), [PLUGIN_ROOT_ATTR_NAME]: 'text' }, this.withMarkdown ? (React.createElement("div", { className: "yfm" // className из стилей для markdown
72
+ return (React.createElement("div", { className: b({ withMarkdown: this.withMarkdown }), "data-qa": this.props.qa, [PLUGIN_ROOT_ATTR_NAME]: 'text' }, this.withMarkdown ? (React.createElement("div", { className: "yfm" // className из стилей для markdown
73
73
  , dangerouslySetInnerHTML: { __html: this.state.htmlText } })) : (this.state.text)));
74
74
  }
75
75
  async getMarkdown() {
@@ -1 +1 @@
1
- {"version":3,"file":"Text.js","sourceRoot":"../../../../src","sources":["plugins/Text/Text.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Button, Loader} from '@gravity-ui/uikit';\n\nimport {i18n} from '../../i18n';\nimport {Plugin, PluginWidgetProps} from '../../typings';\nimport {cn} from '../../utils/cn';\nimport {PLUGIN_ROOT_ATTR_NAME} from '../constants';\n\nimport './Text.scss';\n\n// need to set markdown styles separately\n// for instance can use yfm-transform\n\nconst b = cn('dashkit-plugin-text');\n\nenum LoadStatus {\n Pending = 'pending',\n Success = 'success',\n Fail = 'fail',\n}\n\nexport type PluginTextApiHandler = (data: {text: string}) => Promise<{result: string}>;\n\nexport interface PluginTextProps extends PluginWidgetProps {\n apiHandler?: PluginTextApiHandler;\n data: {\n text: string;\n } & PluginWidgetProps['data'];\n onBeforeRender: () => () => void;\n}\n\ninterface PluginTextState {\n htmlText: string;\n status: LoadStatus;\n needUpdate?: boolean;\n text?: string;\n}\n\nexport class PluginText extends React.PureComponent<PluginTextProps, PluginTextState> {\n static getDerivedStateFromProps(props: PluginTextProps, state: PluginTextState) {\n const {\n data: {text},\n } = props;\n const needUpdate = text !== state.text;\n return {\n text,\n needUpdate,\n };\n }\n\n state: PluginTextState = {\n htmlText: '',\n status: this.withMarkdown ? LoadStatus.Pending : LoadStatus.Success,\n };\n\n private _isUnmounted = false;\n\n componentDidMount() {\n this._isUnmounted = false;\n this.getMarkdown();\n }\n\n componentDidUpdate() {\n if (this.state.needUpdate) {\n this.getMarkdown();\n }\n }\n\n componentWillUnmount() {\n this._isUnmounted = true;\n }\n\n render() {\n switch (this.state.status) {\n case LoadStatus.Success:\n return this.renderText();\n case LoadStatus.Pending:\n return this.renderLoader();\n default:\n return this.renderError();\n }\n }\n\n private renderLoader() {\n return (\n <div className={b({loading: true})}>\n <div className={b('loader')}>\n <div className={b('loader-view')}>\n <Loader size=\"m\" />\n </div>\n </div>\n </div>\n );\n }\n\n private renderError() {\n return (\n <div className={b({error: true})}>\n <div className={b('error')}>{i18n('label_render-markdown-error')}</div>\n <br />\n <Button view=\"action\" size=\"m\" onClick={this.onRetryClick}>\n {i18n('button_retry')}\n </Button>\n <br />\n </div>\n );\n }\n\n private renderText() {\n return (\n <div\n className={b({withMarkdown: this.withMarkdown})}\n {...{[PLUGIN_ROOT_ATTR_NAME]: 'text'}}\n >\n {this.withMarkdown ? (\n <div\n className=\"yfm\" // className из стилей для markdown\n dangerouslySetInnerHTML={{__html: this.state.htmlText}}\n />\n ) : (\n this.state.text\n )}\n </div>\n );\n }\n\n private async getMarkdown() {\n if (typeof this.props.apiHandler !== 'function') {\n return;\n }\n this.setState({status: LoadStatus.Pending});\n\n const onLoadComplete = this.props.onBeforeLoad();\n\n try {\n let htmlText = '';\n if (this.state.text && this.state.text.trim()) {\n const loadedData = await this.props.apiHandler({text: this.state.text});\n htmlText = loadedData.result;\n }\n if (this._isUnmounted) {\n return;\n }\n this.setState({\n htmlText,\n status: LoadStatus.Success,\n });\n } catch (e) {\n if (this._isUnmounted) {\n return;\n }\n this.setState({status: LoadStatus.Fail});\n }\n onLoadComplete();\n }\n\n private onRetryClick = () => {\n this.getMarkdown();\n };\n\n get withMarkdown() {\n return typeof this.props.apiHandler === 'function';\n }\n}\n\ntype PluginDataProps = Omit<PluginTextProps, 'apiHandler'>;\n\nexport type PluginTextObjectSettings = {apiHandler?: PluginTextApiHandler};\n\nexport type PluginTextObject = Plugin<PluginDataProps> & {\n setSettings: (settings: PluginTextObjectSettings) => PluginTextObject;\n _apiHandler?: PluginTextApiHandler;\n};\n\nconst plugin: PluginTextObject = {\n type: 'text',\n defaultLayout: {w: 12, h: 6},\n setSettings(settings) {\n const {apiHandler} = settings;\n plugin._apiHandler = apiHandler;\n return plugin;\n },\n renderer(props, forwardedRef) {\n return <PluginText {...props} apiHandler={plugin._apiHandler} ref={forwardedRef} />;\n },\n};\n\nexport default plugin;\n"]}
1
+ {"version":3,"file":"Text.js","sourceRoot":"../../../../src","sources":["plugins/Text/Text.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Button, Loader} from '@gravity-ui/uikit';\n\nimport {i18n} from '../../i18n';\nimport {Plugin, PluginWidgetProps} from '../../typings';\nimport {cn} from '../../utils/cn';\nimport {PLUGIN_ROOT_ATTR_NAME} from '../constants';\n\nimport './Text.scss';\n\n// need to set markdown styles separately\n// for instance can use yfm-transform\n\nconst b = cn('dashkit-plugin-text');\n\nenum LoadStatus {\n Pending = 'pending',\n Success = 'success',\n Fail = 'fail',\n}\n\nexport type PluginTextApiHandler = (data: {text: string}) => Promise<{result: string}>;\n\nexport interface PluginTextProps extends PluginWidgetProps {\n apiHandler?: PluginTextApiHandler;\n data: {\n text: string;\n } & PluginWidgetProps['data'];\n onBeforeRender: () => () => void;\n qa?: string;\n}\n\ninterface PluginTextState {\n htmlText: string;\n status: LoadStatus;\n needUpdate?: boolean;\n text?: string;\n}\n\nexport class PluginText extends React.PureComponent<PluginTextProps, PluginTextState> {\n static getDerivedStateFromProps(props: PluginTextProps, state: PluginTextState) {\n const {\n data: {text},\n } = props;\n const needUpdate = text !== state.text;\n return {\n text,\n needUpdate,\n };\n }\n\n state: PluginTextState = {\n htmlText: '',\n status: this.withMarkdown ? LoadStatus.Pending : LoadStatus.Success,\n };\n\n private _isUnmounted = false;\n\n componentDidMount() {\n this._isUnmounted = false;\n this.getMarkdown();\n }\n\n componentDidUpdate() {\n if (this.state.needUpdate) {\n this.getMarkdown();\n }\n }\n\n componentWillUnmount() {\n this._isUnmounted = true;\n }\n\n render() {\n switch (this.state.status) {\n case LoadStatus.Success:\n return this.renderText();\n case LoadStatus.Pending:\n return this.renderLoader();\n default:\n return this.renderError();\n }\n }\n\n private renderLoader() {\n return (\n <div className={b({loading: true})}>\n <div className={b('loader')}>\n <div className={b('loader-view')}>\n <Loader size=\"m\" />\n </div>\n </div>\n </div>\n );\n }\n\n private renderError() {\n return (\n <div className={b({error: true})}>\n <div className={b('error')}>{i18n('label_render-markdown-error')}</div>\n <br />\n <Button view=\"action\" size=\"m\" onClick={this.onRetryClick}>\n {i18n('button_retry')}\n </Button>\n <br />\n </div>\n );\n }\n\n private renderText() {\n return (\n <div\n className={b({withMarkdown: this.withMarkdown})}\n data-qa={this.props.qa}\n {...{[PLUGIN_ROOT_ATTR_NAME]: 'text'}}\n >\n {this.withMarkdown ? (\n <div\n className=\"yfm\" // className из стилей для markdown\n dangerouslySetInnerHTML={{__html: this.state.htmlText}}\n />\n ) : (\n this.state.text\n )}\n </div>\n );\n }\n\n private async getMarkdown() {\n if (typeof this.props.apiHandler !== 'function') {\n return;\n }\n this.setState({status: LoadStatus.Pending});\n\n const onLoadComplete = this.props.onBeforeLoad();\n\n try {\n let htmlText = '';\n if (this.state.text && this.state.text.trim()) {\n const loadedData = await this.props.apiHandler({text: this.state.text});\n htmlText = loadedData.result;\n }\n if (this._isUnmounted) {\n return;\n }\n this.setState({\n htmlText,\n status: LoadStatus.Success,\n });\n } catch (e) {\n if (this._isUnmounted) {\n return;\n }\n this.setState({status: LoadStatus.Fail});\n }\n onLoadComplete();\n }\n\n private onRetryClick = () => {\n this.getMarkdown();\n };\n\n get withMarkdown() {\n return typeof this.props.apiHandler === 'function';\n }\n}\n\ntype PluginDataProps = Omit<PluginTextProps, 'apiHandler'>;\n\nexport type PluginTextObjectSettings = {apiHandler?: PluginTextApiHandler};\n\nexport type PluginTextObject = Plugin<PluginDataProps> & {\n setSettings: (settings: PluginTextObjectSettings) => PluginTextObject;\n _apiHandler?: PluginTextApiHandler;\n};\n\nconst plugin: PluginTextObject = {\n type: 'text',\n defaultLayout: {w: 12, h: 6},\n setSettings(settings) {\n const {apiHandler} = settings;\n plugin._apiHandler = apiHandler;\n return plugin;\n },\n renderer(props, forwardedRef) {\n return <PluginText {...props} apiHandler={plugin._apiHandler} ref={forwardedRef} />;\n },\n};\n\nexport default plugin;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/dashkit",
3
- "version": "9.0.0",
3
+ "version": "9.1.1",
4
4
  "description": "Library for rendering dashboard grid layout",
5
5
  "license": "MIT",
6
6
  "repository": {