**TLDR** Refactor WebhoonAnalytics Graph to a more abstract version AnalyticsGraph (in analytics module). Thus enabling the components to be used on different instances (ex: new endpoint, new kind of graph). **In order to test:** 1. Set ANALYTICS_ENABLED to true 2. Set TINYBIRD_JWT_TOKEN to the ADMIN token from the workspace twenty_analytics_playground 3. Set TINYBIRD_JWT_TOKEN to the datasource or your admin token from the workspace twenty_analytics_playground 4. Create a Webhook in twenty and set wich events it needs to track 5. Run twenty-worker in order to make the webhooks work. 6. Do your tasks in order to populate the data 7. Enter to settings> webhook>your webhook and the statistics section should be displayed. --------- Co-authored-by: Félix Malfait <felix@twenty.com>
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import { ANALYTICS_ENDPOINT_TYPE_MAP } from '@/analytics/constants/AnalyticsEndpointTypeMap';
|
|
import { ANALYTICS_GRAPH_OPTION_MAP } from '@/analytics/constants/AnalyticsGraphOptionMap';
|
|
import { AnalyticsComponentProps } from '@/analytics/types/AnalyticsComponentProps';
|
|
import { computeStartEndDate } from '@/analytics/utils/computeStartEndDate';
|
|
|
|
type fetchGraphDataOrThrowProps = AnalyticsComponentProps & {
|
|
windowLength: '7D' | '1D' | '12H' | '4H';
|
|
tinybirdJwt: string;
|
|
};
|
|
|
|
export const fetchGraphDataOrThrow = async ({
|
|
recordId,
|
|
windowLength,
|
|
tinybirdJwt,
|
|
endpointName,
|
|
}: fetchGraphDataOrThrowProps) => {
|
|
const recordType = ANALYTICS_ENDPOINT_TYPE_MAP[endpointName];
|
|
const queryString = new URLSearchParams({
|
|
...ANALYTICS_GRAPH_OPTION_MAP[windowLength],
|
|
...computeStartEndDate(windowLength),
|
|
...{ [`${recordType}Id`]: recordId },
|
|
}).toString();
|
|
|
|
const response = await fetch(
|
|
`https://api.eu-central-1.aws.tinybird.co/v0/pipes/${endpointName}.json?${queryString}`,
|
|
{
|
|
headers: {
|
|
Authorization: 'Bearer ' + tinybirdJwt,
|
|
},
|
|
},
|
|
);
|
|
const result = await response.json();
|
|
|
|
if (!response.ok) {
|
|
throw new Error(result.error);
|
|
}
|
|
return result.data;
|
|
};
|