import { css, cx } from '@emotion/css';
import { GrafanaTheme2 } from '@grafana/data/src';
import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src';
import { config } from '@grafana/runtime';
import { Button, LoadingPlaceholder, Modal, ModalsController, useStyles2 } from '@grafana/ui/src';
import { Trans, t } from 'app/core/internationalization';
import {
generatePublicDashboardConfigUrl,
generatePublicDashboardUrl,
} from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';
import { useGetActiveUserDashboardsQuery } from '../../dashboard/api/publicDashboardApi';
const selectors = e2eSelectors.pages.UserListPage.UsersListPublicDashboardsPage.DashboardsListModal;
export const DashboardsListModal = ({ email, onDismiss }: { email: string; onDismiss: () => void }) => {
const styles = useStyles2(getStyles);
const { data: dashboards, isLoading } = useGetActiveUserDashboardsQuery(email);
return (
{isLoading ? (
) : (
dashboards?.map((dash) => (
))
)}
);
};
export const DashboardsListModalButton = ({ email }: { email: string }) => {
const translatedDashboardListModalButtonText = t(
'public-dashboard-users-access-list.dashboard-modal.open-dashboard-list-text',
'Open dashboards list'
);
return (
{({ showModal, hideModal }) => (
);
};
const getStyles = (theme: GrafanaTheme2) => ({
modal: css({
width: '590px',
}),
loading: css({
display: 'flex',
justifyContent: 'center',
}),
listItem: css({
display: 'flex',
flexDirection: 'column',
gap: theme.spacing(0.5),
}),
divider: css({
margin: theme.spacing(1.5, 0),
color: theme.colors.text.secondary,
}),
urlsContainer: css({
display: 'flex',
gap: theme.spacing(0.5),
[theme.breakpoints.down('sm')]: {
flexDirection: 'column',
},
}),
urlsDivider: css({
color: theme.colors.text.secondary,
[theme.breakpoints.down('sm')]: {
display: 'none',
},
}),
dashboardTitle: css({
fontSize: theme.typography.body.fontSize,
fontWeight: theme.typography.fontWeightBold,
marginBottom: 0,
}),
url: css({
fontSize: theme.typography.body.fontSize,
}),
});