import {useState} from 'react'; import styled from '@emotion/styled'; import type {Location} from 'history'; import cloneDeep from 'lodash/cloneDeep'; import { createDashboard, deleteDashboard, fetchDashboard, updateDashboardFavorite, updateDashboardPermissions, } from 'sentry/actionCreators/dashboards'; import {addErrorMessage, addSuccessMessage} from 'sentry/actionCreators/indicator'; import type {Client} from 'sentry/api'; import {ActivityAvatar} from 'sentry/components/activity/item/avatar'; import UserAvatar from 'sentry/components/avatar/userAvatar'; import {Button} from 'sentry/components/button'; import {openConfirmModal} from 'sentry/components/confirm'; import EmptyStateWarning from 'sentry/components/emptyStateWarning'; import GridEditable, { COL_WIDTH_UNDEFINED, type GridColumnOrder, } from 'sentry/components/gridEditable'; import SortLink from 'sentry/components/gridEditable/sortLink'; import Link from 'sentry/components/links/link'; import TimeSince from 'sentry/components/timeSince'; import {IconCopy, IconDelete, IconStar} from 'sentry/icons'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import type {Organization} from 'sentry/types/organization'; import {trackAnalytics} from 'sentry/utils/analytics'; import {decodeScalar} from 'sentry/utils/queryString'; import withApi from 'sentry/utils/withApi'; import EditAccessSelector from 'sentry/views/dashboards/editAccessSelector'; import type { DashboardDetails, DashboardListItem, DashboardPermissions, } from 'sentry/views/dashboards/types'; import {cloneDashboard} from '../utils'; type Props = { api: Client; dashboards: DashboardListItem[] | undefined; location: Location; onDashboardsChange: () => void; organization: Organization; isLoading?: boolean; }; enum ResponseKeys { NAME = 'title', WIDGETS = 'widgetDisplay', OWNER = 'createdBy', ACCESS = 'permissions', CREATED = 'dateCreated', FAVORITE = 'isFavorited', } const SortKeys = { title: {asc: 'title', desc: '-title'}, dateCreated: {asc: 'dateCreated', desc: '-dateCreated'}, createdBy: {asc: 'mydashboards', desc: 'mydashboards'}, }; type FavoriteButtonProps = { api: Client; dashboardId: string; isFavorited: boolean; onDashboardsChange: () => void; organization: Organization; }; function FavoriteButton({ isFavorited, api, organization, dashboardId, onDashboardsChange, }: FavoriteButtonProps) { const [favorited, setFavorited] = useState(isFavorited); return (