@gravity-ui/dashkit 10.1.3 → 10.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/README.md +95 -19
- package/build/cjs/components/ActionPanel/ActionPanel.d.ts +3 -2
- package/build/cjs/components/DashKit/DashKit.d.ts +13 -3
- package/build/cjs/components/DashKit/DashKit.js +55 -7
- package/build/cjs/components/DashKit/DashKit.js.map +1 -1
- package/build/cjs/components/DashKit/__tests__/controlled-layout.test.d.ts +4 -0
- package/build/cjs/components/DashKit/__tests__/controlled-layout.test.js +196 -0
- package/build/cjs/components/DashKit/__tests__/controlled-layout.test.js.map +1 -0
- package/build/cjs/components/DashKit/__tests__/events.test.d.ts +1 -0
- package/build/cjs/components/DashKit/__tests__/events.test.js +227 -0
- package/build/cjs/components/DashKit/__tests__/events.test.js.map +1 -0
- package/build/cjs/components/DashKitView/DashKitView.d.ts +1 -1
- package/build/cjs/components/DashKitView/DashKitView.js +1 -3
- package/build/cjs/components/DashKitView/DashKitView.js.map +1 -1
- package/build/cjs/components/GridLayout/GridLayout.d.ts +3 -3
- package/build/cjs/components/GridLayout/GroupLayout.js +2 -2
- package/build/cjs/components/GridLayout/GroupLayout.js.map +1 -1
- package/build/cjs/components/GridLayout/ReactGridLayout.d.ts +1 -0
- package/build/cjs/components/GridLayout/ReactGridLayout.js +37 -0
- package/build/cjs/components/GridLayout/ReactGridLayout.js.map +1 -1
- package/build/cjs/components/MobileLayout/MobileLayout.d.ts +1 -1
- package/build/cjs/components/OverlayControls/OverlayControls.d.ts +1 -1
- package/build/cjs/components/OverlayControls/OverlayControls.js +1 -1
- package/build/cjs/components/OverlayControls/OverlayControls.js.map +1 -1
- package/build/cjs/context/DashKitContext.d.ts +1 -0
- package/build/cjs/context/DashKitContext.js.map +1 -1
- package/build/cjs/context/DashkitOverlayControlsContext.d.ts +1 -1
- package/build/cjs/context/DashkitOverlayControlsContext.js +2 -2
- package/build/cjs/context/DashkitOverlayControlsContext.js.map +1 -1
- package/build/cjs/hocs/withContext.d.ts +3 -3
- package/build/cjs/hocs/withContext.js +61 -31
- package/build/cjs/hocs/withContext.js.map +1 -1
- package/build/cjs/package.json +1 -1
- package/build/cjs/plugins/Text/Text.d.ts +1 -1
- package/build/cjs/plugins/Text/Text.js +1 -1
- package/build/cjs/plugins/Text/Text.js.map +1 -1
- package/build/cjs/plugins/Title/Title.d.ts +1 -1
- package/build/cjs/shared/types/config.d.ts +2 -0
- package/build/cjs/shared/types/config.js +9 -0
- package/build/cjs/shared/types/config.js.map +1 -1
- package/build/cjs/typings/events.d.ts +34 -0
- package/build/cjs/typings/events.js +3 -0
- package/build/cjs/typings/events.js.map +1 -0
- package/build/cjs/typings/index.d.ts +1 -0
- package/build/cjs/typings/index.js +1 -0
- package/build/cjs/typings/index.js.map +1 -1
- package/build/cjs/utils/__tests__/get-layout-patches.test.d.ts +1 -0
- package/build/cjs/utils/__tests__/get-layout-patches.test.js +51 -0
- package/build/cjs/utils/__tests__/get-layout-patches.test.js.map +1 -0
- package/build/cjs/utils/enrichLayoutWithDefaults.d.ts +5 -0
- package/build/cjs/utils/enrichLayoutWithDefaults.js +29 -0
- package/build/cjs/utils/enrichLayoutWithDefaults.js.map +1 -0
- package/build/cjs/utils/events.d.ts +10 -0
- package/build/cjs/utils/events.js +34 -0
- package/build/cjs/utils/events.js.map +1 -0
- package/build/cjs/utils/get-layout-patches.d.ts +3 -0
- package/build/cjs/utils/get-layout-patches.js +23 -0
- package/build/cjs/utils/get-layout-patches.js.map +1 -0
- package/build/cjs/utils/index.d.ts +3 -0
- package/build/cjs/utils/index.js +3 -0
- package/build/cjs/utils/index.js.map +1 -1
- package/build/cjs/utils/update-manager.js +2 -2
- package/build/cjs/utils/update-manager.js.map +1 -1
- package/build/esm/components/ActionPanel/ActionPanel.d.ts +3 -2
- package/build/esm/components/DashKit/DashKit.d.ts +13 -3
- package/build/esm/components/DashKit/DashKit.js +54 -6
- package/build/esm/components/DashKit/DashKit.js.map +1 -1
- package/build/esm/components/DashKit/__tests__/controlled-layout.test.d.ts +4 -0
- package/build/esm/components/DashKit/__tests__/controlled-layout.test.js +193 -0
- package/build/esm/components/DashKit/__tests__/controlled-layout.test.js.map +1 -0
- package/build/esm/components/DashKit/__tests__/events.test.d.ts +1 -0
- package/build/esm/components/DashKit/__tests__/events.test.js +225 -0
- package/build/esm/components/DashKit/__tests__/events.test.js.map +1 -0
- package/build/esm/components/DashKitView/DashKitView.d.ts +1 -1
- package/build/esm/components/DashKitView/DashKitView.js +1 -3
- package/build/esm/components/DashKitView/DashKitView.js.map +1 -1
- package/build/esm/components/GridLayout/GridLayout.d.ts +3 -3
- package/build/esm/components/GridLayout/GroupLayout.js +2 -2
- package/build/esm/components/GridLayout/GroupLayout.js.map +1 -1
- package/build/esm/components/GridLayout/ReactGridLayout.d.ts +1 -0
- package/build/esm/components/GridLayout/ReactGridLayout.js +37 -0
- package/build/esm/components/GridLayout/ReactGridLayout.js.map +1 -1
- package/build/esm/components/MobileLayout/MobileLayout.d.ts +1 -1
- package/build/esm/components/OverlayControls/OverlayControls.d.ts +1 -1
- package/build/esm/components/OverlayControls/OverlayControls.js +2 -2
- package/build/esm/components/OverlayControls/OverlayControls.js.map +1 -1
- package/build/esm/context/DashKitContext.d.ts +1 -0
- package/build/esm/context/DashKitContext.js.map +1 -1
- package/build/esm/context/DashkitOverlayControlsContext.d.ts +1 -1
- package/build/esm/context/DashkitOverlayControlsContext.js +1 -1
- package/build/esm/context/DashkitOverlayControlsContext.js.map +1 -1
- package/build/esm/hocs/withContext.d.ts +3 -3
- package/build/esm/hocs/withContext.js +64 -34
- package/build/esm/hocs/withContext.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/plugins/Text/Text.d.ts +1 -1
- package/build/esm/plugins/Text/Text.js +1 -1
- package/build/esm/plugins/Text/Text.js.map +1 -1
- package/build/esm/plugins/Title/Title.d.ts +1 -1
- package/build/esm/shared/types/config.d.ts +2 -0
- package/build/esm/shared/types/config.js +8 -1
- package/build/esm/shared/types/config.js.map +1 -1
- package/build/esm/typings/events.d.ts +34 -0
- package/build/esm/typings/events.js +2 -0
- package/build/esm/typings/events.js.map +1 -0
- package/build/esm/typings/index.d.ts +1 -0
- package/build/esm/typings/index.js +1 -0
- package/build/esm/typings/index.js.map +1 -1
- package/build/esm/utils/__tests__/get-layout-patches.test.d.ts +1 -0
- package/build/esm/utils/__tests__/get-layout-patches.test.js +49 -0
- package/build/esm/utils/__tests__/get-layout-patches.test.js.map +1 -0
- package/build/esm/utils/enrichLayoutWithDefaults.d.ts +5 -0
- package/build/esm/utils/enrichLayoutWithDefaults.js +25 -0
- package/build/esm/utils/enrichLayoutWithDefaults.js.map +1 -0
- package/build/esm/utils/events.d.ts +10 -0
- package/build/esm/utils/events.js +30 -0
- package/build/esm/utils/events.js.map +1 -0
- package/build/esm/utils/get-layout-patches.d.ts +3 -0
- package/build/esm/utils/get-layout-patches.js +19 -0
- package/build/esm/utils/get-layout-patches.js.map +1 -0
- package/build/esm/utils/index.d.ts +3 -0
- package/build/esm/utils/index.js +3 -0
- package/build/esm/utils/index.js.map +1 -1
- package/build/esm/utils/update-manager.js +3 -3
- package/build/esm/utils/update-manager.js.map +1 -1
- package/package.json +10 -9
- package/build/cjs/hooks/useCalcLayout.d.ts +0 -3
- package/build/cjs/hooks/useCalcLayout.js +0 -40
- package/build/cjs/hooks/useCalcLayout.js.map +0 -1
- package/build/esm/hooks/useCalcLayout.d.ts +0 -3
- package/build/esm/hooks/useCalcLayout.js +0 -35
- package/build/esm/hooks/useCalcLayout.js.map +0 -1
|
@@ -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 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;\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={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 {DashkitOverlayControlsContext, 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;\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 = DashkitOverlayControlsContext;\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={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"]}
|
|
@@ -15,6 +15,7 @@ export type DashKitCtxShape = DashkitPropsPassedToCtx & {
|
|
|
15
15
|
globalParams: GlobalParams;
|
|
16
16
|
registerManager: RegisterManager;
|
|
17
17
|
forwardedMetaRef: React.ForwardedRef<any>;
|
|
18
|
+
externalLayoutRevision: number;
|
|
18
19
|
configItems: ConfigItem[];
|
|
19
20
|
layout: ConfigLayout[];
|
|
20
21
|
layoutChange: (layout: ConfigLayout[]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashKitContext.js","sourceRoot":"../../../src","sources":["context/DashKitContext.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;
|
|
1
|
+
{"version":3,"file":"DashKitContext.js","sourceRoot":"../../../src","sources":["context/DashKitContext.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;AA2F1B,MAAM,cAAc,GAAG,eAAK,CAAC,aAAa,CAAkB,EAAqB,CAAC,CAAC;AAE3E,wCAAc","sourcesContent":["import React from 'react';\n\nimport type {DragOverEvent} from 'react-grid-layout';\n\nimport type {RegisterManager, RegisterManagerPlugin} from '..//utils';\nimport type {DashKitProps} from '../components/DashKit';\nimport type {\n ConfigItem,\n ConfigLayout,\n DraggedOverItem,\n GlobalParams,\n ItemDragProps,\n ItemParams,\n ItemState,\n ItemStateAndParams,\n ItemStateAndParamsChangeOptions,\n} from '../shared';\nimport type {ContextProps, PluginRef, ReactGridLayoutProps, SettingsProps} from '../typings';\n\nexport type DashkitPropsPassedToCtx = Pick<\n DashKitProps,\n | 'config'\n | 'groups'\n | 'noOverlay'\n | 'focusable'\n | 'editMode'\n | 'onItemMountChange'\n | 'onItemRender'\n | 'onItemFocus'\n | 'onItemBlur'\n | 'draggableHandleClassName'\n // default handlers bypass\n | 'onDragStart'\n | 'onDrag'\n | 'onDragStop'\n | 'onResizeStart'\n | 'onResize'\n | 'onResizeStop'\n>;\n\nexport type TemporaryLayout = {\n data: ConfigLayout[];\n dragProps: ItemDragProps;\n};\n\nexport type DashKitCtxShape = DashkitPropsPassedToCtx & {\n context: ContextProps;\n settings: SettingsProps;\n globalParams: GlobalParams;\n\n registerManager: RegisterManager;\n forwardedMetaRef: React.ForwardedRef<any>;\n\n externalLayoutRevision: number;\n configItems: ConfigItem[];\n layout: ConfigLayout[];\n layoutChange: (layout: ConfigLayout[]) => void;\n temporaryLayout: TemporaryLayout | null;\n memorizeOriginalLayout: (\n widgetId: string,\n preAutoHeightLayout: ConfigLayout,\n postAutoHeightLayout: ConfigLayout,\n ) => void;\n revertToOriginalLayout: (widgetId: string) => void;\n\n itemsState: Record<string, ItemState>;\n itemsParams: Record<string, ItemParams>;\n onItemStateAndParamsChange: (\n id: string,\n stateAndParams: ItemStateAndParams,\n options?: ItemStateAndParamsChangeOptions,\n ) => void;\n\n getItemsMeta: (pluginsRefs: Array<PluginRef>) => Array<Promise<any>>;\n reloadItems: (\n pluginsRefs: Array<PluginRef>,\n data: {silentLoading: boolean; noVeil: boolean},\n ) => void;\n\n onDrop: (newLayout: ConfigLayout[], item: ConfigLayout, e?: MouseEvent) => void;\n onDropDragOver: (\n e: DragOverEvent,\n group: string | undefined,\n gridProps: ReactGridLayoutProps,\n groupLayout: ConfigLayout[],\n sharedItem?: DraggedOverItem,\n ) => {w?: number; h?: number} | false | undefined;\n outerDnDEnable: boolean;\n dragOverPlugin: null | RegisterManagerPlugin;\n};\n\nconst DashKitContext = React.createContext<DashKitCtxShape>({} as DashKitCtxShape);\n\nexport {DashKitContext};\n"]}
|
|
@@ -10,4 +10,4 @@ export type OverlayControlsCtxShape = Pick<DashKitProps, 'context' | 'overlayCon
|
|
|
10
10
|
removeItem: (id: string) => void;
|
|
11
11
|
getLayoutItem: (id: string) => ConfigLayout | void;
|
|
12
12
|
};
|
|
13
|
-
export declare const
|
|
13
|
+
export declare const DashkitOverlayControlsContext: React.Context<void | OverlayControlsCtxShape>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.DashkitOverlayControlsContext = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
-
exports.
|
|
6
|
+
exports.DashkitOverlayControlsContext = react_1.default.createContext(undefined);
|
|
7
7
|
//# sourceMappingURL=DashkitOverlayControlsContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashkitOverlayControlsContext.js","sourceRoot":"../../../src","sources":["context/DashkitOverlayControlsContext.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;AAuBb,QAAA,
|
|
1
|
+
{"version":3,"file":"DashkitOverlayControlsContext.js","sourceRoot":"../../../src","sources":["context/DashkitOverlayControlsContext.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;AAuBb,QAAA,6BAA6B,GAAG,eAAK,CAAC,aAAa,CAC5D,SAAS,CACZ,CAAC","sourcesContent":["import React from 'react';\n\nimport type {DashKitProps} from '../components';\nimport type {ConfigLayout, ItemParams, ItemState} from '../shared';\nimport type {MenuItem} from '../typings';\n\nexport type OverlayControlsCtxShape = Pick<\n DashKitProps,\n | 'context'\n | 'overlayControls'\n | 'itemsStateAndParams'\n | 'getPreparedCopyItemOptions'\n | 'onCopyFulfill'\n> & {\n menu: DashKitProps['overlayMenuItems'] | MenuItem[];\n itemsState?: Record<string, ItemState>;\n itemsParams: Record<string, ItemParams>;\n\n editItem: DashKitProps['onItemEdit'];\n removeItem: (id: string) => void;\n getLayoutItem: (id: string) => ConfigLayout | void;\n};\n\nexport const DashkitOverlayControlsContext = React.createContext<OverlayControlsCtxShape | void>(\n undefined,\n);\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { DashKitProps } from "../components/DashKit/index.js";
|
|
3
3
|
import type { DashkitPropsPassedToCtx } from "../context/index.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { DashKitEventMap, DashKitEventName } from "../typings/index.js";
|
|
5
5
|
import type { RegisterManager } from "../utils/index.js";
|
|
6
6
|
export type DashKitWithContextProps = DashkitPropsPassedToCtx & Pick<DashKitProps, 'overlayControls' | 'overlayMenuItems' | 'getPreparedCopyItemOptions' | 'onCopyFulfill'> & Required<Pick<DashKitProps, 'itemsStateAndParams' | 'defaultGlobalParams' | 'globalParams' | 'context' | 'settings' | 'onItemEdit' | 'onChange' | 'onDrop'>> & {
|
|
7
|
-
layout: ConfigLayout[];
|
|
8
7
|
registerManager: RegisterManager;
|
|
9
8
|
forwardedMetaRef: React.ForwardedRef<any>;
|
|
9
|
+
emitDashKitEvent: <T extends DashKitEventName>(eventName: T, event: DashKitEventMap[T]) => void;
|
|
10
10
|
};
|
|
11
11
|
export declare function withContext(Component: React.ComponentType): {
|
|
12
|
-
(props: DashKitWithContextProps): JSX.Element;
|
|
12
|
+
(props: DashKitWithContextProps): React.JSX.Element;
|
|
13
13
|
displayName: string;
|
|
14
14
|
};
|
|
@@ -10,7 +10,6 @@ const context_1 = require("../context/index.js");
|
|
|
10
10
|
const useDeepEqualMemo_1 = require("../hooks/useDeepEqualMemo.js");
|
|
11
11
|
const shared_1 = require("../shared/index.js");
|
|
12
12
|
const utils_1 = require("../utils/index.js");
|
|
13
|
-
const ITEM_PROPS = ['i', 'h', 'w', 'x', 'y', 'parent'];
|
|
14
13
|
const hasGetMeta = (value) => {
|
|
15
14
|
return (typeof value === 'object' &&
|
|
16
15
|
value !== null &&
|
|
@@ -24,14 +23,24 @@ const hasReload = (value) => {
|
|
|
24
23
|
typeof value.reload === 'function');
|
|
25
24
|
};
|
|
26
25
|
function useMemoStateContext(props) {
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
//
|
|
26
|
+
// Since we don't want to store widget parameters with auto-height enabled in the store or server,
|
|
27
|
+
// the actual layout (visible to the user at any moment) will be stored in state.
|
|
28
|
+
// However, to ensure the store gets the layout without considering auto-height widgets,
|
|
29
|
+
// when a widget's height is adjusted, the original h (height) value is saved in originalLayouts,
|
|
30
|
+
// and the new adjusted height is stored in adjustedLayouts.
|
|
32
31
|
const originalLayouts = react_1.default.useRef({});
|
|
33
32
|
const adjustedLayouts = react_1.default.useRef({});
|
|
34
33
|
const nowrapAdjustedLayouts = react_1.default.useRef({});
|
|
34
|
+
// Enrich layout with default values from plugins.
|
|
35
|
+
// This ensures backward compatibility: if props.layout is already enriched (old flow),
|
|
36
|
+
// enrichLayoutWithDefaults will just merge and return similar result.
|
|
37
|
+
// If props.layout comes directly from config (new flow), it gets properly enriched.
|
|
38
|
+
const enrichedPropsLayout = react_1.default.useMemo(() => (0, utils_1.enrichLayoutWithDefaults)(props.config, props.registerManager),
|
|
39
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
40
|
+
[props.config.layout, props.registerManager]);
|
|
41
|
+
const internalBaselineLayoutRef = react_1.default.useRef(enrichedPropsLayout);
|
|
42
|
+
const [visualLayout, setVisualLayout] = react_1.default.useState(enrichedPropsLayout);
|
|
43
|
+
const [externalLayoutRevision, setExternalLayoutRevision] = react_1.default.useState(0);
|
|
35
44
|
const [temporaryLayout, setTemporaryLayout] = react_1.default.useState(null);
|
|
36
45
|
const resetTemporaryLayout = react_1.default.useCallback(() => setTemporaryLayout(null), [setTemporaryLayout]);
|
|
37
46
|
const dndContext = react_1.default.useContext(context_1.DashKitDnDContext);
|
|
@@ -45,17 +54,14 @@ function useMemoStateContext(props) {
|
|
|
45
54
|
props.onChange({ config, itemsStateAndParams, groups });
|
|
46
55
|
}
|
|
47
56
|
}, [props.config, props.groups, props.itemsStateAndParams, props.onChange]);
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
//
|
|
57
|
+
// Callback invoked when grid layout changes. The first argument is the actual layout config,
|
|
58
|
+
// which includes adjusted "h" values for items with auto-height enabled. To ensure that
|
|
59
|
+
// values stored are not adjusted (as if auto-height was disabled), we correct them using
|
|
60
|
+
// the originalLayouts stored without adjustments.
|
|
52
61
|
const onLayoutChange = react_1.default.useCallback((layout) => {
|
|
53
62
|
const currentInnerLayout = layout.map((item) => {
|
|
54
63
|
if (item.i in originalLayouts.current) {
|
|
55
|
-
// eslint-disable-next-line no-unused-vars
|
|
56
64
|
const _a = originalLayouts.current[item.i], { parent: _parent } = _a, originalCopy = tslib_1.__rest(_a, ["parent"]);
|
|
57
|
-
// Updating original if parent has changed and saving copy as original
|
|
58
|
-
// or leaving default
|
|
59
65
|
if (item.parent) {
|
|
60
66
|
originalCopy.parent = item.parent;
|
|
61
67
|
}
|
|
@@ -68,17 +74,25 @@ function useMemoStateContext(props) {
|
|
|
68
74
|
return Object.assign({}, item);
|
|
69
75
|
}
|
|
70
76
|
});
|
|
77
|
+
const baselineConfig = Object.assign(Object.assign({}, props.config), { layout: internalBaselineLayoutRef.current });
|
|
71
78
|
const newConfig = utils_1.UpdateManager.updateLayout({
|
|
72
79
|
layout: currentInnerLayout,
|
|
73
|
-
config:
|
|
80
|
+
config: baselineConfig,
|
|
74
81
|
});
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
82
|
+
(0, utils_1.emitDashKitChangeEvent)({
|
|
83
|
+
config: baselineConfig,
|
|
84
|
+
newConfig,
|
|
85
|
+
onChange,
|
|
86
|
+
emitDashKitEvent: props.emitDashKitEvent,
|
|
87
|
+
});
|
|
88
|
+
internalBaselineLayoutRef.current = newConfig.layout;
|
|
89
|
+
}, [props.config, props.emitDashKitEvent, onChange]);
|
|
79
90
|
const getLayoutItem = react_1.default.useCallback((id) => {
|
|
80
|
-
return
|
|
81
|
-
}, [
|
|
91
|
+
return internalBaselineLayoutRef.current.find(({ i }) => i === id);
|
|
92
|
+
}, []);
|
|
93
|
+
const getOuterLayout = react_1.default.useCallback(() => {
|
|
94
|
+
return (0, utils_1.convertEnrichedLayoutToConfigLayout)(internalBaselineLayoutRef.current);
|
|
95
|
+
}, []);
|
|
82
96
|
// to calculate items, only memorization of items and globalItems is important
|
|
83
97
|
const configItems = react_1.default.useMemo(() => (0, shared_1.getAllConfigItems)(props.config), [props.config.items, props.config.globalItems]);
|
|
84
98
|
const onItemRemove = react_1.default.useCallback((id) => {
|
|
@@ -94,7 +108,7 @@ function useMemoStateContext(props) {
|
|
|
94
108
|
}
|
|
95
109
|
onChange(utils_1.UpdateManager.removeItem({
|
|
96
110
|
id,
|
|
97
|
-
config: props.config,
|
|
111
|
+
config: Object.assign(Object.assign({}, props.config), { layout: getOuterLayout() }),
|
|
98
112
|
itemsStateAndParams: props.itemsStateAndParams,
|
|
99
113
|
}));
|
|
100
114
|
}
|
|
@@ -104,19 +118,22 @@ function useMemoStateContext(props) {
|
|
|
104
118
|
onChange,
|
|
105
119
|
props.config,
|
|
106
120
|
props.itemsStateAndParams,
|
|
107
|
-
|
|
121
|
+
getOuterLayout,
|
|
108
122
|
]);
|
|
109
123
|
const onItemStateAndParamsChange = react_1.default.useCallback((id, stateAndParams, options) => {
|
|
124
|
+
const currentConfig = Object.assign(Object.assign({}, props.config), { layout: getOuterLayout() });
|
|
110
125
|
onChange({
|
|
126
|
+
config: currentConfig,
|
|
127
|
+
// config is not strictly required here; ideally it should be removed along with the default props
|
|
111
128
|
itemsStateAndParams: utils_1.UpdateManager.changeStateAndParams({
|
|
112
129
|
id,
|
|
113
|
-
config:
|
|
130
|
+
config: currentConfig,
|
|
114
131
|
stateAndParams,
|
|
115
132
|
itemsStateAndParams: props.itemsStateAndParams,
|
|
116
133
|
options,
|
|
117
134
|
}),
|
|
118
135
|
});
|
|
119
|
-
}, [props.config, props.itemsStateAndParams, onChange]);
|
|
136
|
+
}, [props.config, props.itemsStateAndParams, getOuterLayout, onChange]);
|
|
120
137
|
const memorizeOriginalLayout = react_1.default.useCallback((widgetId, preAutoHeightLayout, postAutoHeightLayout) => {
|
|
121
138
|
let needUpdateLayout = false;
|
|
122
139
|
if (!(widgetId in originalLayouts.current)) {
|
|
@@ -141,7 +158,8 @@ function useMemoStateContext(props) {
|
|
|
141
158
|
}, []);
|
|
142
159
|
react_1.default.useMemo(() => {
|
|
143
160
|
const groups = props.groups;
|
|
144
|
-
|
|
161
|
+
// Use visualLayout instead of props.layout (which is now optional)
|
|
162
|
+
const layout = visualLayout;
|
|
145
163
|
const defaultProps = props.registerManager.gridLayout || {};
|
|
146
164
|
const nowrapGroups = {};
|
|
147
165
|
let hasNowrapGroups = false;
|
|
@@ -189,7 +207,17 @@ function useMemoStateContext(props) {
|
|
|
189
207
|
});
|
|
190
208
|
});
|
|
191
209
|
}
|
|
192
|
-
}, [props.registerManager, props.groups,
|
|
210
|
+
}, [props.registerManager, props.groups, visualLayout]);
|
|
211
|
+
// Synchronize internal baseline and visual layout when external props.layout changes re-init.
|
|
212
|
+
// When props.config.layout reference changes, external update occurred re-init.
|
|
213
|
+
react_1.default.useEffect(() => {
|
|
214
|
+
const internalNotEqualProps = !(0, isEqual_1.default)(internalBaselineLayoutRef.current, enrichedPropsLayout);
|
|
215
|
+
if (internalNotEqualProps) {
|
|
216
|
+
internalBaselineLayoutRef.current = enrichedPropsLayout;
|
|
217
|
+
setVisualLayout(enrichedPropsLayout);
|
|
218
|
+
setExternalLayoutRevision((r) => r + 1);
|
|
219
|
+
}
|
|
220
|
+
}, [enrichedPropsLayout]);
|
|
193
221
|
const itemsParams = (0, useDeepEqualMemo_1.useDeepEqualMemo)(() => (0, shared_1.getItemsParams)({
|
|
194
222
|
defaultGlobalParams: props.defaultGlobalParams,
|
|
195
223
|
globalParams: props.globalParams,
|
|
@@ -221,7 +249,7 @@ function useMemoStateContext(props) {
|
|
|
221
249
|
const adjusted = adjustedLayouts.current;
|
|
222
250
|
const original = originalLayouts.current;
|
|
223
251
|
const nowrapAdjust = nowrapAdjustedLayouts.current;
|
|
224
|
-
return
|
|
252
|
+
return visualLayout.map((item) => {
|
|
225
253
|
const widgetId = item.i;
|
|
226
254
|
if (widgetId in adjusted || widgetId in nowrapAdjust) {
|
|
227
255
|
original[widgetId] = item;
|
|
@@ -245,7 +273,7 @@ function useMemoStateContext(props) {
|
|
|
245
273
|
return item;
|
|
246
274
|
}
|
|
247
275
|
});
|
|
248
|
-
}, [
|
|
276
|
+
}, [visualLayout, layoutUpdateCounter]);
|
|
249
277
|
const reloadItems = react_1.default.useCallback((pluginsRefs, data) => {
|
|
250
278
|
pluginsRefs.forEach((ref) => ref && hasReload(ref) && ref.reload(data));
|
|
251
279
|
}, []);
|
|
@@ -328,16 +356,17 @@ function useMemoStateContext(props) {
|
|
|
328
356
|
onDropProp === null || onDropProp === void 0 ? void 0 : onDropProp({
|
|
329
357
|
newLayout: newLayout.reduce((memo, l) => {
|
|
330
358
|
if (l.i !== item.i) {
|
|
331
|
-
memo.push((0, pick_1.default)(l,
|
|
359
|
+
memo.push((0, pick_1.default)(l, shared_1.CONFIG_LAYOUT_FIELDS));
|
|
332
360
|
}
|
|
333
361
|
return memo;
|
|
334
362
|
}, []),
|
|
335
|
-
itemLayout: (0, pick_1.default)(item,
|
|
363
|
+
itemLayout: (0, pick_1.default)(item, shared_1.CONFIG_LAYOUT_FIELDS),
|
|
336
364
|
commit: resetTemporaryLayout,
|
|
337
365
|
dragProps: dragPropsContext,
|
|
338
366
|
});
|
|
339
367
|
}, [dragPropsContext, onDropProp, setTemporaryLayout, resetTemporaryLayout]);
|
|
340
368
|
const dashkitContextValue = react_1.default.useMemo(() => ({
|
|
369
|
+
externalLayoutRevision,
|
|
341
370
|
config: props.config,
|
|
342
371
|
configItems,
|
|
343
372
|
groups: props.groups,
|
|
@@ -377,6 +406,7 @@ function useMemoStateContext(props) {
|
|
|
377
406
|
onResize: props.onResize,
|
|
378
407
|
onResizeStop: props.onResizeStop,
|
|
379
408
|
}), [
|
|
409
|
+
externalLayoutRevision,
|
|
380
410
|
resultLayout,
|
|
381
411
|
temporaryLayout,
|
|
382
412
|
props.config,
|
|
@@ -446,7 +476,7 @@ function withContext(Component) {
|
|
|
446
476
|
const WithContext = (props) => {
|
|
447
477
|
const { dashkitContextValue, controlsContextValue } = useMemoStateContext(props);
|
|
448
478
|
return (react_1.default.createElement(context_1.DashKitContext.Provider, { value: dashkitContextValue },
|
|
449
|
-
react_1.default.createElement(context_1.
|
|
479
|
+
react_1.default.createElement(context_1.DashkitOverlayControlsContext.Provider, { value: controlsContextValue },
|
|
450
480
|
react_1.default.createElement(Component, null))));
|
|
451
481
|
};
|
|
452
482
|
WithContext.displayName = `withContext(${Component.displayName || Component.name || 'Component'})`;
|