import { Trans, t } from '@i18next-toolkit/react';
import { Button, Form, Input, Modal, Table } from 'antd';
import React, { useMemo, useState } from 'react';
import { AppRouterOutput, trpc } from '../../api/trpc';
import { useCurrentWorkspaceId } from '../../store/user';
import { type ColumnsType } from 'antd/es/table/interface';
import {
BarChartOutlined,
EditOutlined,
PlusOutlined,
} from '@ant-design/icons';
import { useNavigate } from 'react-router';
import { PageHeader } from '../PageHeader';
import { useEvent } from '../../hooks/useEvent';
import { TelemetryCounter } from './TelemetryCounter';
type TelemetryInfo = AppRouterOutput['telemetry']['all'][number];
export const TelemetryList: React.FC = React.memo(() => {
const workspaceId = useCurrentWorkspaceId();
const [isModalOpen, setIsModalOpen] = useState(false);
const [form] = Form.useForm<{ id?: string; name: string }>();
const upsertTelemetryMutation = trpc.telemetry.upsert.useMutation();
const utils = trpc.useUtils();
const handleAddTelemetry = useEvent(async () => {
await form.validateFields();
const values = form.getFieldsValue();
await upsertTelemetryMutation.mutateAsync({
telemetryId: values.id,
workspaceId,
name: values.name,
});
utils.telemetry.all.refetch();
setIsModalOpen(false);
form.resetFields();
});
const handleEditTelemetry = useEvent(async (info: TelemetryInfo) => {
setIsModalOpen(true);
form.setFieldsValue({
id: info.id,
name: info.name,
});
});
return (
Telemetry is a technology that reports access data even on pages
that are not under your control. As long as the other website
allows the insertion of third-party images (e.g., forums, blogs,
and various rich-text editors), then the data can be collected
and used to analyze the images when they are loaded by the user.
Generally, we will use a one-pixel blank image so that it will
not affect the user's normal use.
At the same time, we can also use it in some client-side
application scenarios, such as collecting the frequency of cli
usage, such as collecting the installation of selfhosted apps,
and so on.
}
action={
}
size="large"
onClick={() => setIsModalOpen(true)}
>
{t('Add Telemetry')}
}
/>
handleAddTelemetry()}
onCancel={() => setIsModalOpen(false)}
>
);
});
TelemetryList.displayName = 'TelemetryList';
const TelemetryListTable: React.FC<{
onEdit: (info: TelemetryInfo) => void;
}> = React.memo((props) => {
const workspaceId = useCurrentWorkspaceId();
const { data = [], isLoading } = trpc.telemetry.all.useQuery({
workspaceId,
});
const navigate = useNavigate();
const columns = useMemo((): ColumnsType => {
return [
{
dataIndex: 'name',
title: t('Name'),
},
{
dataIndex: 'id',
title: t('Count'),
align: 'center',
width: 130,
render: (id) => {
return ;
},
},
{
key: 'action',
title: t('Actions'),
align: 'right',
width: 240,
render: (_, record) => {
return (
}
onClick={() => props.onEdit(record)}
>
{t('Edit')}
}
onClick={() => {
navigate(`/telemetry/${record.id}`);
}}
>
{t('View')}
);
},
},
] as ColumnsType;
}, []);
return (
);
});
TelemetryListTable.displayName = 'TelemetryListTable';