openreplay/frontend/app/components/Dashboard/components/AddToDashboardButton.tsx
Andrey Babushkin fd5c0c9747
Add lokalisation (#3092)
* applied eslint

* add locales and lint the project

* removed error boundary

* updated locales

* fix min files

* fix locales
2025-03-06 17:43:15 +01:00

73 lines
1.7 KiB
TypeScript

// Components/Dashboard/components/AddToDashboardButton.tsx
import React from 'react';
import { Grid2x2Check } from 'lucide-react';
import { Button, Modal } from 'antd';
import Select from 'Shared/Select/Select';
import { Form } from 'UI';
import { useStore } from 'App/mstore';
import { useTranslation } from 'react-i18next';
interface Props {
metricId: string;
}
export const showAddToDashboardModal = (
metricId: string,
dashboardStore: any,
) => {
const { t } = useTranslation();
const dashboardOptions = dashboardStore.dashboards.map((i: any) => ({
key: i.id,
label: i.name,
value: i.dashboardId,
}));
let selectedId = dashboardOptions[0]?.value;
const onSave = (close: any) => {
const dashboard = dashboardStore.getDashboard(selectedId);
if (dashboard) {
dashboardStore.addWidgetToDashboard(dashboard, [metricId]).then(close);
}
};
Modal.confirm({
title: t('Add to selected dashboard'),
icon: null,
content: (
<Form.Field>
<Select
options={dashboardOptions}
defaultValue={selectedId}
onChange={({ value }: any) => (selectedId = value.value)}
/>
</Form.Field>
),
cancelText: t('Cancel'),
onOk: onSave,
okText: t('Add'),
footer: (_, { OkBtn, CancelBtn }) => (
<>
<CancelBtn />
<OkBtn />
</>
),
});
};
function AddToDashboardButton({ metricId }: Props) {
const { t } = useTranslation();
const { dashboardStore } = useStore();
return (
<Button
type="default"
onClick={() => showAddToDashboardModal(metricId, dashboardStore)}
icon={<Grid2x2Check size={18} />}
>
{t('Add to Dashboard')}
</Button>
);
}
export default AddToDashboardButton;