Update Link->Leafcutter integration
This commit is contained in:
parent
baa1b32737
commit
495e8338b9
31 changed files with 239 additions and 343 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import Image from "next/image";
|
import Image from "next/legacy/image";
|
||||||
import { Grid, Box, GridSize } from "@mui/material";
|
import { Grid, Box, GridSize } from "@mui/material";
|
||||||
import AboutDots from "images/about-dots.png";
|
import AboutDots from "images/about-dots.png";
|
||||||
import { useAppContext } from "./AppProvider";
|
import { useAppContext } from "./AppProvider";
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import Image from "next/image";
|
import Image from "next/legacy/image";
|
||||||
import { signOut } from "next-auth/react";
|
import { signOut } from "next-auth/react";
|
||||||
import { Button, Box, Menu, MenuItem } from "@mui/material";
|
import { Button, Box, Menu, MenuItem } from "@mui/material";
|
||||||
import { useTranslate } from "react-polyglot";
|
import { useTranslate } from "react-polyglot";
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import { Container, Grid, Box, Button } from "@mui/material";
|
import { Container, Grid, Box, Button } from "@mui/material";
|
||||||
import { useTranslate } from "react-polyglot";
|
import { useTranslate } from "react-polyglot";
|
||||||
import Image from "next/image";
|
import Image from "next/legacy/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import leafcutterLogo from "images/leafcutter-logo.png";
|
import leafcutterLogo from "images/leafcutter-logo.png";
|
||||||
import footerLogo from "images/footer-logo.png";
|
import footerLogo from "images/footer-logo.png";
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { FC, PropsWithChildren } from "react";
|
import { FC, PropsWithChildren } from "react";
|
||||||
|
import getConfig from "next/config";
|
||||||
import { Grid, Container } from "@mui/material";
|
import { Grid, Container } from "@mui/material";
|
||||||
import CookieConsent from "react-cookie-consent";
|
import CookieConsent from "react-cookie-consent";
|
||||||
import { useCookies } from "react-cookie";
|
import { useCookies } from "react-cookie";
|
||||||
|
|
@ -10,7 +11,13 @@ import { useAppContext } from "./AppProvider";
|
||||||
|
|
||||||
export const Layout: FC<PropsWithChildren> = ({ children }) => {
|
export const Layout: FC<PropsWithChildren> = ({ children }) => {
|
||||||
const [cookies, setCookie] = useCookies(["cookieConsent"]);
|
const [cookies, setCookie] = useCookies(["cookieConsent"]);
|
||||||
|
|
||||||
const consentGranted = cookies.cookieConsent === "true";
|
const consentGranted = cookies.cookieConsent === "true";
|
||||||
|
console.log({ val: process.env.LINK_EMBEDDED });
|
||||||
|
const {
|
||||||
|
publicRuntimeConfig: { embedded },
|
||||||
|
} = getConfig();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
colors: {
|
colors: {
|
||||||
white,
|
white,
|
||||||
|
|
@ -24,14 +31,18 @@ export const Layout: FC<PropsWithChildren> = ({ children }) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Grid container direction="column">
|
<Grid container direction="column">
|
||||||
<Grid item>
|
{!embedded && (
|
||||||
<TopNav />
|
<Grid item>
|
||||||
</Grid>
|
<TopNav />
|
||||||
<Sidebar open />
|
</Grid>
|
||||||
<Grid item sx={{ mt: "100px", ml: "310px" }}>
|
)}
|
||||||
|
{!embedded && <Sidebar open />}
|
||||||
|
<Grid
|
||||||
|
item
|
||||||
|
sx={{ mt: embedded ? 0 : "100px", ml: embedded ? 0 : "310px" }}
|
||||||
|
>
|
||||||
<Container sx={{ padding: 2 }}>{children}</Container>
|
<Container sx={{ padding: 2 }}>{children}</Container>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item>{/* <Footer /> */}</Grid>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
{!consentGranted ? (
|
{!consentGranted ? (
|
||||||
<CookieConsent
|
<CookieConsent
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import AboutMenuIcon from "images/about-menu.png";
|
||||||
import TrendsMenuIcon from "images/trends-menu.png";
|
import TrendsMenuIcon from "images/trends-menu.png";
|
||||||
import SearchCreateMenuIcon from "images/search-create-menu.png";
|
import SearchCreateMenuIcon from "images/search-create-menu.png";
|
||||||
import FAQMenuIcon from "images/faq-menu.png";
|
import FAQMenuIcon from "images/faq-menu.png";
|
||||||
import Image from "next/image";
|
import Image from "next/legacy/image";
|
||||||
import {
|
import {
|
||||||
Box,
|
Box,
|
||||||
Grid,
|
Grid,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import Image from "next/image";
|
import Image from "next/legacy/image";
|
||||||
import { AppBar, Grid, Box } from "@mui/material";
|
import { AppBar, Grid, Box } from "@mui/material";
|
||||||
import { useTranslate } from "react-polyglot";
|
import { useTranslate } from "react-polyglot";
|
||||||
import LeafcutterLogo from "images/leafcutter-logo.png";
|
import LeafcutterLogo from "images/leafcutter-logo.png";
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import Image from "next/image";
|
import Image from "next/legacy/image";
|
||||||
import { Card, Grid } from "@mui/material";
|
import { Card, Grid } from "@mui/material";
|
||||||
import horizontalBar from "images/horizontal-bar.svg";
|
import horizontalBar from "images/horizontal-bar.svg";
|
||||||
import horizontalBarStacked from "images/horizontal-bar-stacked.svg";
|
import horizontalBarStacked from "images/horizontal-bar-stacked.svg";
|
||||||
|
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
import { GetServerSideProps, GetServerSidePropsContext } from "next";
|
|
||||||
import { getSession } from "next-auth/react";
|
|
||||||
|
|
||||||
export const checkAuth: GetServerSideProps = async (
|
|
||||||
context: GetServerSidePropsContext
|
|
||||||
) => {
|
|
||||||
const session = await getSession(context);
|
|
||||||
|
|
||||||
if (!session) {
|
|
||||||
return {
|
|
||||||
redirect: {
|
|
||||||
destination: "/login",
|
|
||||||
permanent: false,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
props: { session },
|
|
||||||
};
|
|
||||||
};
|
|
||||||
39
apps/leafcutter/middleware.ts
Normal file
39
apps/leafcutter/middleware.ts
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
import { withAuth } from "next-auth/middleware";
|
||||||
|
|
||||||
|
export default withAuth(
|
||||||
|
() => { },
|
||||||
|
{
|
||||||
|
pages: {
|
||||||
|
signIn: `/login`,
|
||||||
|
},
|
||||||
|
callbacks: {
|
||||||
|
authorized: ({ token, req }) => {
|
||||||
|
const {
|
||||||
|
url,
|
||||||
|
headers,
|
||||||
|
} = req;
|
||||||
|
|
||||||
|
const embedded = process.env.LINK_EMBEDDED === "true";
|
||||||
|
if (embedded) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check login page
|
||||||
|
const parsedURL = new URL(url);
|
||||||
|
if (parsedURL.pathname.startsWith('/login')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check session auth
|
||||||
|
const authorizedDomains = ["redaranj.com", "digiresilience.org"];
|
||||||
|
const userDomain = token?.email?.toLowerCase().split("@").pop() ?? "unauthorized.net";
|
||||||
|
|
||||||
|
if (authorizedDomains.includes(userDomain)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
publicRuntimeConfig: {
|
||||||
|
embedded: Boolean(process.env.LINK_EMBEDDED),
|
||||||
|
},
|
||||||
i18n: {
|
i18n: {
|
||||||
locales: ["en", "fr"],
|
locales: ["en", "fr"],
|
||||||
defaultLocale: "en",
|
defaultLocale: "en",
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"name": "leafcutter",
|
"name": "leafcutter",
|
||||||
"version": "0.1.54",
|
"version": "0.2.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "next dev -p 3001",
|
||||||
"login": "aws sso login --profile cdr-leafcutter-dashboard-production",
|
"login": "aws sso login --profile cdr-leafcutter-dashboard-production",
|
||||||
"kubeconfig": "aws eks update-kubeconfig --name cdr-leafcutter-dashboard-cluster --profile cdr-leafcutter-dashboard-production",
|
"kubeconfig": "aws eks update-kubeconfig --name cdr-leafcutter-dashboard-cluster --profile cdr-leafcutter-dashboard-production",
|
||||||
"fwd:opensearch": "kubectl port-forward opensearch-cluster-master-0 9200:9200 --namespace leafcutter",
|
"fwd:opensearch": "kubectl port-forward opensearch-cluster-master-0 9200:9200 --namespace leafcutter",
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
import { GetServerSideProps, GetServerSidePropsContext } from "next";
|
import { GetServerSideProps, GetServerSidePropsContext } from "next";
|
||||||
import { useTranslate } from "react-polyglot";
|
import { useTranslate } from "react-polyglot";
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
import Image from "next/image";
|
import Image from "next/legacy/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { Grid, Container, Box, Button } from "@mui/material";
|
import { Grid, Container, Box, Button } from "@mui/material";
|
||||||
import { Layout } from "components/Layout";
|
import { Layout } from "components/Layout";
|
||||||
import { checkAuth } from "lib/checkAuth";
|
|
||||||
import { useAppContext } from "components/AppProvider";
|
import { useAppContext } from "components/AppProvider";
|
||||||
import { PageHeader } from "components/PageHeader";
|
import { PageHeader } from "components/PageHeader";
|
||||||
import { AboutFeature } from "components/AboutFeature";
|
import { AboutFeature } from "components/AboutFeature";
|
||||||
|
|
@ -166,7 +165,3 @@ const About = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export default About;
|
export default About;
|
||||||
|
|
||||||
export const getServerSideProps: GetServerSideProps = async (
|
|
||||||
context: GetServerSidePropsContext
|
|
||||||
) => checkAuth(context);
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import { Box, Grid } from "@mui/material";
|
||||||
import { useCookies } from "react-cookie";
|
import { useCookies } from "react-cookie";
|
||||||
import { getTemplates } from "lib/opensearch";
|
import { getTemplates } from "lib/opensearch";
|
||||||
import { Layout } from "components/Layout";
|
import { Layout } from "components/Layout";
|
||||||
import { checkAuth } from "lib/checkAuth";
|
|
||||||
import { useAppContext } from "components/AppProvider";
|
import { useAppContext } from "components/AppProvider";
|
||||||
import { PageHeader } from "components/PageHeader";
|
import { PageHeader } from "components/PageHeader";
|
||||||
import { VisualizationBuilder } from "components/VisualizationBuilder";
|
import { VisualizationBuilder } from "components/VisualizationBuilder";
|
||||||
|
|
@ -75,13 +74,7 @@ export default Create;
|
||||||
export const getServerSideProps: GetServerSideProps = async (
|
export const getServerSideProps: GetServerSideProps = async (
|
||||||
context: GetServerSidePropsContext
|
context: GetServerSidePropsContext
|
||||||
) => {
|
) => {
|
||||||
const res: any = await checkAuth(context);
|
const templates = await getTemplates(100);
|
||||||
|
|
||||||
if (res.redirect) {
|
return { props: { templates } };
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
res.props.templates = await getTemplates(100);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
import { GetServerSideProps, GetServerSidePropsContext } from "next";
|
|
||||||
import { useTranslate } from "react-polyglot";
|
import { useTranslate } from "react-polyglot";
|
||||||
import { Box, Grid } from "@mui/material";
|
import { Box, Grid } from "@mui/material";
|
||||||
import { Layout } from "components/Layout";
|
import { Layout } from "components/Layout";
|
||||||
import { checkAuth } from "lib/checkAuth";
|
|
||||||
import { PageHeader } from "components/PageHeader";
|
import { PageHeader } from "components/PageHeader";
|
||||||
import { Question } from "components/Question";
|
import { Question } from "components/Question";
|
||||||
import { useAppContext } from "components/AppProvider";
|
import { useAppContext } from "components/AppProvider";
|
||||||
|
|
@ -104,7 +102,3 @@ const FAQ = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export default FAQ;
|
export default FAQ;
|
||||||
|
|
||||||
export const getServerSideProps: GetServerSideProps = async (
|
|
||||||
context: GetServerSidePropsContext
|
|
||||||
) => checkAuth(context);
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
import { NextPage, GetServerSideProps, GetServerSidePropsContext } from "next";
|
import { NextPage, GetServerSideProps, GetServerSidePropsContext } from "next";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
|
import { getSession } from "next-auth/react";
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import ReactMarkdown from "react-markdown";
|
import ReactMarkdown from "react-markdown";
|
||||||
|
|
@ -8,7 +9,6 @@ import { Grid, Button } from "@mui/material";
|
||||||
import { useTranslate } from "react-polyglot";
|
import { useTranslate } from "react-polyglot";
|
||||||
import { useCookies } from "react-cookie";
|
import { useCookies } from "react-cookie";
|
||||||
import { Layout } from "components/Layout";
|
import { Layout } from "components/Layout";
|
||||||
import { checkAuth } from "lib/checkAuth";
|
|
||||||
import { getUserVisualizations } from "lib/opensearch";
|
import { getUserVisualizations } from "lib/opensearch";
|
||||||
import { Welcome } from "components/Welcome";
|
import { Welcome } from "components/Welcome";
|
||||||
import { WelcomeDialog } from "components/WelcomeDialog";
|
import { WelcomeDialog } from "components/WelcomeDialog";
|
||||||
|
|
@ -111,15 +111,10 @@ export default MyVisualizations;
|
||||||
export const getServerSideProps: GetServerSideProps = async (
|
export const getServerSideProps: GetServerSideProps = async (
|
||||||
context: GetServerSidePropsContext
|
context: GetServerSidePropsContext
|
||||||
) => {
|
) => {
|
||||||
const res: any = await checkAuth(context);
|
const session = (await getSession(context)) ?? null;
|
||||||
|
const visualizations = await getUserVisualizations(
|
||||||
if (res.redirect) {
|
session?.user?.email ?? "none",
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
res.props.visualizations = await getUserVisualizations(
|
|
||||||
res.props.session.user.email,
|
|
||||||
20
|
20
|
||||||
);
|
);
|
||||||
return res;
|
return { props: { visualizations } };
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
import { NextPage } from "next";
|
import { NextPage } from "next";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import Image from "next/image";
|
import Image from "next/legacy/image";
|
||||||
import { Box, Grid, Container, IconButton } from "@mui/material";
|
import { Box, Grid, Container, IconButton } from "@mui/material";
|
||||||
import { Apple as AppleIcon, Google as GoogleIcon } from "@mui/icons-material";
|
import { Apple as AppleIcon, Google as GoogleIcon } from "@mui/icons-material";
|
||||||
import { useTranslate } from "react-polyglot";
|
import { useTranslate } from "react-polyglot";
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import { GetServerSideProps, GetServerSidePropsContext } from "next";
|
||||||
// import { Client } from "@opensearch-project/opensearch";
|
// import { Client } from "@opensearch-project/opensearch";
|
||||||
import { RawDataViewer } from "components/RawDataViewer";
|
import { RawDataViewer } from "components/RawDataViewer";
|
||||||
import { VisualizationDetail } from "components/VisualizationDetail";
|
import { VisualizationDetail } from "components/VisualizationDetail";
|
||||||
import { checkAuth } from "lib/checkAuth";
|
|
||||||
// import { createVisualization } from "lib/opensearch";
|
// import { createVisualization } from "lib/opensearch";
|
||||||
|
|
||||||
interface PreviewProps {
|
interface PreviewProps {
|
||||||
|
|
@ -25,16 +24,12 @@ const Preview: FC<PreviewProps> = ({
|
||||||
);
|
);
|
||||||
|
|
||||||
export default Preview;
|
export default Preview;
|
||||||
|
/*
|
||||||
export const getServerSideProps: GetServerSideProps = async (
|
export const getServerSideProps: GetServerSideProps = async (
|
||||||
context: GetServerSidePropsContext
|
context: GetServerSidePropsContext
|
||||||
) => {
|
) => {
|
||||||
const res: any = await checkAuth(context);
|
|
||||||
|
|
||||||
if (res.redirect) {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
const {
|
const {
|
||||||
visualizationID,
|
visualizationID,
|
||||||
searchQuery,
|
searchQuery,
|
||||||
|
|
@ -104,6 +99,8 @@ export const getServerSideProps: GetServerSideProps = async (
|
||||||
}));
|
}));
|
||||||
console.log({ data: res.props.data });
|
console.log({ data: res.props.data });
|
||||||
console.log(res.props.data[0]);
|
console.log(res.props.data[0]);
|
||||||
*/
|
|
||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import Head from "next/head";
|
||||||
import { Grid, Box } from "@mui/material";
|
import { Grid, Box } from "@mui/material";
|
||||||
import { useTranslate } from "react-polyglot";
|
import { useTranslate } from "react-polyglot";
|
||||||
import { Layout } from "components/Layout";
|
import { Layout } from "components/Layout";
|
||||||
import { checkAuth } from "lib/checkAuth";
|
|
||||||
import { getTrends } from "lib/opensearch";
|
import { getTrends } from "lib/opensearch";
|
||||||
import { PageHeader } from "components/PageHeader";
|
import { PageHeader } from "components/PageHeader";
|
||||||
import { VisualizationCard } from "components/VisualizationCard";
|
import { VisualizationCard } from "components/VisualizationCard";
|
||||||
|
|
@ -81,12 +80,7 @@ export default Trends;
|
||||||
export const getServerSideProps: GetServerSideProps = async (
|
export const getServerSideProps: GetServerSideProps = async (
|
||||||
context: GetServerSidePropsContext
|
context: GetServerSidePropsContext
|
||||||
) => {
|
) => {
|
||||||
const res: any = await checkAuth(context);
|
const visualizations = await getTrends(25);
|
||||||
if (res.redirect) {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
res.props.visualizations = await getTrends(25);
|
return { props: { visualizations } };
|
||||||
|
|
||||||
return res;
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import { Client } from "@opensearch-project/opensearch";
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
import { Layout } from "components/Layout";
|
import { Layout } from "components/Layout";
|
||||||
import { VisualizationDetail } from "components/VisualizationDetail";
|
import { VisualizationDetail } from "components/VisualizationDetail";
|
||||||
import { checkAuth } from "lib/checkAuth";
|
|
||||||
|
|
||||||
type VisualizationProps = {
|
type VisualizationProps = {
|
||||||
visualization: any;
|
visualization: any;
|
||||||
|
|
@ -24,12 +23,6 @@ export default Visualization;
|
||||||
export const getServerSideProps: GetServerSideProps = async (
|
export const getServerSideProps: GetServerSideProps = async (
|
||||||
context: GetServerSidePropsContext
|
context: GetServerSidePropsContext
|
||||||
) => {
|
) => {
|
||||||
const res: any = await checkAuth(context);
|
|
||||||
|
|
||||||
if (res.redirect) {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
const { visualizationID } = context.query;
|
const { visualizationID } = context.query;
|
||||||
|
|
||||||
const node = `https://${process.env.OPENSEARCH_USERNAME}:${process.env.OPENSEARCH_PASSWORD}@${process.env.OPENSEARCH_URL}`;
|
const node = `https://${process.env.OPENSEARCH_USERNAME}:${process.env.OPENSEARCH_PASSWORD}@${process.env.OPENSEARCH_URL}`;
|
||||||
|
|
@ -51,7 +44,7 @@ export const getServerSideProps: GetServerSideProps = async (
|
||||||
(hit: any) => hit._id.split(":")[1] === visualizationID[0]
|
(hit: any) => hit._id.split(":")[1] === visualizationID[0]
|
||||||
);
|
);
|
||||||
const hit = hits[0];
|
const hit = hits[0];
|
||||||
res.props.visualization = {
|
const visualization = {
|
||||||
id: hit._id.split(":")[1],
|
id: hit._id.split(":")[1],
|
||||||
title: hit._source.visualization.title,
|
title: hit._source.visualization.title,
|
||||||
description: hit._source.visualization.description,
|
description: hit._source.visualization.description,
|
||||||
|
|
@ -60,5 +53,5 @@ export const getServerSideProps: GetServerSideProps = async (
|
||||||
}?embed=true`,
|
}?embed=true`,
|
||||||
};
|
};
|
||||||
|
|
||||||
return res;
|
return { props: { visualization } };
|
||||||
};
|
};
|
||||||
|
|
|
||||||
41
apps/link/components/LeafcutterWrapper.tsx
Normal file
41
apps/link/components/LeafcutterWrapper.tsx
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
import { FC } from "react";
|
||||||
|
import getConfig from "next/config";
|
||||||
|
import Head from "next/head";
|
||||||
|
import { Grid } from "@mui/material";
|
||||||
|
import { Layout } from "components/Layout";
|
||||||
|
import Iframe from "react-iframe";
|
||||||
|
|
||||||
|
type LeafcutterWrapperProps = {
|
||||||
|
path: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const LeafcutterWrapper: FC<LeafcutterWrapperProps> = ({ path }) => {
|
||||||
|
const {
|
||||||
|
publicRuntimeConfig: { leafcutterURL },
|
||||||
|
} = getConfig();
|
||||||
|
const fullLeafcutterURL = `${leafcutterURL}/${path}`;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout>
|
||||||
|
<Head>
|
||||||
|
<title>Link Shell</title>
|
||||||
|
</Head>
|
||||||
|
<Grid
|
||||||
|
container
|
||||||
|
spacing={0}
|
||||||
|
sx={{ height: "100%", width: "100%" }}
|
||||||
|
direction="column"
|
||||||
|
>
|
||||||
|
<Grid item sx={{ height: "100vh", width: "100%" }}>
|
||||||
|
<Iframe
|
||||||
|
id="link"
|
||||||
|
url={fullLeafcutterURL}
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
frameBorder={0}
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
@ -116,7 +116,7 @@ const MenuItem = ({
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
border: 0,
|
border: 0,
|
||||||
textAlign: "left",
|
textAlign: "left",
|
||||||
color: "white"
|
color: "white",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{name}
|
{name}
|
||||||
|
|
@ -154,8 +154,8 @@ interface SidebarProps {
|
||||||
|
|
||||||
export const Sidebar: FC<SidebarProps> = ({ open, setOpen }) => {
|
export const Sidebar: FC<SidebarProps> = ({ open, setOpen }) => {
|
||||||
const { pathname } = useRouter();
|
const { pathname } = useRouter();
|
||||||
const { data: session } = useSession()
|
const { data: session } = useSession();
|
||||||
const username = session?.user?.name || "User"
|
const username = session?.user?.name || "User";
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Drawer
|
<Drawer
|
||||||
|
|
@ -276,9 +276,9 @@ export const Sidebar: FC<SidebarProps> = ({ open, setOpen }) => {
|
||||||
{open
|
{open
|
||||||
? username
|
? username
|
||||||
: username
|
: username
|
||||||
.split(" ")
|
.split(" ")
|
||||||
.map((name) => name.substring(0, 1))
|
.map((name) => name.substring(0, 1))
|
||||||
.join("")}
|
.join("")}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item>
|
<Grid item>
|
||||||
|
|
@ -396,6 +396,14 @@ export const Sidebar: FC<SidebarProps> = ({ open, setOpen }) => {
|
||||||
</List>
|
</List>
|
||||||
</Collapse>
|
</Collapse>
|
||||||
|
|
||||||
|
<MenuItem
|
||||||
|
name="Knowledge Base"
|
||||||
|
href="/knowledge"
|
||||||
|
Icon={CottageIcon}
|
||||||
|
iconSize={20}
|
||||||
|
selected={pathname.endsWith("/knowledge")}
|
||||||
|
open={open}
|
||||||
|
/>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
name="Leafcutter"
|
name="Leafcutter"
|
||||||
href="/leafcutter"
|
href="/leafcutter"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
/** @type {import('next').NextConfig} */
|
/** @type {import('next').NextConfig} */
|
||||||
const nextConfig = {
|
const nextConfig = {
|
||||||
reactStrictMode: true,
|
reactStrictMode: true,
|
||||||
|
publicRuntimeConfig: {
|
||||||
|
leafcutterURL: process.env.LEAFCUTTER_URL,
|
||||||
|
},
|
||||||
rewrites: async () => ({
|
rewrites: async () => ({
|
||||||
fallback: [
|
fallback: [
|
||||||
{
|
{
|
||||||
|
|
|
||||||
31
apps/link/pages/knowledge.tsx
Normal file
31
apps/link/pages/knowledge.tsx
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
import { FC } from "react";
|
||||||
|
import Head from "next/head";
|
||||||
|
import { Grid } from "@mui/material";
|
||||||
|
import { Layout } from "components/Layout";
|
||||||
|
import { ZammadWrapper } from "components/ZammadWrapper";
|
||||||
|
|
||||||
|
const Assigned: FC = () => (
|
||||||
|
<Layout>
|
||||||
|
<Head>
|
||||||
|
<title>Link Shell</title>
|
||||||
|
</Head>
|
||||||
|
<Grid
|
||||||
|
container
|
||||||
|
spacing={0}
|
||||||
|
sx={{ height: "100%", width: "100%" }}
|
||||||
|
direction="column"
|
||||||
|
>
|
||||||
|
<Grid
|
||||||
|
item
|
||||||
|
sx={{
|
||||||
|
height: "100%",
|
||||||
|
width: "100%",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<ZammadWrapper path="/#knowledge_base/1/locale/en-us" />
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default Assigned;
|
||||||
|
|
@ -1,36 +1,6 @@
|
||||||
import { FC, useState } from "react";
|
import { NextPage } from "next";
|
||||||
import Head from "next/head";
|
import { LeafcutterWrapper } from "components/LeafcutterWrapper";
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { Layout } from "components/Layout";
|
|
||||||
import Iframe from "react-iframe";
|
|
||||||
|
|
||||||
const About: FC = () => {
|
const About: NextPage = () => <LeafcutterWrapper path="about" />;
|
||||||
const [leafcutterURL, setLeafcutterURL] = useState(
|
|
||||||
"https://lc.digiresilience.org/about"
|
|
||||||
);
|
|
||||||
return (
|
|
||||||
<Layout>
|
|
||||||
<Head>
|
|
||||||
<title>Link Shell</title>
|
|
||||||
</Head>
|
|
||||||
<Grid
|
|
||||||
container
|
|
||||||
spacing={0}
|
|
||||||
sx={{ height: "100%", width: "100%" }}
|
|
||||||
direction="column"
|
|
||||||
>
|
|
||||||
<Grid item sx={{ height: "100vh", width: "100%" }}>
|
|
||||||
<Iframe
|
|
||||||
id="link"
|
|
||||||
url={leafcutterURL}
|
|
||||||
width="100%"
|
|
||||||
height="100%"
|
|
||||||
frameBorder={0}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Layout>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default About;
|
export default About;
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,6 @@
|
||||||
import { FC, useState } from "react";
|
import { NextPage } from "next";
|
||||||
import Head from "next/head";
|
import { LeafcutterWrapper } from "components/LeafcutterWrapper";
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { Layout } from "components/Layout";
|
|
||||||
import Iframe from "react-iframe";
|
|
||||||
|
|
||||||
const Create: FC = () => {
|
const Create: NextPage = () => <LeafcutterWrapper path="create" />;
|
||||||
const [leafcutterURL, setLeafcutterURL] = useState(
|
|
||||||
"https://lc.digiresilience.org/create"
|
|
||||||
);
|
|
||||||
return (
|
|
||||||
<Layout>
|
|
||||||
<Head>
|
|
||||||
<title>Link Shell</title>
|
|
||||||
</Head>
|
|
||||||
<Grid
|
|
||||||
container
|
|
||||||
spacing={0}
|
|
||||||
sx={{ height: "100%", width: "100%" }}
|
|
||||||
direction="column"
|
|
||||||
>
|
|
||||||
<Grid item sx={{ height: "100vh", width: "100%" }}>
|
|
||||||
<Iframe
|
|
||||||
id="link"
|
|
||||||
url={leafcutterURL}
|
|
||||||
width="100%"
|
|
||||||
height="100%"
|
|
||||||
frameBorder={0}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Layout>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Create;
|
export default Create;
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,6 @@
|
||||||
import { FC, useState } from "react";
|
import { NextPage } from "next";
|
||||||
import Head from "next/head";
|
import { LeafcutterWrapper } from "components/LeafcutterWrapper";
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { Layout } from "components/Layout";
|
|
||||||
import Iframe from "react-iframe";
|
|
||||||
|
|
||||||
const FAQ: FC = () => {
|
const FAQ: NextPage = () => <LeafcutterWrapper path="faq" />;
|
||||||
const [leafcutterURL, setLeafcutterURL] = useState(
|
|
||||||
"https://lc.digiresilience.org/faq"
|
|
||||||
);
|
|
||||||
return (
|
|
||||||
<Layout>
|
|
||||||
<Head>
|
|
||||||
<title>Link Shell</title>
|
|
||||||
</Head>
|
|
||||||
<Grid
|
|
||||||
container
|
|
||||||
spacing={0}
|
|
||||||
sx={{ height: "100%", width: "100%" }}
|
|
||||||
direction="column"
|
|
||||||
>
|
|
||||||
<Grid item sx={{ height: "100vh", width: "100%" }}>
|
|
||||||
<Iframe
|
|
||||||
id="link"
|
|
||||||
url={leafcutterURL}
|
|
||||||
width="100%"
|
|
||||||
height="100%"
|
|
||||||
frameBorder={0}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Layout>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default FAQ;
|
export default FAQ;
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,6 @@
|
||||||
import { FC, useState } from "react";
|
import { NextPage } from "next";
|
||||||
import Head from "next/head";
|
import { LeafcutterWrapper } from "components/LeafcutterWrapper";
|
||||||
import { Grid, Button } from "@mui/material";
|
|
||||||
import { Layout } from "components/Layout";
|
|
||||||
import Iframe from "react-iframe";
|
|
||||||
|
|
||||||
const Leafcutter: FC = () => {
|
const Dashboard: NextPage = () => <LeafcutterWrapper path="" />;
|
||||||
const [leafcutterURL, setLeafcutterURL] = useState(
|
|
||||||
"https://lc.digiresilience.org"
|
|
||||||
);
|
|
||||||
return (
|
|
||||||
<Layout>
|
|
||||||
<Head>
|
|
||||||
<title>Link Shell</title>
|
|
||||||
</Head>
|
|
||||||
<Grid
|
|
||||||
container
|
|
||||||
spacing={0}
|
|
||||||
sx={{ height: "100%", width: "100%" }}
|
|
||||||
direction="column"
|
|
||||||
>
|
|
||||||
<Grid item sx={{ height: "100vh", width: "100%" }}>
|
|
||||||
<Iframe
|
|
||||||
id="link"
|
|
||||||
url={leafcutterURL}
|
|
||||||
width="100%"
|
|
||||||
height="100%"
|
|
||||||
frameBorder={0}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Layout>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Leafcutter;
|
export default Dashboard;
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,6 @@
|
||||||
import { FC, useState } from "react";
|
import { NextPage } from "next";
|
||||||
import Head from "next/head";
|
import { LeafcutterWrapper } from "components/LeafcutterWrapper";
|
||||||
import { Grid, Button } from "@mui/material";
|
|
||||||
import { Layout } from "components/Layout";
|
|
||||||
import Iframe from "react-iframe";
|
|
||||||
|
|
||||||
const Trends: FC = () => {
|
const Trends: NextPage = () => <LeafcutterWrapper path="trends" />;
|
||||||
const [leafcutterURL, setLeafcutterURL] = useState(
|
|
||||||
"https://lc.digiresilience.org/trends"
|
|
||||||
);
|
|
||||||
return (
|
|
||||||
<Layout>
|
|
||||||
<Head>
|
|
||||||
<title>Link Shell</title>
|
|
||||||
</Head>
|
|
||||||
<Grid
|
|
||||||
container
|
|
||||||
spacing={0}
|
|
||||||
sx={{ height: "100%", width: "100%" }}
|
|
||||||
direction="column"
|
|
||||||
>
|
|
||||||
<Grid item sx={{ height: "100vh", width: "100%" }}>
|
|
||||||
<Iframe
|
|
||||||
id="link"
|
|
||||||
url={leafcutterURL}
|
|
||||||
width="100%"
|
|
||||||
height="100%"
|
|
||||||
frameBorder={0}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Layout>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Trends;
|
export default Trends;
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,13 @@
|
||||||
"jwks-rsa": "^3.0.1",
|
"jwks-rsa": "^3.0.1",
|
||||||
"next": "13.4.3",
|
"next": "13.4.3",
|
||||||
"next-auth": "4.22.1",
|
"next-auth": "4.22.1",
|
||||||
"ra-data-graphql": "^4.10.1",
|
"ra-data-graphql": "^4.11.0",
|
||||||
"ra-i18n-polyglot": "^4.10.6",
|
"ra-i18n-polyglot": "^4.11.0",
|
||||||
"ra-input-rich-text": "^4.10.6",
|
"ra-input-rich-text": "^4.11.0",
|
||||||
"ra-language-english": "^4.10.6",
|
"ra-language-english": "^4.11.0",
|
||||||
"ra-postgraphile": "^6.1.1",
|
"ra-postgraphile": "^6.1.1",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-admin": "^4.10.6",
|
"react-admin": "^4.11.0",
|
||||||
"react-digit-input": "^2.1.0",
|
"react-digit-input": "^2.1.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
"react-qr-code": "^2.0.11",
|
"react-qr-code": "^2.0.11",
|
||||||
|
|
|
||||||
70
package-lock.json
generated
70
package-lock.json
generated
|
|
@ -14,7 +14,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"apps/leafcutter": {
|
"apps/leafcutter": {
|
||||||
"version": "0.1.54",
|
"version": "0.2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/cache": "^11.11.0",
|
"@emotion/cache": "^11.11.0",
|
||||||
"@emotion/react": "^11.11.0",
|
"@emotion/react": "^11.11.0",
|
||||||
|
|
@ -380,13 +380,13 @@
|
||||||
"jwks-rsa": "^3.0.1",
|
"jwks-rsa": "^3.0.1",
|
||||||
"next": "13.4.3",
|
"next": "13.4.3",
|
||||||
"next-auth": "4.22.1",
|
"next-auth": "4.22.1",
|
||||||
"ra-data-graphql": "^4.10.1",
|
"ra-data-graphql": "^4.11.0",
|
||||||
"ra-i18n-polyglot": "^4.10.6",
|
"ra-i18n-polyglot": "^4.11.0",
|
||||||
"ra-input-rich-text": "^4.10.6",
|
"ra-input-rich-text": "^4.11.0",
|
||||||
"ra-language-english": "^4.10.6",
|
"ra-language-english": "^4.11.0",
|
||||||
"ra-postgraphile": "^6.1.1",
|
"ra-postgraphile": "^6.1.1",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-admin": "^4.10.6",
|
"react-admin": "^4.11.0",
|
||||||
"react-digit-input": "^2.1.0",
|
"react-digit-input": "^2.1.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
"react-qr-code": "^2.0.11",
|
"react-qr-code": "^2.0.11",
|
||||||
|
|
@ -17394,9 +17394,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ra-core": {
|
"node_modules/ra-core": {
|
||||||
"version": "4.10.6",
|
"version": "4.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/ra-core/-/ra-core-4.10.6.tgz",
|
"resolved": "https://registry.npmjs.org/ra-core/-/ra-core-4.11.0.tgz",
|
||||||
"integrity": "sha512-n+X3Qh86hLgc1XyGcdMIG8wi+LCwHonDJ3GkYeOI9Q42yqVQx7O5A2Nc3eeSR0XSBCTOGt4X19mtzcLKqOvjxA==",
|
"integrity": "sha512-KK2C04Vqqy5zHii+/+jBGPDGh3gZALwN6+zCgLeVwLjxZYWTGywXBEgpVi3/+MT/T9B/6r1EALzvfzZoid3ROQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"clsx": "^1.1.1",
|
"clsx": "^1.1.1",
|
||||||
"date-fns": "^2.19.0",
|
"date-fns": "^2.19.0",
|
||||||
|
|
@ -17413,7 +17413,7 @@
|
||||||
"history": "^5.1.0",
|
"history": "^5.1.0",
|
||||||
"react": "^16.9.0 || ^17.0.0 || ^18.0.0",
|
"react": "^16.9.0 || ^17.0.0 || ^18.0.0",
|
||||||
"react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0",
|
"react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0",
|
||||||
"react-hook-form": "^7.40.0",
|
"react-hook-form": "^7.43.9",
|
||||||
"react-router": "^6.1.0",
|
"react-router": "^6.1.0",
|
||||||
"react-router-dom": "^6.1.0"
|
"react-router-dom": "^6.1.0"
|
||||||
}
|
}
|
||||||
|
|
@ -17424,9 +17424,9 @@
|
||||||
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
|
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
|
||||||
},
|
},
|
||||||
"node_modules/ra-data-graphql": {
|
"node_modules/ra-data-graphql": {
|
||||||
"version": "4.10.1",
|
"version": "4.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/ra-data-graphql/-/ra-data-graphql-4.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/ra-data-graphql/-/ra-data-graphql-4.11.0.tgz",
|
||||||
"integrity": "sha512-SxpOaraZR53Dhc5ZhDpL0G3R6YZcivUKyj91KPwirMRtkffgJJqJkxammvhdTVFDUocKK2V/7EXv94mBkBJfew==",
|
"integrity": "sha512-FSafY7khLAZ9Zly3YZJdi7M2/PlGLWG+sw84iEpYcj2QUqrdHTE2tAlwk8ly64087CfnW+ite0qFVOBvVkYSQQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@apollo/client": "^3.3.19",
|
"@apollo/client": "^3.3.19",
|
||||||
"lodash": "~4.17.5",
|
"lodash": "~4.17.5",
|
||||||
|
|
@ -17446,18 +17446,18 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ra-i18n-polyglot": {
|
"node_modules/ra-i18n-polyglot": {
|
||||||
"version": "4.10.6",
|
"version": "4.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/ra-i18n-polyglot/-/ra-i18n-polyglot-4.10.6.tgz",
|
"resolved": "https://registry.npmjs.org/ra-i18n-polyglot/-/ra-i18n-polyglot-4.11.0.tgz",
|
||||||
"integrity": "sha512-kFIFXiSsUCk6PUTP4uaA4+J8RJotVpFhHk2+J86czK5KNnE/mGepq88ZB2g8dkGpzH+opXTkxGuKCqQQeGCZlw==",
|
"integrity": "sha512-J9LgEviJyA4RWi+alSR/0elzNfDhj6MKC8fYnLd6aXG2i8XHu7nXNtWdQv26FlovEQ4GXsGbKInyFwIfP0SwNw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"node-polyglot": "^2.2.2",
|
"node-polyglot": "^2.2.2",
|
||||||
"ra-core": "^4.10.6"
|
"ra-core": "^4.11.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ra-input-rich-text": {
|
"node_modules/ra-input-rich-text": {
|
||||||
"version": "4.10.6",
|
"version": "4.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/ra-input-rich-text/-/ra-input-rich-text-4.10.6.tgz",
|
"resolved": "https://registry.npmjs.org/ra-input-rich-text/-/ra-input-rich-text-4.11.0.tgz",
|
||||||
"integrity": "sha512-b3yLyBi7jjVb4OhwicyYk0nkbP3xD42AqzDazf6O6hH4+EMBiIl8deRiG1VJaxmmMGY/R9BGSNUxWysEfEjRAA==",
|
"integrity": "sha512-1s4YrrSkZ7QiwpYgxyzJsNgwOQ+tfBF/4r1DqvBKbve2bZt27FCMY/JCtqQsiPmewQSsIQDx8R0ZY7SzcJKjNQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tiptap/core": "^2.0.0-beta.217",
|
"@tiptap/core": "^2.0.0-beta.217",
|
||||||
"@tiptap/extension-color": "^2.0.0-beta.217",
|
"@tiptap/extension-color": "^2.0.0-beta.217",
|
||||||
|
|
@ -17483,11 +17483,11 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ra-language-english": {
|
"node_modules/ra-language-english": {
|
||||||
"version": "4.10.6",
|
"version": "4.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/ra-language-english/-/ra-language-english-4.10.6.tgz",
|
"resolved": "https://registry.npmjs.org/ra-language-english/-/ra-language-english-4.11.0.tgz",
|
||||||
"integrity": "sha512-FM5KKBiPAbgrJF06WnYiijtXEjbKCjM9fOmMxYfT9+sAEWtsrKgJwZZfF07OAQQmg6oyajVXUnPM40M2qviIQg==",
|
"integrity": "sha512-79VYZAaSFhfwL+YkgfhVP1hm60pnG+WuZdxypIX4S7tDPTxZGMcBuSEO4Q5Bf4m5jGRu4Jbwu5JrKhZN6eHbkA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ra-core": "^4.10.6"
|
"ra-core": "^4.11.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ra-postgraphile": {
|
"node_modules/ra-postgraphile": {
|
||||||
|
|
@ -17516,9 +17516,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ra-ui-materialui": {
|
"node_modules/ra-ui-materialui": {
|
||||||
"version": "4.10.6",
|
"version": "4.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/ra-ui-materialui/-/ra-ui-materialui-4.10.6.tgz",
|
"resolved": "https://registry.npmjs.org/ra-ui-materialui/-/ra-ui-materialui-4.11.0.tgz",
|
||||||
"integrity": "sha512-l0chuLFKJfjcExix3T9SuwZxajmEgIjGjMT2NIlbS6HC4JkX90L/IdZ4CZk01LrbTBGjCXG/tqWtaIVM6VB8oA==",
|
"integrity": "sha512-KLpfLRlXNt5Mst4a9XzU1IolYJofUK3IuTI09wn839CVpsgm6iJTRtwcpcWPS1BcPfQJa5VragKJFAz/qLe/Og==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"autosuggest-highlight": "^3.1.1",
|
"autosuggest-highlight": "^3.1.1",
|
||||||
"clsx": "^1.1.1",
|
"clsx": "^1.1.1",
|
||||||
|
|
@ -17618,20 +17618,20 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-admin": {
|
"node_modules/react-admin": {
|
||||||
"version": "4.10.6",
|
"version": "4.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-admin/-/react-admin-4.10.6.tgz",
|
"resolved": "https://registry.npmjs.org/react-admin/-/react-admin-4.11.0.tgz",
|
||||||
"integrity": "sha512-NuHJ3KU9MRyLwCdCIVPQcogBIqXk3umrR4pkyX+JgkO1TDwpItjwmD4Hy92dIFMTMTxCX/l0p3spRvI82Z4nSQ==",
|
"integrity": "sha512-iYmFX5klpiyKvP0r33vXX0XR5K1lFtwZ2XivBVIvCnjA01haBWPxkS61VH2oAeYKTVYBVk+0oqvwKzOp03ANSA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.4.1",
|
"@emotion/react": "^11.4.1",
|
||||||
"@emotion/styled": "^11.3.0",
|
"@emotion/styled": "^11.3.0",
|
||||||
"@mui/icons-material": "^5.0.1",
|
"@mui/icons-material": "^5.0.1",
|
||||||
"@mui/material": "^5.0.2",
|
"@mui/material": "^5.0.2",
|
||||||
"history": "^5.1.0",
|
"history": "^5.1.0",
|
||||||
"ra-core": "^4.10.6",
|
"ra-core": "^4.11.0",
|
||||||
"ra-i18n-polyglot": "^4.10.6",
|
"ra-i18n-polyglot": "^4.11.0",
|
||||||
"ra-language-english": "^4.10.6",
|
"ra-language-english": "^4.11.0",
|
||||||
"ra-ui-materialui": "^4.10.6",
|
"ra-ui-materialui": "^4.11.0",
|
||||||
"react-hook-form": "^7.40.0",
|
"react-hook-form": "^7.43.9",
|
||||||
"react-router": "^6.1.0",
|
"react-router": "^6.1.0",
|
||||||
"react-router-dom": "^6.1.0"
|
"react-router-dom": "^6.1.0"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
48
turbo.json
48
turbo.json
|
|
@ -6,54 +6,24 @@
|
||||||
"persistent": true
|
"persistent": true
|
||||||
},
|
},
|
||||||
"build": {
|
"build": {
|
||||||
"dependsOn": [
|
"dependsOn": ["^build"],
|
||||||
"^build"
|
"outputs": [".next/**"]
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
".next/**"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"test": {
|
"test": {
|
||||||
"dependsOn": [
|
"dependsOn": ["build"],
|
||||||
"build"
|
"inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts", "test/**/*.tsx"]
|
||||||
],
|
|
||||||
"inputs": [
|
|
||||||
"src/**/*.tsx",
|
|
||||||
"src/**/*.ts",
|
|
||||||
"test/**/*.ts",
|
|
||||||
"test/**/*.tsx"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"lint": {
|
"lint": {
|
||||||
"inputs": [
|
"inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts", "test/**/*.tsx"]
|
||||||
"src/**/*.tsx",
|
|
||||||
"src/**/*.ts",
|
|
||||||
"test/**/*.ts",
|
|
||||||
"test/**/*.tsx"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"fix:lint": {
|
"fix:lint": {
|
||||||
"inputs": [
|
"inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts", "test/**/*.tsx"]
|
||||||
"src/**/*.tsx",
|
|
||||||
"src/**/*.ts",
|
|
||||||
"test/**/*.ts",
|
|
||||||
"test/**/*.tsx"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"fmt": {
|
"fmt": {
|
||||||
"inputs": [
|
"inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts", "test/**/*.tsx"]
|
||||||
"src/**/*.tsx",
|
|
||||||
"src/**/*.ts",
|
|
||||||
"test/**/*.ts",
|
|
||||||
"test/**/*.tsx"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"deploy": {
|
"deploy": {
|
||||||
"dependsOn": [
|
"dependsOn": ["build", "test", "lint"]
|
||||||
"build",
|
|
||||||
"test",
|
|
||||||
"lint"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue