import { IconButton, PopoverMenu, TextButton } from '@wix/design-system'; import React, { useImperativeHandle, useRef, forwardRef } from 'react'; import { observer } from 'mobx-react-lite'; import { ChevronDown, MoreSmall, Confirm, Duplicate, Edit, Delete, Flag, FlagDismiss, Pin, Revert, } from '@wix/wix-ui-icons-common'; import { FiltersMap } from '@wix/bex-core'; import { CollectionViewsState } from '../../state'; import { useWixPatternsContainer } from '@wix/bex-core/react'; export interface ManageViewPopoverHandle { focusTrigger: () => void; } export interface ManageViewPopoverProps { state: CollectionViewsState; origin: string; /** When true, renders as an inline IconButton inside the dropdown */ redesign?: boolean; } function _ManageViewPopover( props: ManageViewPopoverProps, ref: React.Ref, ) { const container = useWixPatternsContainer(); const { state, redesign } = props; const { views, table, emitter, isViewChanged } = state; const buttonRef = useRef(null); useImperativeHandle(ref, () => ({ focusTrigger: () => buttonRef.current?.focus(), })); const { translate: t } = container; const triggerElement = redesign ? ( { // Stop propagation so clicking the 3-dots button doesn't select // the dropdown option it sits inside of. e.stopPropagation(); // Prevent default so the click doesn't trigger form submission // or other native behavior while inside DropdownLayout. e.preventDefault(); }} > ) : ( } > {t('cairo.manageView.CTA')} ); return ( { emitter.emit('openManageViewPopoverMenu'); }} dataHook="manage-view-popover" triggerElement={triggerElement} > } onClick={() => { state.saveViewChanges(); }} /> {!redesign && ( { views.saveViewModal.open(); table.closeSidePanel(); }} text={t('cairo.manageView.saveNewView.CTA')} prefixIcon={} /> )} { views.renameViewModal.open(); table.closeSidePanel(); }} text={t('cairo.manageView.Rename.CTA')} prefixIcon={} /> { state.setAsDefaultView(); }} text={ views.isDefaultView ? t('cairo.manageView.setAsDefault.reset.CTA') : t('cairo.manageView.setAsDefault.CTA') } prefixIcon={ views.isDefaultView ? ( redesign ? ( ) : ( ) ) : redesign ? ( ) : ( ) } /> { state.deleteView(); }} text={t('cairo.manageView.Delete.CTA')} prefixIcon={} /> ); } export const ManageViewPopover = observer( forwardRef(_ManageViewPopover), ) as ( props: ManageViewPopoverProps & { ref?: React.Ref; }, ) => React.ReactElement | null;