link-stack/apps/leafcutter/app/visualizations/[...visualizationID]/page.tsx

54 lines
1.5 KiB
TypeScript
Raw Normal View History

2023-02-13 13:46:56 +00:00
/* eslint-disable no-underscore-dangle */
2023-05-24 20:27:57 +00:00
import { NextPage, GetServerSideProps, GetServerSidePropsContext } from "next";
2023-02-13 13:46:56 +00:00
import { Client } from "@opensearch-project/opensearch";
2023-06-26 10:07:12 +00:00
import { VisualizationDetail } from "@/app/_components/VisualizationDetail";
import { getEmbedded } from "@/app/_lib/utils";
2023-02-13 13:46:56 +00:00
2023-05-24 20:27:57 +00:00
type VisualizationProps = {
visualization: any;
2023-06-20 07:49:52 +00:00
embedded: boolean;
2023-05-24 20:27:57 +00:00
};
2023-06-20 07:49:52 +00:00
const Visualization: NextPage<VisualizationProps> = ({
visualization,
embedded,
2023-06-26 10:07:12 +00:00
}) => <VisualizationDetail {...visualization} />;
2023-02-13 13:46:56 +00:00
export default Visualization;
export const getServerSideProps: GetServerSideProps = async (
context: GetServerSidePropsContext
) => {
const { visualizationID } = context.query;
const node = `https://${process.env.OPENSEARCH_USERNAME}:${process.env.OPENSEARCH_PASSWORD}@${process.env.OPENSEARCH_URL}`;
const client = new Client({
node,
ssl: {
rejectUnauthorized: false,
},
});
const rawResponse = await client.search({
index: ".kibana_1",
size: 200,
});
const response = rawResponse.body;
const hits = response.hits.hits.filter(
2023-05-24 20:27:57 +00:00
// @ts-expect-error
(hit: any) => hit._id.split(":")[1] === visualizationID[0]
2023-02-13 13:46:56 +00:00
);
const hit = hits[0];
2023-05-25 12:37:14 +00:00
const visualization = {
2023-02-13 13:46:56 +00:00
id: hit._id.split(":")[1],
title: hit._source.visualization.title,
description: hit._source.visualization.description,
url: `/app/visualize?security_tenant=global#/edit/${
hit._id.split(":")[1]
}?embed=true`,
};
2023-06-20 07:49:52 +00:00
return { props: { visualization, embedded: getEmbedded(context) } };
2023-02-13 13:46:56 +00:00
};