diff --git a/frontend/src/container/GridCardLayout/DashboardEmptyState/DashboardEmptyState.tsx b/frontend/src/container/GridCardLayout/DashboardEmptyState/DashboardEmptyState.tsx index 099d74411b..29e2defe2a 100644 --- a/frontend/src/container/GridCardLayout/DashboardEmptyState/DashboardEmptyState.tsx +++ b/frontend/src/container/GridCardLayout/DashboardEmptyState/DashboardEmptyState.tsx @@ -17,6 +17,7 @@ export default function DashboardEmptyState(): JSX.Element { selectedDashboard, isDashboardLocked, handleToggleDashboardSlider, + setSelectedRowWidgetId, } = useDashboard(); const { user } = useAppContext(); @@ -34,6 +35,7 @@ export default function DashboardEmptyState(): JSX.Element { const [addPanelPermission] = useComponentPermission(permissions, userRole); const onEmptyWidgetHandler = useCallback(() => { + setSelectedRowWidgetId(null); handleToggleDashboardSlider(true); logEvent('Dashboard Detail: Add new panel clicked', { dashboardId: selectedDashboard?.uuid, diff --git a/frontend/src/container/GridCardLayout/GridCardLayout.styles.scss b/frontend/src/container/GridCardLayout/GridCardLayout.styles.scss index 567bd10470..c450801537 100644 --- a/frontend/src/container/GridCardLayout/GridCardLayout.styles.scss +++ b/frontend/src/container/GridCardLayout/GridCardLayout.styles.scss @@ -133,7 +133,8 @@ .menu-content { .section-1 { - .rename-btn { + .rename-btn, + .new-panel-btn { display: flex; align-items: center; gap: 6px; @@ -150,6 +151,10 @@ margin-inline-end: 0px; } } + + .rename-btn { + padding-bottom: 10px; + } } .section-2 { diff --git a/frontend/src/container/GridCardLayout/GridCardLayout.tsx b/frontend/src/container/GridCardLayout/GridCardLayout.tsx index c61fbcc7bc..6fda3fbc5e 100644 --- a/frontend/src/container/GridCardLayout/GridCardLayout.tsx +++ b/frontend/src/container/GridCardLayout/GridCardLayout.tsx @@ -65,6 +65,7 @@ function GraphLayout(props: GraphLayoutProps): JSX.Element { isDashboardLocked, dashboardQueryRangeCalled, setDashboardQueryRangeCalled, + setSelectedRowWidgetId, } = useDashboard(); const { data } = selectedDashboard || {}; const { pathname } = useLocation(); @@ -174,6 +175,7 @@ function GraphLayout(props: GraphLayoutProps): JSX.Element { updateDashboardMutation.mutate(updatedDashboard, { onSuccess: (updatedDashboard) => { + setSelectedRowWidgetId(null); if (updatedDashboard.payload) { if (updatedDashboard.payload.data.layout) setLayouts(sortLayout(updatedDashboard.payload.data.layout)); diff --git a/frontend/src/container/GridCardLayout/WidgetRow.tsx b/frontend/src/container/GridCardLayout/WidgetRow.tsx index 70e5b64670..d46bff3b5d 100644 --- a/frontend/src/container/GridCardLayout/WidgetRow.tsx +++ b/frontend/src/container/GridCardLayout/WidgetRow.tsx @@ -1,7 +1,12 @@ import { Button, Popover } from 'antd'; -import { EllipsisIcon, PenLine, X } from 'lucide-react'; +import useComponentPermission from 'hooks/useComponentPermission'; +import { EllipsisIcon, PenLine, Plus, X } from 'lucide-react'; +import { useAppContext } from 'providers/App/App'; +import { useDashboard } from 'providers/Dashboard/Dashboard'; import { useState } from 'react'; import { Layout } from 'react-grid-layout'; +import { ROLES, USER_ROLES } from 'types/roles'; +import { ComponentTypes } from 'utils/permission'; interface WidgetRowHeaderProps { rowWidgetProperties: { @@ -27,6 +32,23 @@ export function WidgetRowHeader(props: WidgetRowHeaderProps): JSX.Element { id, } = props; const [isRowSettingsOpen, setIsRowSettingsOpen] = useState(false); + + const { + handleToggleDashboardSlider, + selectedDashboard, + isDashboardLocked, + setSelectedRowWidgetId, + } = useDashboard(); + + const permissions: ComponentTypes[] = ['add_panel']; + const { user } = useAppContext(); + + const userRole: ROLES | null = + selectedDashboard?.created_by === user?.email + ? (USER_ROLES.AUTHOR as ROLES) + : user.role; + const [addPanelPermission] = useComponentPermission(permissions, userRole); + return ( +
+ +
{!rowWidgetProperties.collapsed && (