Finish bridge generalization
This commit is contained in:
parent
cb7a3a08dc
commit
cca8d03988
93 changed files with 634 additions and 2085 deletions
|
|
@ -7,6 +7,7 @@ import { TextField } from "ui";
|
||||||
import { Create as InternalCreate } from "@/app/_components/Create";
|
import { Create as InternalCreate } from "@/app/_components/Create";
|
||||||
import { generateCreateAction } from "@/app/_lib/actions";
|
import { generateCreateAction } from "@/app/_lib/actions";
|
||||||
import { serviceConfig } from "@/app/_lib/config";
|
import { serviceConfig } from "@/app/_lib/config";
|
||||||
|
import { FieldDescription } from "@/app/_lib/service";
|
||||||
|
|
||||||
type CreateProps = {
|
type CreateProps = {
|
||||||
service: string;
|
service: string;
|
||||||
|
|
@ -16,18 +17,18 @@ export const Create: FC<CreateProps> = ({ service }) => {
|
||||||
const {
|
const {
|
||||||
[service]: { entity, table, displayName, createFields: fields },
|
[service]: { entity, table, displayName, createFields: fields },
|
||||||
} = serviceConfig;
|
} = serviceConfig;
|
||||||
const createFieldNames = fields.map((val) => val.name);
|
|
||||||
const createAction = generateCreateAction({ entity, table, fields });
|
const createAction = generateCreateAction({ entity, table, fields });
|
||||||
const initialState = {
|
const initialState = {
|
||||||
message: null,
|
message: null,
|
||||||
errors: {},
|
errors: {},
|
||||||
values: createFieldNames.reduce((acc, key) => {
|
values: fields.reduce(
|
||||||
// @ts-expect-error
|
(acc: Record<string, any>, field: FieldDescription) => {
|
||||||
acc[key] = fields[key].defaultValue;
|
acc[field.name] = field.defaultValue;
|
||||||
return acc;
|
return acc;
|
||||||
}, {}),
|
},
|
||||||
|
{},
|
||||||
|
),
|
||||||
};
|
};
|
||||||
console.log("initialState", initialState);
|
|
||||||
const [formState, formAction] = useFormState(createAction, initialState);
|
const [formState, formAction] = useFormState(createAction, initialState);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
@ -39,11 +40,11 @@ export const Create: FC<CreateProps> = ({ service }) => {
|
||||||
>
|
>
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
||||||
{fields.map((field) => (
|
{fields.map((field) => (
|
||||||
<Grid item xs={field.size ?? 6}>
|
<Grid key={field.name} item xs={field.size ?? 6}>
|
||||||
<TextField
|
<TextField
|
||||||
key={field.name}
|
|
||||||
name={field.name}
|
name={field.name}
|
||||||
label={field.label}
|
label={field.label}
|
||||||
|
lines={field.lines ?? 1}
|
||||||
required={field.required ?? false}
|
required={field.required ?? false}
|
||||||
formState={formState}
|
formState={formState}
|
||||||
helperText={field.helperText}
|
helperText={field.helperText}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
import { Create } from "./_components/Create";
|
import { Create } from "./_components/Create";
|
||||||
|
|
||||||
type PageProps = {
|
type PageProps = {
|
||||||
params: { service: string };
|
params: { segment: string[] };
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function Page({ params: { service } }: PageProps) {
|
export default function Page({ params: { segment } }: PageProps) {
|
||||||
|
const service = segment[0];
|
||||||
|
|
||||||
return <Create service={service} />;
|
return <Create service={service} />;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ export const Detail: FC<DetailProps> = ({ service, row }) => {
|
||||||
>
|
>
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
||||||
{fields.map((field) => (
|
{fields.map((field) => (
|
||||||
<Grid item xs={6} key={field.name}>
|
<Grid item xs={field.size ?? 6} key={field.name}>
|
||||||
<DisplayTextField
|
<DisplayTextField
|
||||||
name={field.name}
|
name={field.name}
|
||||||
label={field.label}
|
label={field.label}
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,12 @@ import { serviceConfig } from "@/app/_lib/config";
|
||||||
import { Detail } from "./_components/Detail";
|
import { Detail } from "./_components/Detail";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
params: { service: string; segment: string[] };
|
params: { segment: string[] };
|
||||||
};
|
};
|
||||||
|
|
||||||
export default async function Page({ params: { service, segment } }: Props) {
|
export default async function Page({ params: { segment } }: Props) {
|
||||||
const id = segment?.[0];
|
const service = segment[0];
|
||||||
|
const id = segment?.[1];
|
||||||
|
|
||||||
if (!id) return null;
|
if (!id) return null;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,15 @@ export const Edit: FC<EditProps> = ({ service, row }) => {
|
||||||
} = serviceConfig;
|
} = serviceConfig;
|
||||||
const updateFieldNames = fields.map((val) => val.name);
|
const updateFieldNames = fields.map((val) => val.name);
|
||||||
const updateAction = generateUpdateAction({ entity, table, fields });
|
const updateAction = generateUpdateAction({ entity, table, fields });
|
||||||
|
const updateValues = Object.fromEntries(
|
||||||
|
Object.entries(row).filter(([key]) => updateFieldNames.includes(key)),
|
||||||
|
);
|
||||||
|
updateValues.id = row.id;
|
||||||
const initialState = {
|
const initialState = {
|
||||||
message: null,
|
message: null,
|
||||||
errors: {},
|
errors: {},
|
||||||
values: Object.fromEntries(
|
values: updateValues,
|
||||||
Object.entries(row).filter(([key]) => updateFieldNames.includes(key)),
|
|
||||||
),
|
|
||||||
};
|
};
|
||||||
console.log("initialState", initialState);
|
|
||||||
const [formState, formAction] = useFormState(updateAction, initialState);
|
const [formState, formAction] = useFormState(updateAction, initialState);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
@ -40,11 +41,11 @@ export const Edit: FC<EditProps> = ({ service, row }) => {
|
||||||
>
|
>
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
||||||
{fields.map((field) => (
|
{fields.map((field) => (
|
||||||
<Grid item xs={field.size ?? 6}>
|
<Grid key={field.name} item xs={field.size ?? 6}>
|
||||||
<TextField
|
<TextField
|
||||||
key={field.name}
|
|
||||||
name={field.name}
|
name={field.name}
|
||||||
label={field.label}
|
label={field.label}
|
||||||
|
lines={field.lines ?? 1}
|
||||||
required={field.required ?? false}
|
required={field.required ?? false}
|
||||||
formState={formState}
|
formState={formState}
|
||||||
helperText={field.helperText}
|
helperText={field.helperText}
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,12 @@ import { serviceConfig } from "@/app/_lib/config";
|
||||||
import { Edit } from "./_components/Edit";
|
import { Edit } from "./_components/Edit";
|
||||||
|
|
||||||
type PageProps = {
|
type PageProps = {
|
||||||
params: { service: string; segment: string[] };
|
params: { segment: string[] };
|
||||||
};
|
};
|
||||||
|
|
||||||
export default async function Page({
|
export default async function Page({ params: { segment } }: PageProps) {
|
||||||
params: { service, segment },
|
const service = segment[0];
|
||||||
}: PageProps) {
|
const id = segment?.[1];
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
if (!id) return null;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
||||||
"use server";
|
|
||||||
|
|
||||||
import { addAction, updateAction, deleteAction } from "@/app/_lib/actions";
|
|
||||||
|
|
||||||
// write a function that returns the addRecordAction
|
|
||||||
|
|
||||||
export function generateAddRecordAction(
|
|
||||||
entity: string,
|
|
||||||
table: string,
|
|
||||||
fields: string[],
|
|
||||||
) {
|
|
||||||
// The returned function matches the signature of addRecordAction, but uses the parameters from the outer function.
|
|
||||||
return async (currentState: any, formData: FormData) => {
|
|
||||||
return addAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields,
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export const addRecordAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return addAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: [
|
|
||||||
"name",
|
|
||||||
"description",
|
|
||||||
"appId",
|
|
||||||
"appSecret",
|
|
||||||
"pageId",
|
|
||||||
"pageAccessToken",
|
|
||||||
],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const updateFacebookBotAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return updateAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: [
|
|
||||||
"name",
|
|
||||||
"description",
|
|
||||||
"appId",
|
|
||||||
"appSecret",
|
|
||||||
"pageId",
|
|
||||||
"pageAccessToken",
|
|
||||||
],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const deleteFacebookBotAction = async (id: string) => {
|
|
||||||
return deleteAction({ entity, table, id });
|
|
||||||
};
|
|
||||||
|
|
@ -16,7 +16,7 @@ export const List: FC<ListProps> = ({ service, rows }) => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<InternalList
|
<InternalList
|
||||||
title={displayName}
|
title={`${displayName}s`}
|
||||||
entity={entity}
|
entity={entity}
|
||||||
rows={rows}
|
rows={rows}
|
||||||
columns={listColumns}
|
columns={listColumns}
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,13 @@ type ServiceLayoutProps = {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export const ServiceLayout = ({
|
export default function ServiceLayout({
|
||||||
children,
|
children,
|
||||||
detail,
|
detail,
|
||||||
edit,
|
edit,
|
||||||
create,
|
create,
|
||||||
params: { segment },
|
params: { segment },
|
||||||
}: ServiceLayoutProps) => {
|
}: ServiceLayoutProps) {
|
||||||
const length = segment?.length ?? 0;
|
const length = segment?.length ?? 0;
|
||||||
const isCreate = length === 2 && segment[1] === "create";
|
const isCreate = length === 2 && segment[1] === "create";
|
||||||
const isEdit = length === 3 && segment[2] === "edit";
|
const isEdit = length === 3 && segment[2] === "edit";
|
||||||
|
|
@ -29,4 +29,4 @@ export const ServiceLayout = ({
|
||||||
{isCreate && create}
|
{isCreate && create}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,18 @@
|
||||||
// import { List } from "./_components/List";
|
import { List } from "./_components/List";
|
||||||
// import { db } from "@/app/_lib/database";
|
import { db } from "@/app/_lib/database";
|
||||||
// import { serviceConfig } from "@/app/_lib/config";
|
import { serviceConfig } from "@/app/_lib/config";
|
||||||
|
|
||||||
type PageProps = {
|
type PageProps = {
|
||||||
params: {
|
params: {
|
||||||
service: string;
|
segment: string[];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export default async function Page({ params: { service } }: PageProps) {
|
export default async function Page({ params: { segment } }: PageProps) {
|
||||||
console.log({ service });
|
const service = segment[0];
|
||||||
|
|
||||||
return <h1> Nice</h1>;
|
const config = serviceConfig[service];
|
||||||
// const config = serviceConfig[service];
|
const rows = await db.selectFrom(config.table).selectAll().execute();
|
||||||
// const rows = await db.selectFrom(config.table).selectAll().execute();
|
|
||||||
|
|
||||||
// return <List service={service} rows={rows} />;
|
return <List service={service} rows={rows} />;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { Create as InternalCreate } from "@/app/_components/Create";
|
|
||||||
import { addFacebookBotAction } from "../../_actions/facebook";
|
|
||||||
|
|
||||||
export const Create: FC = () => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: {
|
|
||||||
name: "",
|
|
||||||
description: "",
|
|
||||||
one: "",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(
|
|
||||||
addFacebookBotAction,
|
|
||||||
initialState,
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalCreate
|
|
||||||
title="Create Facebook Connection"
|
|
||||||
entity="facebook"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
formState={formState}
|
|
||||||
lines={3}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="appId"
|
|
||||||
label="App ID"
|
|
||||||
required
|
|
||||||
formState={formState}
|
|
||||||
helperText="Get it from Facebook Developer Console"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="appSecret"
|
|
||||||
label="App Secret"
|
|
||||||
required
|
|
||||||
formState={formState}
|
|
||||||
helperText="Get it from Facebook Developer Console"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="pageId"
|
|
||||||
label="Page ID"
|
|
||||||
required
|
|
||||||
formState={formState}
|
|
||||||
helperText="Get it from Facebook Developer Console"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="pageAccessToken"
|
|
||||||
label="Page Access Token"
|
|
||||||
required
|
|
||||||
formState={formState}
|
|
||||||
helperText="Get it from Facebook Developer Console"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalCreate>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
import { Create } from "./_components/Create";
|
|
||||||
|
|
||||||
export default function Page() {
|
|
||||||
return <Create />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { DisplayTextField } from "ui";
|
|
||||||
import { FacebookBot } from "@/app/_lib/database";
|
|
||||||
import { Detail as InternalDetail } from "@/app/_components/Detail";
|
|
||||||
import { deleteFacebookBotAction } from "../../_actions/facebook";
|
|
||||||
|
|
||||||
type DetailProps = {
|
|
||||||
row: FacebookBot;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Detail: FC<DetailProps> = ({ row }) => (
|
|
||||||
<InternalDetail
|
|
||||||
title={`Facebook Connection: ${row.name}`}
|
|
||||||
entity="facebook"
|
|
||||||
id={row.id}
|
|
||||||
deleteAction={deleteFacebookBotAction}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField name="name" label="Name" value={row.name} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
lines={3}
|
|
||||||
value={row.description}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<DisplayTextField name="appId" label="App ID" value={row.appId} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<DisplayTextField
|
|
||||||
name="appSecret"
|
|
||||||
label="App Secret"
|
|
||||||
value={row.appSecret}
|
|
||||||
copyable
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<DisplayTextField name="pageId" label="Page ID" value={row.pageId} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<DisplayTextField
|
|
||||||
name="pageAccessToken"
|
|
||||||
label="Page Access Token"
|
|
||||||
value={row.pageAccessToken}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalDetail>
|
|
||||||
);
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Detail } from "./_components/Detail";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("FacebookBot")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Detail row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,105 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { FacebookBot } from "@/app/_lib/database";
|
|
||||||
import { Edit as InternalEdit } from "@/app/_components/Edit";
|
|
||||||
import { updateFacebookBotAction } from "../../_actions/facebook";
|
|
||||||
|
|
||||||
type EditProps = {
|
|
||||||
row: FacebookBot;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Edit: FC<EditProps> = ({ row }) => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: row,
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(
|
|
||||||
updateFacebookBotAction,
|
|
||||||
initialState,
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalEdit
|
|
||||||
title={`Edit Facebook Connection: ${row.name}`}
|
|
||||||
entity="facebook"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
formState={formState}
|
|
||||||
lines={3}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="token"
|
|
||||||
label="Token"
|
|
||||||
disabled
|
|
||||||
formState={formState}
|
|
||||||
refreshable
|
|
||||||
helperText="Token used to authenticate requests from Link"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="verifyToken"
|
|
||||||
label="Verify Token"
|
|
||||||
disabled
|
|
||||||
formState={formState}
|
|
||||||
refreshable
|
|
||||||
helperText="Token used to authenticate requests from Facebook"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="appId"
|
|
||||||
label="App ID"
|
|
||||||
required
|
|
||||||
formState={formState}
|
|
||||||
helperText="App ID of your approved Facebook application"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="appSecret"
|
|
||||||
label="App Secret"
|
|
||||||
required
|
|
||||||
formState={formState}
|
|
||||||
helperText="App Secret of your approved Facebook application"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="pageId"
|
|
||||||
label="Page ID"
|
|
||||||
required
|
|
||||||
formState={formState}
|
|
||||||
helperText="Page ID of the Facebook page that will receive messages"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="pageAccessToken"
|
|
||||||
label="Page Access Token"
|
|
||||||
required
|
|
||||||
formState={formState}
|
|
||||||
helperText="Access Token of the Facbook page that will receive messages"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalEdit>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Edit } from "./_components/Edit";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("FacebookBot")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Edit row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
"use server";
|
|
||||||
|
|
||||||
import { addAction, updateAction, deleteAction } from "@/app/_lib/actions";
|
|
||||||
|
|
||||||
const entity = "facebook";
|
|
||||||
const table = "FacebookBot";
|
|
||||||
|
|
||||||
export const addFacebookBotAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return addAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: [
|
|
||||||
"name",
|
|
||||||
"description",
|
|
||||||
"appId",
|
|
||||||
"appSecret",
|
|
||||||
"pageId",
|
|
||||||
"pageAccessToken",
|
|
||||||
],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const updateFacebookBotAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return updateAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: [
|
|
||||||
"name",
|
|
||||||
"description",
|
|
||||||
"appId",
|
|
||||||
"appSecret",
|
|
||||||
"pageId",
|
|
||||||
"pageAccessToken",
|
|
||||||
],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const deleteFacebookBotAction = async (id: string) => {
|
|
||||||
return deleteAction({ entity, table, id });
|
|
||||||
};
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { GridColDef } from "@mui/x-data-grid-pro";
|
|
||||||
import { List } from "@/app/_components/List";
|
|
||||||
|
|
||||||
type FacebookBotsListProps = {
|
|
||||||
rows: any[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export const FacebookBotsList: FC<FacebookBotsListProps> = ({ rows }) => {
|
|
||||||
const columns: GridColDef[] = [
|
|
||||||
{
|
|
||||||
field: "name",
|
|
||||||
headerName: "Name",
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "description",
|
|
||||||
headerName: "Description",
|
|
||||||
flex: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "updatedAt",
|
|
||||||
headerName: "Updated At",
|
|
||||||
valueGetter: (value: any) => new Date(value).toLocaleString(),
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<List
|
|
||||||
title="Facebook Connections"
|
|
||||||
entity="facebook"
|
|
||||||
rows={rows}
|
|
||||||
columns={columns}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
import { ServiceLayout } from "@/app/_components/ServiceLayout";
|
|
||||||
|
|
||||||
export default ServiceLayout;
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
import { FacebookBotsList } from "./_components/FacebookBotsList";
|
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
export default async function Page() {
|
|
||||||
const rows = await db.selectFrom("FacebookBot").selectAll().execute();
|
|
||||||
|
|
||||||
return <FacebookBotsList rows={rows} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { Create as InternalCreate } from "@/app/_components/Create";
|
|
||||||
import { addSignalBotAction } from "../../_actions/signal";
|
|
||||||
|
|
||||||
export const Create: FC = () => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: {
|
|
||||||
name: "",
|
|
||||||
description: "",
|
|
||||||
one: "",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(
|
|
||||||
addSignalBotAction,
|
|
||||||
initialState,
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalCreate
|
|
||||||
title="Create Signal Connection"
|
|
||||||
entity="signal"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
formState={formState}
|
|
||||||
lines={3}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalCreate>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
import { Create } from "./_components/Create";
|
|
||||||
|
|
||||||
export default function Page() {
|
|
||||||
return <Create />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { DisplayTextField } from "ui";
|
|
||||||
import { SignalBot } from "@/app/_lib/database";
|
|
||||||
import { Detail as InternalDetail } from "@/app/_components/Detail";
|
|
||||||
import { deleteSignalBotAction } from "../../_actions/signal";
|
|
||||||
|
|
||||||
type DetailProps = {
|
|
||||||
row: SignalBot;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Detail: FC<DetailProps> = ({ row }) => (
|
|
||||||
<InternalDetail
|
|
||||||
title={`Signal Connection: ${row.name}`}
|
|
||||||
entity="signal"
|
|
||||||
id={row.id}
|
|
||||||
deleteAction={deleteSignalBotAction}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField name="name" label="Name" value={row.name} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
lines={3}
|
|
||||||
value={row.description}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalDetail>
|
|
||||||
);
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Detail } from "./_components/Detail";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("SignalBot")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Detail row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { SignalBot } from "@/app/_lib/database";
|
|
||||||
import { Edit as InternalEdit } from "@/app/_components/Edit";
|
|
||||||
import { updateSignalBotAction } from "../../_actions/signal";
|
|
||||||
|
|
||||||
type EditProps = {
|
|
||||||
row: SignalBot;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Edit: FC<EditProps> = ({ row }) => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: row,
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(
|
|
||||||
updateSignalBotAction,
|
|
||||||
initialState,
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalEdit
|
|
||||||
title={`Edit Signal Connection: ${row.name}`}
|
|
||||||
entity="signal"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
formState={formState}
|
|
||||||
lines={3}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalEdit>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Edit } from "./_components/Edit";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("SignalBot")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Edit row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
"use server";
|
|
||||||
|
|
||||||
import { addAction, updateAction, deleteAction } from "@/app/_lib/actions";
|
|
||||||
|
|
||||||
const entity = "signal";
|
|
||||||
const table = "SignalBot";
|
|
||||||
|
|
||||||
export const addSignalBotAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return addAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: ["name", "description"],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const updateSignalBotAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return updateAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: ["name"],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const deleteSignalBotAction = async (id: string) => {
|
|
||||||
return deleteAction({ entity, table, id });
|
|
||||||
};
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { GridColDef } from "@mui/x-data-grid-pro";
|
|
||||||
import { List } from "@/app/_components/List";
|
|
||||||
|
|
||||||
type SignalBotsListProps = {
|
|
||||||
rows: any[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export const SignalBotsList: FC<SignalBotsListProps> = ({ rows }) => {
|
|
||||||
const columns: GridColDef[] = [
|
|
||||||
{
|
|
||||||
field: "name",
|
|
||||||
headerName: "Name",
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "phoneNumber",
|
|
||||||
headerName: "Phone Number",
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "description",
|
|
||||||
headerName: "Description",
|
|
||||||
flex: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "updatedAt",
|
|
||||||
headerName: "Updated At",
|
|
||||||
valueGetter: (params: any) =>
|
|
||||||
new Date(params.row?.updatedAt).toLocaleString(),
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<List
|
|
||||||
title="Signal Connections"
|
|
||||||
entity="signal"
|
|
||||||
rows={rows}
|
|
||||||
columns={columns}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
import { ServiceLayout } from "@/app/_components/ServiceLayout";
|
|
||||||
|
|
||||||
export default ServiceLayout;
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
import { SignalBotsList } from "./_components/SignalBotsList";
|
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
export default async function Page() {
|
|
||||||
const rows = await db.selectFrom("SignalBot").selectAll().execute();
|
|
||||||
|
|
||||||
return <SignalBotsList rows={rows} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { Create as InternalCreate } from "@/app/_components/Create";
|
|
||||||
import { addUserAction } from "../../_actions/users";
|
|
||||||
|
|
||||||
export const Create: FC = () => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: {
|
|
||||||
name: "",
|
|
||||||
description: "",
|
|
||||||
one: "",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(addUserAction, initialState);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalCreate
|
|
||||||
title="Create User"
|
|
||||||
entity="users"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalCreate>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
import { Create } from "./_components/Create";
|
|
||||||
|
|
||||||
export default function Page() {
|
|
||||||
return <Create />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { DisplayTextField } from "ui";
|
|
||||||
import { User } from "@/app/_lib/database";
|
|
||||||
import { Detail as InternalDetail } from "@/app/_components/Detail";
|
|
||||||
import { deleteUserAction } from "../../_actions/users";
|
|
||||||
|
|
||||||
type DetailProps = {
|
|
||||||
row: User;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Detail: FC<DetailProps> = ({ row }) => (
|
|
||||||
<InternalDetail
|
|
||||||
title={`User: ${row.name}`}
|
|
||||||
entity="users"
|
|
||||||
id={row.id}
|
|
||||||
deleteAction={deleteUserAction}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField name="name" label="Name" value={row.name} />
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalDetail>
|
|
||||||
);
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Detail } from "./_components/Detail";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("User")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Detail row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { User } from "@/app/_lib/database";
|
|
||||||
import { Edit as InternalEdit } from "@/app/_components/Edit";
|
|
||||||
import { updateUserAction } from "../../_actions/users";
|
|
||||||
|
|
||||||
type EditProps = {
|
|
||||||
row: User;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Edit: FC<EditProps> = ({ row }) => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: row,
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(updateUserAction, initialState);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalEdit
|
|
||||||
title={`Edit User: ${row.name}`}
|
|
||||||
entity="users"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalEdit>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Edit } from "./_components/Edit";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("User")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Edit row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
"use server";
|
|
||||||
|
|
||||||
import { addAction, updateAction, deleteAction } from "@/app/_lib/actions";
|
|
||||||
|
|
||||||
const entity = "users";
|
|
||||||
const table = "User";
|
|
||||||
|
|
||||||
export const addUserAction = async (currentState: any, formData: FormData) => {
|
|
||||||
return addAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: ["name"],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const updateUserAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return updateAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: ["name"],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const deleteUserAction = async (id: string) => {
|
|
||||||
return deleteAction({ entity, table, id });
|
|
||||||
};
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { GridColDef } from "@mui/x-data-grid-pro";
|
|
||||||
import { List } from "@/app/_components/List";
|
|
||||||
|
|
||||||
type UsersListProps = {
|
|
||||||
rows: any[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export const UsersList: FC<UsersListProps> = ({ rows }) => {
|
|
||||||
const columns: GridColDef[] = [
|
|
||||||
{
|
|
||||||
field: "name",
|
|
||||||
headerName: "Name",
|
|
||||||
flex: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "email",
|
|
||||||
headerName: "Email",
|
|
||||||
flex: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "emailVerified",
|
|
||||||
headerName: "Verified",
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return <List title="Users" entity="users" rows={rows} columns={columns} />;
|
|
||||||
};
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
import { ServiceLayout } from "@/app/_components/ServiceLayout";
|
|
||||||
|
|
||||||
export default ServiceLayout;
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
import { UsersList } from "./_components/UsersList";
|
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
export default async function Page() {
|
|
||||||
const rows = await db.selectFrom("User").selectAll().execute();
|
|
||||||
console.log(rows);
|
|
||||||
|
|
||||||
return <UsersList rows={rows} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { Create as InternalCreate } from "@/app/_components/Create";
|
|
||||||
import { addVoiceLineAction } from "../../_actions/voice";
|
|
||||||
|
|
||||||
export const Create: FC = () => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: {
|
|
||||||
name: "",
|
|
||||||
description: "",
|
|
||||||
one: "",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(
|
|
||||||
addVoiceLineAction,
|
|
||||||
initialState,
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalCreate
|
|
||||||
title="Create Voice Connection"
|
|
||||||
entity="voice"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
formState={formState}
|
|
||||||
lines={3}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalCreate>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
import { Create } from "./_components/Create";
|
|
||||||
|
|
||||||
export default function Page() {
|
|
||||||
return <Create />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { DisplayTextField } from "ui";
|
|
||||||
import { VoiceLine } from "@/app/_lib/database";
|
|
||||||
import { Detail as InternalDetail } from "@/app/_components/Detail";
|
|
||||||
import { deleteVoiceLineAction } from "../../_actions/voice";
|
|
||||||
|
|
||||||
type DetailProps = {
|
|
||||||
row: VoiceLine;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Detail: FC<DetailProps> = ({ row }) => (
|
|
||||||
<InternalDetail
|
|
||||||
title={`Voice Line: ${row.name}`}
|
|
||||||
entity="voice"
|
|
||||||
id={row.id}
|
|
||||||
deleteAction={deleteVoiceLineAction}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField name="name" label="Name" value={row.name} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
lines={3}
|
|
||||||
value={row.description}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalDetail>
|
|
||||||
);
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Detail } from "./_components/Detail";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("VoiceLine")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Detail row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { VoiceLine } from "@/app/_lib/database";
|
|
||||||
import { Edit as InternalEdit } from "@/app/_components/Edit";
|
|
||||||
import { updateVoiceLineAction } from "../../_actions/voice";
|
|
||||||
|
|
||||||
type EditProps = {
|
|
||||||
row: VoiceLine;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Edit: FC<EditProps> = ({ row }) => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: row,
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(
|
|
||||||
updateVoiceLineAction,
|
|
||||||
initialState,
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalEdit
|
|
||||||
title={`Edit Voice Line: ${row.name}`}
|
|
||||||
entity="voice"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
formState={formState}
|
|
||||||
lines={3}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalEdit>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Edit } from "./_components/Edit";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("VoiceLine")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Edit row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
"use server";
|
|
||||||
|
|
||||||
import { addAction, updateAction, deleteAction } from "@/app/_lib/actions";
|
|
||||||
|
|
||||||
const entity = "voice";
|
|
||||||
const table = "VoiceLine";
|
|
||||||
|
|
||||||
export const addVoiceLineAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return addAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: ["name"],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const updateVoiceLineAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return updateAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: ["name"],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const deleteVoiceLineAction = async (id: string) => {
|
|
||||||
return deleteAction({ entity, table, id });
|
|
||||||
};
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { GridColDef } from "@mui/x-data-grid-pro";
|
|
||||||
import { List } from "@/app/_components/List";
|
|
||||||
|
|
||||||
type VoiceBotsListProps = {
|
|
||||||
rows: any[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export const VoiceBotsList: FC<VoiceBotsListProps> = ({ rows }) => {
|
|
||||||
const columns: GridColDef[] = [
|
|
||||||
{
|
|
||||||
field: "id",
|
|
||||||
headerName: "ID",
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "phoneNumber",
|
|
||||||
headerName: "Phone Number",
|
|
||||||
flex: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "createdAt",
|
|
||||||
headerName: "Created At",
|
|
||||||
valueGetter: (params: any) =>
|
|
||||||
new Date(params.row?.createdAt).toLocaleString(),
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "updatedAt",
|
|
||||||
headerName: "Updated At",
|
|
||||||
valueGetter: (params: any) =>
|
|
||||||
new Date(params.row?.updatedAt).toLocaleString(),
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<List
|
|
||||||
title="Voice Connections"
|
|
||||||
entity="voice"
|
|
||||||
rows={rows}
|
|
||||||
columns={columns}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
import { ServiceLayout } from "@/app/_components/ServiceLayout";
|
|
||||||
|
|
||||||
export default ServiceLayout;
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
import { VoiceBotsList } from "./_components/VoiceBotsList";
|
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
export default async function Page() {
|
|
||||||
const rows = await db.selectFrom("VoiceLine").selectAll().execute();
|
|
||||||
|
|
||||||
return <VoiceBotsList rows={rows} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { Create as InternalCreate } from "@/app/_components/Create";
|
|
||||||
import { addWebhookAction } from "../../_actions/webhooks";
|
|
||||||
|
|
||||||
export const Create: FC = () => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: {
|
|
||||||
name: "",
|
|
||||||
description: "",
|
|
||||||
one: "",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(addWebhookAction, initialState);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalCreate
|
|
||||||
title="Create Webhook"
|
|
||||||
entity="webhooks"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
formState={formState}
|
|
||||||
lines={3}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalCreate>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
import { Create } from "./_components/Create";
|
|
||||||
|
|
||||||
export default function Page() {
|
|
||||||
return <Create />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { DisplayTextField } from "ui";
|
|
||||||
import { Webhook } from "@/app/_lib/database";
|
|
||||||
import { Detail as InternalDetail } from "@/app/_components/Detail";
|
|
||||||
import { deleteWebhookAction } from "../../_actions/webhooks";
|
|
||||||
|
|
||||||
type DetailProps = {
|
|
||||||
row: Webhook;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Detail: FC<DetailProps> = ({ row }) => (
|
|
||||||
<InternalDetail
|
|
||||||
title={`Webhook: ${row.name}`}
|
|
||||||
entity="webhooks"
|
|
||||||
id={row.id}
|
|
||||||
deleteAction={deleteWebhookAction}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField name="name" label="Name" value={row.name} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
lines={3}
|
|
||||||
value={row.description}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalDetail>
|
|
||||||
);
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Detail } from "./_components/Detail";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("Webhook")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Detail row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { Webhook } from "@/app/_lib/database";
|
|
||||||
import { Edit as InternalEdit } from "@/app/_components/Edit";
|
|
||||||
import { updateWebhookAction } from "../../_actions/webhooks";
|
|
||||||
|
|
||||||
type EditProps = {
|
|
||||||
row: Webhook;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Edit: FC<EditProps> = ({ row }) => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: row,
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(
|
|
||||||
updateWebhookAction,
|
|
||||||
initialState,
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalEdit
|
|
||||||
title={`Edit Webhook: ${row.name}`}
|
|
||||||
entity="webhooks"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
formState={formState}
|
|
||||||
lines={3}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalEdit>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Edit } from "./_components/Edit";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("Webhook")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Edit row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
"use server";
|
|
||||||
|
|
||||||
import { addAction, updateAction, deleteAction } from "@/app/_lib/actions";
|
|
||||||
|
|
||||||
const entity = "webhooks";
|
|
||||||
const table = "Webhook";
|
|
||||||
|
|
||||||
export const addWebhookAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return addAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: ["name"],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const updateWebhookAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return updateAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: ["name"],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const deleteWebhookAction = async (id: string) => {
|
|
||||||
return deleteAction({ entity, table, id });
|
|
||||||
};
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { GridColDef } from "@mui/x-data-grid-pro";
|
|
||||||
import { List } from "@/app/_components/List";
|
|
||||||
|
|
||||||
type WebhooksListProps = {
|
|
||||||
rows: any[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export const WebhooksList: FC<WebhooksListProps> = ({ rows }) => {
|
|
||||||
const columns: GridColDef[] = [
|
|
||||||
{
|
|
||||||
field: "id",
|
|
||||||
headerName: "ID",
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "phoneNumber",
|
|
||||||
headerName: "Phone Number",
|
|
||||||
flex: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "createdAt",
|
|
||||||
headerName: "Created At",
|
|
||||||
valueGetter: (params: any) =>
|
|
||||||
new Date(params.row?.createdAt).toLocaleString(),
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "updatedAt",
|
|
||||||
headerName: "Updated At",
|
|
||||||
valueGetter: (params: any) =>
|
|
||||||
new Date(params.row?.updatedAt).toLocaleString(),
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<List title="Webhooks" entity="webhooks" rows={rows} columns={columns} />
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
import { ServiceLayout } from "@/app/_components/ServiceLayout";
|
|
||||||
|
|
||||||
export default ServiceLayout;
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
import { WebhooksList } from "./_components/WebhooksList";
|
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
export default async function Page() {
|
|
||||||
const rows = await db.selectFrom("Webhook").selectAll().execute();
|
|
||||||
console.log(rows);
|
|
||||||
|
|
||||||
return <WebhooksList rows={rows} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { Create as InternalCreate } from "@/app/_components/Create";
|
|
||||||
import { addWhatsappBotAction } from "../../_actions/whatsapp";
|
|
||||||
|
|
||||||
export const Create: FC = () => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: {
|
|
||||||
name: "",
|
|
||||||
description: "",
|
|
||||||
one: "",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(
|
|
||||||
addWhatsappBotAction,
|
|
||||||
initialState,
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalCreate
|
|
||||||
title="Create WhatsApp Connection"
|
|
||||||
entity="whatsapp"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
formState={formState}
|
|
||||||
lines={3}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalCreate>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
import { Create } from "./_components/Create";
|
|
||||||
|
|
||||||
export default function Page() {
|
|
||||||
return <Create />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { DisplayTextField } from "ui";
|
|
||||||
import { WhatsappBot } from "@/app/_lib/database";
|
|
||||||
import { Detail as InternalDetail } from "@/app/_components/Detail";
|
|
||||||
import { deleteWhatsappBotAction } from "../../_actions/whatsapp";
|
|
||||||
|
|
||||||
type DetailProps = {
|
|
||||||
row: WhatsappBot;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Detail: FC<DetailProps> = ({ row }) => (
|
|
||||||
<InternalDetail
|
|
||||||
title={`WhatsApp Connection: ${row.name}`}
|
|
||||||
entity="whatsapp"
|
|
||||||
id={row.id}
|
|
||||||
deleteAction={deleteWhatsappBotAction}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField name="name" label="Name" value={row.name} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<DisplayTextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
lines={3}
|
|
||||||
value={row.description}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalDetail>
|
|
||||||
);
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Detail } from "./_components/Detail";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("WhatsappBot")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Detail row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { useFormState } from "react-dom";
|
|
||||||
import { Grid } from "@mui/material";
|
|
||||||
import { TextField } from "ui";
|
|
||||||
import { WhatsappBot } from "@/app/_lib/database";
|
|
||||||
import { Edit as InternalEdit } from "@/app/_components/Edit";
|
|
||||||
import { updateWhatsappBotAction } from "../../_actions/whatsapp";
|
|
||||||
|
|
||||||
type EditProps = {
|
|
||||||
row: WhatsappBot;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Edit: FC<EditProps> = ({ row }) => {
|
|
||||||
const initialState = {
|
|
||||||
message: null,
|
|
||||||
errors: {},
|
|
||||||
values: row,
|
|
||||||
};
|
|
||||||
const [formState, formAction] = useFormState(
|
|
||||||
updateWhatsappBotAction,
|
|
||||||
initialState,
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<InternalEdit
|
|
||||||
title={`Edit Whatsapp Connection: ${row.name}`}
|
|
||||||
entity="whatsapp"
|
|
||||||
formAction={formAction}
|
|
||||||
formState={formState}
|
|
||||||
>
|
|
||||||
<Grid container direction="row" rowSpacing={3} columnSpacing={2}>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField name="name" label="Name" required formState={formState} />
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<TextField
|
|
||||||
name="description"
|
|
||||||
label="Description"
|
|
||||||
formState={formState}
|
|
||||||
lines={3}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={6}>
|
|
||||||
<TextField
|
|
||||||
name="token"
|
|
||||||
label="Token"
|
|
||||||
disabled
|
|
||||||
formState={formState}
|
|
||||||
refreshable
|
|
||||||
helperText="Token used to authenticate requests from Link"
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</InternalEdit>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
import { Edit } from "./_components/Edit";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
params: { segment: string[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function Page({ params: { segment } }: Props) {
|
|
||||||
const id = segment?.[0];
|
|
||||||
|
|
||||||
if (!id) return null;
|
|
||||||
|
|
||||||
const row = await db
|
|
||||||
.selectFrom("WhatsappBot")
|
|
||||||
.selectAll()
|
|
||||||
.where("id", "=", id)
|
|
||||||
.executeTakeFirst();
|
|
||||||
|
|
||||||
if (!row) return null;
|
|
||||||
|
|
||||||
return <Edit row={row} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
"use server";
|
|
||||||
|
|
||||||
import { addAction, updateAction, deleteAction } from "@/app/_lib/actions";
|
|
||||||
|
|
||||||
const entity = "whatsapp";
|
|
||||||
const table = "WhatsappBot";
|
|
||||||
|
|
||||||
export const addWhatsappBotAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return addAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: ["name"],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const updateWhatsappBotAction = async (
|
|
||||||
currentState: any,
|
|
||||||
formData: FormData,
|
|
||||||
) => {
|
|
||||||
return updateAction({
|
|
||||||
entity,
|
|
||||||
table,
|
|
||||||
fields: ["name"],
|
|
||||||
currentState,
|
|
||||||
formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const deleteWhatsappBotAction = async (id: string) => {
|
|
||||||
return deleteAction({ entity, table, id });
|
|
||||||
};
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { FC } from "react";
|
|
||||||
import { GridColDef } from "@mui/x-data-grid-pro";
|
|
||||||
import { WhatsappBot } from "@/app/_lib/database";
|
|
||||||
import { List } from "@/app/_components/List";
|
|
||||||
|
|
||||||
type WhatsappListProps = {
|
|
||||||
rows: WhatsappBot[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export const WhatsappList: FC<WhatsappListProps> = ({ rows }) => {
|
|
||||||
const columns: GridColDef[] = [
|
|
||||||
{
|
|
||||||
field: "name",
|
|
||||||
headerName: "Name",
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "phoneNumber",
|
|
||||||
headerName: "Phone Number",
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "description",
|
|
||||||
headerName: "Description",
|
|
||||||
flex: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: "updatedAt",
|
|
||||||
headerName: "Updated At",
|
|
||||||
valueGetter: (params: any) =>
|
|
||||||
new Date(params.row?.updatedAt).toLocaleString(),
|
|
||||||
flex: 1,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<List
|
|
||||||
title="WhatsApp Connections"
|
|
||||||
entity="whatsapp"
|
|
||||||
rows={rows}
|
|
||||||
columns={columns}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
import { ServiceLayout } from "@/app/_components/ServiceLayout";
|
|
||||||
|
|
||||||
export default ServiceLayout;
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
import { WhatsappList } from "./_components/WhatsappList";
|
|
||||||
import { db } from "@/app/_lib/database";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
export default async function Page() {
|
|
||||||
const rows = await db.selectFrom("WhatsappBot").selectAll().execute();
|
|
||||||
console.log(rows);
|
|
||||||
|
|
||||||
return <WhatsappList rows={rows} />;
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
"use server";
|
|
||||||
|
|
@ -26,7 +26,7 @@ export const Edit: FC<EditProps> = ({
|
||||||
if (formState.success) {
|
if (formState.success) {
|
||||||
router.push(`/${entity}`);
|
router.push(`/${entity}`);
|
||||||
}
|
}
|
||||||
}, [formState.success, router]);
|
}, [formState.success, router, entity]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dialog
|
<Dialog
|
||||||
|
|
|
||||||
|
|
@ -367,10 +367,12 @@ export const Sidebar: FC<SidebarProps> = ({ open, setOpen }) => {
|
||||||
{user?.image && (
|
{user?.image && (
|
||||||
<Grid item>
|
<Grid item>
|
||||||
<Box sx={{ width: 20, height: 20 }}>
|
<Box sx={{ width: 20, height: 20 }}>
|
||||||
<img
|
<Image
|
||||||
src={user?.image ?? ""}
|
src={user?.image ?? ""}
|
||||||
alt="Profile image"
|
alt="Profile image"
|
||||||
style={{ width: "100%" }}
|
width={20}
|
||||||
|
height={20}
|
||||||
|
unoptimized
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,16 @@
|
||||||
import type { ServiceConfig } from "./service";
|
import type { ServiceConfig } from "./service";
|
||||||
import { facebookConfig as facebook } from "./facebook";
|
import { facebookConfig as facebook } from "./facebook";
|
||||||
|
import { signalConfig as signal } from "./signal";
|
||||||
|
import { whatsappConfig as whatsapp } from "./whatsapp";
|
||||||
|
import { voiceConfig as voice } from "./voice";
|
||||||
|
import { webhooksConfig as webhooks } from "./webhooks";
|
||||||
|
import { usersConfig as users } from "./users";
|
||||||
|
|
||||||
export const serviceConfig: Record<string, ServiceConfig> = {
|
export const serviceConfig: Record<string, ServiceConfig> = {
|
||||||
facebook,
|
facebook,
|
||||||
|
signal,
|
||||||
|
whatsapp,
|
||||||
|
voice,
|
||||||
|
webhooks,
|
||||||
|
users,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -4,57 +4,64 @@ import { Service, ServiceConfig } from "./service";
|
||||||
export const facebookConfig: ServiceConfig = {
|
export const facebookConfig: ServiceConfig = {
|
||||||
entity: "facebook",
|
entity: "facebook",
|
||||||
table: "FacebookBot",
|
table: "FacebookBot",
|
||||||
displayName: "Facebook Connections",
|
displayName: "Facebook Connection",
|
||||||
createFields: [
|
createFields: [
|
||||||
{ name: "name", type: "text", label: "Name", required: true },
|
{
|
||||||
|
name: "name",
|
||||||
|
label: "Name",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "description",
|
name: "description",
|
||||||
type: "text",
|
|
||||||
label: "Description",
|
label: "Description",
|
||||||
required: true,
|
size: 12,
|
||||||
|
lines: 3,
|
||||||
},
|
},
|
||||||
{ name: "appId", type: "text", label: "App ID", required: true },
|
{ name: "appId", label: "App ID", required: true },
|
||||||
{ name: "appSecret", type: "text", label: "App Secret", required: true },
|
{ name: "appSecret", label: "App Secret", required: true },
|
||||||
{ name: "pageId", type: "text", label: "Page ID", required: true },
|
{ name: "pageId", label: "Page ID", required: true },
|
||||||
{
|
{
|
||||||
name: "pageAccessToken",
|
name: "pageAccessToken",
|
||||||
type: "text",
|
|
||||||
label: "Page Access Token",
|
label: "Page Access Token",
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
updateFields: [
|
updateFields: [
|
||||||
{ name: "name", type: "text", label: "Name", required: true },
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
{
|
{
|
||||||
name: "description",
|
name: "description",
|
||||||
type: "text",
|
|
||||||
label: "Description",
|
label: "Description",
|
||||||
required: true,
|
size: 12,
|
||||||
|
lines: 3,
|
||||||
},
|
},
|
||||||
{ name: "appId", type: "text", label: "App ID", required: true },
|
{ name: "appId", label: "App ID", required: true },
|
||||||
{ name: "appSecret", type: "text", label: "App Secret", required: true },
|
{ name: "appSecret", label: "App Secret", required: true },
|
||||||
{ name: "pageId", type: "text", label: "Page ID", required: true },
|
{ name: "pageId", label: "Page ID", required: true },
|
||||||
{
|
{
|
||||||
name: "pageAccessToken",
|
name: "pageAccessToken",
|
||||||
type: "text",
|
|
||||||
label: "Page Access Token",
|
label: "Page Access Token",
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
displayFields: [
|
displayFields: [
|
||||||
{ name: "name", type: "text", label: "Name", required: true },
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
{
|
{
|
||||||
name: "description",
|
name: "description",
|
||||||
type: "text",
|
|
||||||
label: "Description",
|
label: "Description",
|
||||||
required: true,
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{ name: "appId", label: "App ID", required: true },
|
||||||
|
{ name: "appSecret", label: "App Secret", required: true },
|
||||||
|
{
|
||||||
|
name: "pageId",
|
||||||
|
label: "Page ID",
|
||||||
|
required: true,
|
||||||
|
copyable: true,
|
||||||
},
|
},
|
||||||
{ name: "appId", type: "text", label: "App ID", required: true },
|
|
||||||
{ name: "appSecret", type: "text", label: "App Secret", required: true },
|
|
||||||
{ name: "pageId", type: "text", label: "Page ID", required: true },
|
|
||||||
{
|
{
|
||||||
name: "pageAccessToken",
|
name: "pageAccessToken",
|
||||||
type: "text",
|
|
||||||
label: "Page Access Token",
|
label: "Page Access Token",
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -7,16 +7,16 @@ const entities = [
|
||||||
"whatsapp",
|
"whatsapp",
|
||||||
"signal",
|
"signal",
|
||||||
"voice",
|
"voice",
|
||||||
"webhook",
|
"webhooks",
|
||||||
"user",
|
"users",
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
export type Entity = (typeof entities)[number];
|
export type Entity = (typeof entities)[number];
|
||||||
|
|
||||||
export type FieldDescription = {
|
export type FieldDescription = {
|
||||||
name: string;
|
name: string;
|
||||||
type: string;
|
|
||||||
label: string;
|
label: string;
|
||||||
|
type?: string;
|
||||||
lines?: number;
|
lines?: number;
|
||||||
copyable?: boolean;
|
copyable?: boolean;
|
||||||
defaultValue?: string;
|
defaultValue?: string;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,81 @@
|
||||||
import { NextRequest, NextResponse } from "next/server";
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
import { Service } from "./service";
|
import { Service, ServiceConfig } from "./service";
|
||||||
|
|
||||||
|
export const signalConfig: ServiceConfig = {
|
||||||
|
entity: "signal",
|
||||||
|
table: "SignalBot",
|
||||||
|
displayName: "Signal Connection",
|
||||||
|
createFields: [
|
||||||
|
{
|
||||||
|
name: "name",
|
||||||
|
label: "Name",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
size: 12,
|
||||||
|
lines: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "phoneNumber",
|
||||||
|
label: "phoneNumber",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
updateFields: [
|
||||||
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "phoneNumber",
|
||||||
|
label: "phoneNumber",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
displayFields: [
|
||||||
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "phoneNumber",
|
||||||
|
label: "phoneNumber",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
listColumns: [
|
||||||
|
{
|
||||||
|
field: "name",
|
||||||
|
headerName: "Name",
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "phoneNumber",
|
||||||
|
headerName: "Phone Number",
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "description",
|
||||||
|
headerName: "Description",
|
||||||
|
flex: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "updatedAt",
|
||||||
|
headerName: "Updated At",
|
||||||
|
valueGetter: (value: any) => new Date(value).toLocaleString(),
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
const getAllBots = async (req: NextRequest) => {
|
const getAllBots = async (req: NextRequest) => {
|
||||||
console.log({ req });
|
console.log({ req });
|
||||||
|
|
|
||||||
56
apps/bridge-frontend/app/_lib/users.ts
Normal file
56
apps/bridge-frontend/app/_lib/users.ts
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
import { ServiceConfig } from "./service";
|
||||||
|
|
||||||
|
export const usersConfig: ServiceConfig = {
|
||||||
|
entity: "users",
|
||||||
|
table: "User",
|
||||||
|
displayName: "User",
|
||||||
|
createFields: [
|
||||||
|
{
|
||||||
|
name: "name",
|
||||||
|
label: "Name",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "email",
|
||||||
|
label: "Email",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
updateFields: [
|
||||||
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
|
{
|
||||||
|
name: "email",
|
||||||
|
label: "Email",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
displayFields: [
|
||||||
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
|
{
|
||||||
|
name: "email",
|
||||||
|
label: "Email",
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
listColumns: [
|
||||||
|
{
|
||||||
|
field: "name",
|
||||||
|
headerName: "Name",
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "email",
|
||||||
|
headerName: "Email",
|
||||||
|
flex: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "updatedAt",
|
||||||
|
headerName: "Updated At",
|
||||||
|
valueGetter: (value: any) => new Date(value).toLocaleString(),
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
@ -1,5 +1,81 @@
|
||||||
import { NextRequest, NextResponse } from "next/server";
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
import { Service } from "./service";
|
import { Service, ServiceConfig } from "./service";
|
||||||
|
|
||||||
|
export const voiceConfig: ServiceConfig = {
|
||||||
|
entity: "voice",
|
||||||
|
table: "VoiceLine",
|
||||||
|
displayName: "Voice Line",
|
||||||
|
createFields: [
|
||||||
|
{
|
||||||
|
name: "name",
|
||||||
|
label: "Name",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
size: 12,
|
||||||
|
lines: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "phoneNumber",
|
||||||
|
label: "phoneNumber",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
updateFields: [
|
||||||
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "phoneNumber",
|
||||||
|
label: "Phone Number",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
displayFields: [
|
||||||
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "phoneNumber",
|
||||||
|
label: "Phone Number",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
listColumns: [
|
||||||
|
{
|
||||||
|
field: "name",
|
||||||
|
headerName: "Name",
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "phoneNumber",
|
||||||
|
headerName: "Phone Number",
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "description",
|
||||||
|
headerName: "Description",
|
||||||
|
flex: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "updatedAt",
|
||||||
|
headerName: "Updated At",
|
||||||
|
valueGetter: (value: any) => new Date(value).toLocaleString(),
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
const getAllBots = async (req: NextRequest) => {
|
const getAllBots = async (req: NextRequest) => {
|
||||||
console.log({ req });
|
console.log({ req });
|
||||||
|
|
|
||||||
57
apps/bridge-frontend/app/_lib/webhooks.ts
Normal file
57
apps/bridge-frontend/app/_lib/webhooks.ts
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
import { ServiceConfig } from "./service";
|
||||||
|
|
||||||
|
export const webhooksConfig: ServiceConfig = {
|
||||||
|
entity: "webhooks",
|
||||||
|
table: "Webhook",
|
||||||
|
displayName: "Webhook",
|
||||||
|
createFields: [
|
||||||
|
{
|
||||||
|
name: "name",
|
||||||
|
label: "Name",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
size: 12,
|
||||||
|
lines: 3,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
updateFields: [
|
||||||
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
displayFields: [
|
||||||
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
listColumns: [
|
||||||
|
{
|
||||||
|
field: "name",
|
||||||
|
headerName: "Name",
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "description",
|
||||||
|
headerName: "Description",
|
||||||
|
flex: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "updatedAt",
|
||||||
|
headerName: "Updated At",
|
||||||
|
valueGetter: (value: any) => new Date(value).toLocaleString(),
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
@ -1,5 +1,81 @@
|
||||||
import { NextRequest, NextResponse } from "next/server";
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
import { Service } from "./service";
|
import { Service, ServiceConfig } from "./service";
|
||||||
|
|
||||||
|
export const whatsappConfig: ServiceConfig = {
|
||||||
|
entity: "whatsapp",
|
||||||
|
table: "WhatsappBot",
|
||||||
|
displayName: "WhatsApp Connection",
|
||||||
|
createFields: [
|
||||||
|
{
|
||||||
|
name: "name",
|
||||||
|
label: "Name",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
size: 12,
|
||||||
|
lines: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "phoneNumber",
|
||||||
|
label: "Phone Number",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
updateFields: [
|
||||||
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "phoneNumber",
|
||||||
|
label: "Phone Number",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
displayFields: [
|
||||||
|
{ name: "name", label: "Name", required: true, size: 12 },
|
||||||
|
{
|
||||||
|
name: "description",
|
||||||
|
label: "Description",
|
||||||
|
required: true,
|
||||||
|
size: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "phoneNumber",
|
||||||
|
label: "Phone Number",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
listColumns: [
|
||||||
|
{
|
||||||
|
field: "name",
|
||||||
|
headerName: "Name",
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "phoneNumber",
|
||||||
|
headerName: "Phone Number",
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "description",
|
||||||
|
headerName: "Description",
|
||||||
|
flex: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "updatedAt",
|
||||||
|
headerName: "Updated At",
|
||||||
|
valueGetter: (value: any) => new Date(value).toLocaleString(),
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
const getAllBots = async (req: NextRequest) => {
|
const getAllBots = async (req: NextRequest) => {
|
||||||
console.log({ req });
|
console.log({ req });
|
||||||
|
|
|
||||||
|
|
@ -21,25 +21,25 @@
|
||||||
"@mui/lab": "^5.0.0-alpha.170",
|
"@mui/lab": "^5.0.0-alpha.170",
|
||||||
"@mui/material": "^5",
|
"@mui/material": "^5",
|
||||||
"@mui/material-nextjs": "^5.15.11",
|
"@mui/material-nextjs": "^5.15.11",
|
||||||
"@mui/x-data-grid-pro": "^7.3.0",
|
"@mui/x-data-grid-pro": "^7.3.1",
|
||||||
"@mui/x-date-pickers-pro": "^7.2.0",
|
"@mui/x-date-pickers-pro": "^7.3.1",
|
||||||
"@mui/x-license": "^7.2.0",
|
"@mui/x-license": "^7.2.0",
|
||||||
"date-fns": "^3.6.0",
|
"date-fns": "^3.6.0",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"kysely": "^0.26.1",
|
"kysely": "^0.26.1",
|
||||||
"material-ui-popup-state": "^5.1.0",
|
"material-ui-popup-state": "^5.1.0",
|
||||||
"mui-chips-input": "^2.1.4",
|
"mui-chips-input": "^2.1.4",
|
||||||
"next": "14.2.2",
|
"next": "14.2.3",
|
||||||
"next-auth": "^4.24.7",
|
"next-auth": "^4.24.7",
|
||||||
"pg": "^8.11.5",
|
"pg": "^8.11.5",
|
||||||
"react": "18.2.0",
|
"react": "18.3.0",
|
||||||
"react-cookie": "^7.1.4",
|
"react-cookie": "^7.1.4",
|
||||||
"react-digit-input": "^2.1.0",
|
"react-digit-input": "^2.1.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.3.0",
|
||||||
"react-qr-code": "^2.0.12",
|
"react-qr-code": "^2.0.12",
|
||||||
"react-timer-hook": "^3.0.7",
|
"react-timer-hook": "^3.0.7",
|
||||||
"tss-react": "^4.9.6",
|
"tss-react": "^4.9.7",
|
||||||
"tsx": "^4.7.2",
|
"tsx": "^4.7.3",
|
||||||
"ui": "*"
|
"ui": "*"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
"@types/react": "^18",
|
"@types/react": "^18",
|
||||||
"@types/react-dom": "^18",
|
"@types/react-dom": "^18",
|
||||||
"eslint": "^8",
|
"eslint": "^8",
|
||||||
"eslint-config-next": "14.2.2",
|
"eslint-config-next": "14.2.3",
|
||||||
"ts-config": "*",
|
"ts-config": "*",
|
||||||
"typescript": "^5"
|
"typescript": "^5"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"kysely": "^0.27.3",
|
"kysely": "^0.27.3",
|
||||||
"pg": "^8.11.5",
|
"pg": "^8.11.5",
|
||||||
"remeda": "^1.60.1",
|
"remeda": "^1.61.0",
|
||||||
"twilio": "^5.0.4"
|
"twilio": "^5.0.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
||||||
|
|
@ -20,39 +20,39 @@
|
||||||
"@mui/icons-material": "^5",
|
"@mui/icons-material": "^5",
|
||||||
"@mui/lab": "^5.0.0-alpha.170",
|
"@mui/lab": "^5.0.0-alpha.170",
|
||||||
"@mui/material": "^5",
|
"@mui/material": "^5",
|
||||||
"@mui/x-data-grid-pro": "^7.3.0",
|
"@mui/x-data-grid-pro": "^7.3.1",
|
||||||
"@mui/x-date-pickers-pro": "^7.2.0",
|
"@mui/x-date-pickers-pro": "^7.3.1",
|
||||||
"@opensearch-project/opensearch": "^2.7.0",
|
"@opensearch-project/opensearch": "^2.7.0",
|
||||||
"cryptr": "^6.3.0",
|
"cryptr": "^6.3.0",
|
||||||
"date-fns": "^3.6.0",
|
"date-fns": "^3.6.0",
|
||||||
"http-proxy-middleware": "^3.0.0",
|
"http-proxy-middleware": "^3.0.0",
|
||||||
"leafcutter-ui": "*",
|
"leafcutter-ui": "*",
|
||||||
"material-ui-popup-state": "^5.1.0",
|
"material-ui-popup-state": "^5.1.0",
|
||||||
"next": "14.2.2",
|
"next": "14.2.3",
|
||||||
"next-auth": "^4.24.7",
|
"next-auth": "^4.24.7",
|
||||||
"next-http-proxy-middleware": "^1.2.6",
|
"next-http-proxy-middleware": "^1.2.6",
|
||||||
"opensearch-common": "*",
|
"opensearch-common": "*",
|
||||||
"nodemailer": "^6.9.13",
|
"nodemailer": "^6.9.13",
|
||||||
"react": "18.2.0",
|
"react": "18.3.0",
|
||||||
"react-cookie": "^7.1.4",
|
"react-cookie": "^7.1.4",
|
||||||
"react-cookie-consent": "^9.0.0",
|
"react-cookie-consent": "^9.0.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.3.0",
|
||||||
"react-iframe": "^1.8.5",
|
"react-iframe": "^1.8.5",
|
||||||
"react-markdown": "^9.0.1",
|
"react-markdown": "^9.0.1",
|
||||||
"react-polyglot": "^0.7.2",
|
"react-polyglot": "^0.7.2",
|
||||||
"sharp": "^0.33.3",
|
"sharp": "^0.33.3",
|
||||||
"swr": "^2.2.5",
|
"swr": "^2.2.5",
|
||||||
"tss-react": "^4.9.6",
|
"tss-react": "^4.9.7",
|
||||||
"uuid": "^9.0.1"
|
"uuid": "^9.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.24.4",
|
"@babel/core": "^7.24.4",
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^20.12.7",
|
||||||
"@types/react": "18.2.79",
|
"@types/react": "18.3.0",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^9.0.8",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"eslint": "^8.0.0",
|
"eslint": "^8.0.0",
|
||||||
"eslint-config-next": "^14.2.2",
|
"eslint-config-next": "^14.2.3",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-jsx-a11y": "^6.8.0",
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
||||||
|
|
|
||||||
|
|
@ -18,36 +18,36 @@
|
||||||
"@mui/icons-material": "^5",
|
"@mui/icons-material": "^5",
|
||||||
"@mui/lab": "^5.0.0-alpha.170",
|
"@mui/lab": "^5.0.0-alpha.170",
|
||||||
"@mui/material": "^5",
|
"@mui/material": "^5",
|
||||||
"@mui/x-data-grid-pro": "^7.3.0",
|
"@mui/x-data-grid-pro": "^7.3.1",
|
||||||
"@mui/x-date-pickers-pro": "^7.2.0",
|
"@mui/x-date-pickers-pro": "^7.3.1",
|
||||||
"date-fns": "^3.6.0",
|
"date-fns": "^3.6.0",
|
||||||
"graphql-request": "^6.1.0",
|
"graphql-request": "^6.1.0",
|
||||||
"leafcutter-ui": "*",
|
"leafcutter-ui": "*",
|
||||||
"material-ui-popup-state": "^5.1.0",
|
"material-ui-popup-state": "^5.1.0",
|
||||||
"bridge-ui": "*",
|
"bridge-ui": "*",
|
||||||
"mui-chips-input": "^2.1.4",
|
"mui-chips-input": "^2.1.4",
|
||||||
"next": "14.2.2",
|
"next": "14.2.3",
|
||||||
"next-auth": "^4.24.7",
|
"next-auth": "^4.24.7",
|
||||||
"opensearch-common": "*",
|
"opensearch-common": "*",
|
||||||
"react": "18.2.0",
|
"react": "18.3.0",
|
||||||
"react-cookie": "^7.1.4",
|
"react-cookie": "^7.1.4",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.3.0",
|
||||||
"react-iframe": "^1.8.5",
|
"react-iframe": "^1.8.5",
|
||||||
"react-polyglot": "^0.7.2",
|
"react-polyglot": "^0.7.2",
|
||||||
"sharp": "^0.33.3",
|
"sharp": "^0.33.3",
|
||||||
"swr": "^2.2.5",
|
"swr": "^2.2.5",
|
||||||
"tss-react": "^4.9.6",
|
"tss-react": "^4.9.7",
|
||||||
"twilio-client": "^1.15.1",
|
"twilio-client": "^1.15.1",
|
||||||
"ui": "*"
|
"ui": "*"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.24.4",
|
"@babel/core": "^7.24.4",
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^20.12.7",
|
||||||
"@types/react": "18.2.79",
|
"@types/react": "18.3.0",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^9.0.8",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"eslint": "^8.0.0",
|
"eslint": "^8.0.0",
|
||||||
"eslint-config-next": "^14.2.2",
|
"eslint-config-next": "^14.2.3",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-jsx-a11y": "^6.8.0",
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
||||||
|
|
|
||||||
308
package-lock.json
generated
308
package-lock.json
generated
|
|
@ -33,25 +33,25 @@
|
||||||
"@mui/lab": "^5.0.0-alpha.170",
|
"@mui/lab": "^5.0.0-alpha.170",
|
||||||
"@mui/material": "^5",
|
"@mui/material": "^5",
|
||||||
"@mui/material-nextjs": "^5.15.11",
|
"@mui/material-nextjs": "^5.15.11",
|
||||||
"@mui/x-data-grid-pro": "^7.3.0",
|
"@mui/x-data-grid-pro": "^7.3.1",
|
||||||
"@mui/x-date-pickers-pro": "^7.2.0",
|
"@mui/x-date-pickers-pro": "^7.3.1",
|
||||||
"@mui/x-license": "^7.2.0",
|
"@mui/x-license": "^7.2.0",
|
||||||
"date-fns": "^3.6.0",
|
"date-fns": "^3.6.0",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"kysely": "^0.26.1",
|
"kysely": "^0.26.1",
|
||||||
"material-ui-popup-state": "^5.1.0",
|
"material-ui-popup-state": "^5.1.0",
|
||||||
"mui-chips-input": "^2.1.4",
|
"mui-chips-input": "^2.1.4",
|
||||||
"next": "14.2.2",
|
"next": "14.2.3",
|
||||||
"next-auth": "^4.24.7",
|
"next-auth": "^4.24.7",
|
||||||
"pg": "^8.11.5",
|
"pg": "^8.11.5",
|
||||||
"react": "18.2.0",
|
"react": "18.3.0",
|
||||||
"react-cookie": "^7.1.4",
|
"react-cookie": "^7.1.4",
|
||||||
"react-digit-input": "^2.1.0",
|
"react-digit-input": "^2.1.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.3.0",
|
||||||
"react-qr-code": "^2.0.12",
|
"react-qr-code": "^2.0.12",
|
||||||
"react-timer-hook": "^3.0.7",
|
"react-timer-hook": "^3.0.7",
|
||||||
"tss-react": "^4.9.6",
|
"tss-react": "^4.9.7",
|
||||||
"tsx": "^4.7.2",
|
"tsx": "^4.7.3",
|
||||||
"ui": "*"
|
"ui": "*"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
"@types/react": "^18",
|
"@types/react": "^18",
|
||||||
"@types/react-dom": "^18",
|
"@types/react-dom": "^18",
|
||||||
"eslint": "^8",
|
"eslint": "^8",
|
||||||
"eslint-config-next": "14.2.2",
|
"eslint-config-next": "14.2.3",
|
||||||
"ts-config": "*",
|
"ts-config": "*",
|
||||||
"typescript": "^5"
|
"typescript": "^5"
|
||||||
}
|
}
|
||||||
|
|
@ -95,7 +95,7 @@
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"kysely": "^0.27.3",
|
"kysely": "^0.27.3",
|
||||||
"pg": "^8.11.5",
|
"pg": "^8.11.5",
|
||||||
"remeda": "^1.60.1",
|
"remeda": "^1.61.0",
|
||||||
"twilio": "^5.0.4"
|
"twilio": "^5.0.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
@ -172,39 +172,39 @@
|
||||||
"@mui/icons-material": "^5",
|
"@mui/icons-material": "^5",
|
||||||
"@mui/lab": "^5.0.0-alpha.170",
|
"@mui/lab": "^5.0.0-alpha.170",
|
||||||
"@mui/material": "^5",
|
"@mui/material": "^5",
|
||||||
"@mui/x-data-grid-pro": "^7.3.0",
|
"@mui/x-data-grid-pro": "^7.3.1",
|
||||||
"@mui/x-date-pickers-pro": "^7.2.0",
|
"@mui/x-date-pickers-pro": "^7.3.1",
|
||||||
"@opensearch-project/opensearch": "^2.7.0",
|
"@opensearch-project/opensearch": "^2.7.0",
|
||||||
"cryptr": "^6.3.0",
|
"cryptr": "^6.3.0",
|
||||||
"date-fns": "^3.6.0",
|
"date-fns": "^3.6.0",
|
||||||
"http-proxy-middleware": "^3.0.0",
|
"http-proxy-middleware": "^3.0.0",
|
||||||
"leafcutter-ui": "*",
|
"leafcutter-ui": "*",
|
||||||
"material-ui-popup-state": "^5.1.0",
|
"material-ui-popup-state": "^5.1.0",
|
||||||
"next": "14.2.2",
|
"next": "14.2.3",
|
||||||
"next-auth": "^4.24.7",
|
"next-auth": "^4.24.7",
|
||||||
"next-http-proxy-middleware": "^1.2.6",
|
"next-http-proxy-middleware": "^1.2.6",
|
||||||
"nodemailer": "^6.9.13",
|
"nodemailer": "^6.9.13",
|
||||||
"opensearch-common": "*",
|
"opensearch-common": "*",
|
||||||
"react": "18.2.0",
|
"react": "18.3.0",
|
||||||
"react-cookie": "^7.1.4",
|
"react-cookie": "^7.1.4",
|
||||||
"react-cookie-consent": "^9.0.0",
|
"react-cookie-consent": "^9.0.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.3.0",
|
||||||
"react-iframe": "^1.8.5",
|
"react-iframe": "^1.8.5",
|
||||||
"react-markdown": "^9.0.1",
|
"react-markdown": "^9.0.1",
|
||||||
"react-polyglot": "^0.7.2",
|
"react-polyglot": "^0.7.2",
|
||||||
"sharp": "^0.33.3",
|
"sharp": "^0.33.3",
|
||||||
"swr": "^2.2.5",
|
"swr": "^2.2.5",
|
||||||
"tss-react": "^4.9.6",
|
"tss-react": "^4.9.7",
|
||||||
"uuid": "^9.0.1"
|
"uuid": "^9.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.24.4",
|
"@babel/core": "^7.24.4",
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^20.12.7",
|
||||||
"@types/react": "18.2.79",
|
"@types/react": "18.3.0",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^9.0.8",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"eslint": "^8.0.0",
|
"eslint": "^8.0.0",
|
||||||
"eslint-config-next": "^14.2.2",
|
"eslint-config-next": "^14.2.3",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-jsx-a11y": "^6.8.0",
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
||||||
|
|
@ -237,36 +237,36 @@
|
||||||
"@mui/icons-material": "^5",
|
"@mui/icons-material": "^5",
|
||||||
"@mui/lab": "^5.0.0-alpha.170",
|
"@mui/lab": "^5.0.0-alpha.170",
|
||||||
"@mui/material": "^5",
|
"@mui/material": "^5",
|
||||||
"@mui/x-data-grid-pro": "^7.3.0",
|
"@mui/x-data-grid-pro": "^7.3.1",
|
||||||
"@mui/x-date-pickers-pro": "^7.2.0",
|
"@mui/x-date-pickers-pro": "^7.3.1",
|
||||||
"bridge-ui": "*",
|
"bridge-ui": "*",
|
||||||
"date-fns": "^3.6.0",
|
"date-fns": "^3.6.0",
|
||||||
"graphql-request": "^6.1.0",
|
"graphql-request": "^6.1.0",
|
||||||
"leafcutter-ui": "*",
|
"leafcutter-ui": "*",
|
||||||
"material-ui-popup-state": "^5.1.0",
|
"material-ui-popup-state": "^5.1.0",
|
||||||
"mui-chips-input": "^2.1.4",
|
"mui-chips-input": "^2.1.4",
|
||||||
"next": "14.2.2",
|
"next": "14.2.3",
|
||||||
"next-auth": "^4.24.7",
|
"next-auth": "^4.24.7",
|
||||||
"opensearch-common": "*",
|
"opensearch-common": "*",
|
||||||
"react": "18.2.0",
|
"react": "18.3.0",
|
||||||
"react-cookie": "^7.1.4",
|
"react-cookie": "^7.1.4",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.3.0",
|
||||||
"react-iframe": "^1.8.5",
|
"react-iframe": "^1.8.5",
|
||||||
"react-polyglot": "^0.7.2",
|
"react-polyglot": "^0.7.2",
|
||||||
"sharp": "^0.33.3",
|
"sharp": "^0.33.3",
|
||||||
"swr": "^2.2.5",
|
"swr": "^2.2.5",
|
||||||
"tss-react": "^4.9.6",
|
"tss-react": "^4.9.7",
|
||||||
"twilio-client": "^1.15.1",
|
"twilio-client": "^1.15.1",
|
||||||
"ui": "*"
|
"ui": "*"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.24.4",
|
"@babel/core": "^7.24.4",
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^20.12.7",
|
||||||
"@types/react": "18.2.79",
|
"@types/react": "18.3.0",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^9.0.8",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"eslint": "^8.0.0",
|
"eslint": "^8.0.0",
|
||||||
"eslint-config-next": "^14.2.2",
|
"eslint-config-next": "^14.2.3",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-jsx-a11y": "^6.8.0",
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
||||||
|
|
@ -4247,9 +4247,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mui/x-data-grid": {
|
"node_modules/@mui/x-data-grid": {
|
||||||
"version": "7.3.0",
|
"version": "7.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.3.1.tgz",
|
||||||
"integrity": "sha512-IIDS6Yvxe+1eRj65q8cgnJg5yF2aIJYuHrY00W/UaFyjxwj3xSzqg3bdEfbjE2gHGS7lEJJbXSenPNGybzW99A==",
|
"integrity": "sha512-Z+KlDnk2oZ5uthP4q7koRkD7D3vZ0aiqX+51EmnzUXQljjeQ57GbLm/VHcY+XEg7vvtMsGpycLXFdwwjqINk0A==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.24.0",
|
"@babel/runtime": "^7.24.0",
|
||||||
"@mui/system": "^5.15.14",
|
"@mui/system": "^5.15.14",
|
||||||
|
|
@ -4272,14 +4272,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mui/x-data-grid-pro": {
|
"node_modules/@mui/x-data-grid-pro": {
|
||||||
"version": "7.3.0",
|
"version": "7.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@mui/x-data-grid-pro/-/x-data-grid-pro-7.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@mui/x-data-grid-pro/-/x-data-grid-pro-7.3.1.tgz",
|
||||||
"integrity": "sha512-PWYqSu+vGZfUDVRvj7N8hz/8tFav8qnlvHiTYbq8+hvS3tNHDMBbgsMXva8YEzi0svRg9FV333gaqtEYRyE/0Q==",
|
"integrity": "sha512-e1irmF6OyRN3Bg3HDeJ4OTc4vk61TencI1xDwcI30qArlvNM4rDAsT0e+UVvKJakGioZcoVoYv2HBld5HAy/Nw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.24.0",
|
"@babel/runtime": "^7.24.0",
|
||||||
"@mui/system": "^5.15.14",
|
"@mui/system": "^5.15.14",
|
||||||
"@mui/utils": "^5.15.14",
|
"@mui/utils": "^5.15.14",
|
||||||
"@mui/x-data-grid": "7.3.0",
|
"@mui/x-data-grid": "7.3.1",
|
||||||
"@mui/x-license": "7.2.0",
|
"@mui/x-license": "7.2.0",
|
||||||
"@types/format-util": "^1.0.4",
|
"@types/format-util": "^1.0.4",
|
||||||
"clsx": "^2.1.0",
|
"clsx": "^2.1.0",
|
||||||
|
|
@ -4296,9 +4296,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mui/x-date-pickers": {
|
"node_modules/@mui/x-date-pickers": {
|
||||||
"version": "7.2.0",
|
"version": "7.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.3.1.tgz",
|
||||||
"integrity": "sha512-hsXugZ+n1ZnHRYzf7+PFrjZ44T+FyGZmTreBmH0M2RUaAblgK+A1V3KNLT+r4Y9gJLH+92LwePxQ9xyfR+E51A==",
|
"integrity": "sha512-ZIZC+/L5ch3+J6EWRWd/rzz1z/9KPZli8sO1g7t30uFgyjpRuMK4GuazRMqDDFq1KIUtk31qJV0sKKvUsVrKRw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.24.0",
|
"@babel/runtime": "^7.24.0",
|
||||||
"@mui/base": "^5.0.0-beta.40",
|
"@mui/base": "^5.0.0-beta.40",
|
||||||
|
|
@ -4361,15 +4361,15 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mui/x-date-pickers-pro": {
|
"node_modules/@mui/x-date-pickers-pro": {
|
||||||
"version": "7.2.0",
|
"version": "7.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@mui/x-date-pickers-pro/-/x-date-pickers-pro-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@mui/x-date-pickers-pro/-/x-date-pickers-pro-7.3.1.tgz",
|
||||||
"integrity": "sha512-fPzgMBFxTnb+ypbmWQKuiFil/EDzDM4dFMQW8KZFEiMQIIxoAnwj3L6SwKPkjJAKIwVoil7/cHqOXUaKX9z8PQ==",
|
"integrity": "sha512-+gW0xzKtEeBHayV1bO3uoenF4LbRURNjKYoOeSHqmT1X0n19vFvnbGP1zpuMN7LFeyk3W33IVkXi9SAgkk4dkA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.24.0",
|
"@babel/runtime": "^7.24.0",
|
||||||
"@mui/base": "^5.0.0-beta.40",
|
"@mui/base": "^5.0.0-beta.40",
|
||||||
"@mui/system": "^5.15.14",
|
"@mui/system": "^5.15.14",
|
||||||
"@mui/utils": "^5.15.14",
|
"@mui/utils": "^5.15.14",
|
||||||
"@mui/x-date-pickers": "7.2.0",
|
"@mui/x-date-pickers": "7.3.1",
|
||||||
"@mui/x-license": "7.2.0",
|
"@mui/x-license": "7.2.0",
|
||||||
"clsx": "^2.1.0",
|
"clsx": "^2.1.0",
|
||||||
"prop-types": "^15.8.1",
|
"prop-types": "^15.8.1",
|
||||||
|
|
@ -4438,23 +4438,23 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/env": {
|
"node_modules/@next/env": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz",
|
||||||
"integrity": "sha512-sk72qRfM1Q90XZWYRoJKu/UWlTgihrASiYw/scb15u+tyzcze3bOuJ/UV6TBOQEeUaxOkRqGeuGUdiiuxc5oqw=="
|
"integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA=="
|
||||||
},
|
},
|
||||||
"node_modules/@next/eslint-plugin-next": {
|
"node_modules/@next/eslint-plugin-next": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz",
|
||||||
"integrity": "sha512-q+Ec2648JtBpKiu/FSJm8HAsFXlNvioHeBCbTP12T1SGcHYwhqHULSfQgFkPgHDu3kzNp2Kem4J54bK4rPQ5SQ==",
|
"integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"glob": "10.3.10"
|
"glob": "10.3.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-darwin-arm64": {
|
"node_modules/@next/swc-darwin-arm64": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz",
|
||||||
"integrity": "sha512-3iPgMhzbalizGwHNFUcGnDhFPSgVBHQ8aqSTAMxB5BvJG0oYrDf1WOJZlbXBgunOEj/8KMVbejEur/FpvFsgFQ==",
|
"integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -4467,9 +4467,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-darwin-x64": {
|
"node_modules/@next/swc-darwin-x64": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz",
|
||||||
"integrity": "sha512-x7Afi/jt0ZBRUZHTi49yyej4o8znfIMHO4RvThuoc0P+uli8Jd99y5GKjxoYunPKsXL09xBXEM1+OQy2xEL0Ag==",
|
"integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -4482,9 +4482,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-linux-arm64-gnu": {
|
"node_modules/@next/swc-linux-arm64-gnu": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz",
|
||||||
"integrity": "sha512-zbfPtkk7L41ODMJwSp5VbmPozPmMMQrzAc0HAUomVeVIIwlDGs/UCqLJvLNDt4jpWgc21SjjyIn762lNGrMaUA==",
|
"integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -4497,9 +4497,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-linux-arm64-musl": {
|
"node_modules/@next/swc-linux-arm64-musl": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz",
|
||||||
"integrity": "sha512-wPbS3pI/JU16rm3XdLvvTmlsmm1nd+sBa2ohXgBZcShX4TgOjD4R+RqHKlI1cjo/jDZKXt6OxmcU0Iys0OC/yg==",
|
"integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -4512,9 +4512,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-linux-x64-gnu": {
|
"node_modules/@next/swc-linux-x64-gnu": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz",
|
||||||
"integrity": "sha512-NqWOHqqq8iC9tuHvZxjQ2tX+jWy2X9y8NX2mcB4sj2bIccuCxbIZrU/ThFPZZPauygajZuVQ6zediejQHwZHwQ==",
|
"integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -4527,9 +4527,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-linux-x64-musl": {
|
"node_modules/@next/swc-linux-x64-musl": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz",
|
||||||
"integrity": "sha512-lGepHhwb9sGhCcU7999+iK1ZZT+6rrIoVg40MP7DZski9GIZP80wORSbt5kJzh9v2x2ev2lxC6VgwMQT0PcgTA==",
|
"integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -4542,9 +4542,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-win32-arm64-msvc": {
|
"node_modules/@next/swc-win32-arm64-msvc": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz",
|
||||||
"integrity": "sha512-TZSh/48SfcLEQ4rD25VVn2kdIgUWmMflRX3OiyPwGNXn3NiyPqhqei/BaqCYXViIQ+6QsG9R0C8LftMqy8JPMA==",
|
"integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -4557,9 +4557,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-win32-ia32-msvc": {
|
"node_modules/@next/swc-win32-ia32-msvc": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz",
|
||||||
"integrity": "sha512-M0tBVNMEBJN2ZNQWlcekMn6pvLria7Sa2Fai5znm7CCJz4pP3lrvlSxhKdkCerk0D9E0bqx5yAo3o2Q7RrD4gA==",
|
"integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
|
|
@ -4572,9 +4572,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-win32-x64-msvc": {
|
"node_modules/@next/swc-win32-x64-msvc": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz",
|
||||||
"integrity": "sha512-a/20E/wtTJZ3Ykv3f/8F0l7TtgQa2LWHU2oNB9bsu0VjqGuGGHmm/q6waoUNQYTVPYrrlxxaHjJcDV6aiSTt/w==",
|
"integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -5022,18 +5022,18 @@
|
||||||
"integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q=="
|
"integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/react": {
|
"node_modules/@types/react": {
|
||||||
"version": "18.2.79",
|
"version": "18.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.79.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.0.tgz",
|
||||||
"integrity": "sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==",
|
"integrity": "sha512-DiUcKjzE6soLyln8NNZmyhcQjVv+WsUIFSqetMN0p8927OztKT4VTfFTqsbAi5oAGIcgOmOajlfBqyptDDjZRw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/prop-types": "*",
|
"@types/prop-types": "*",
|
||||||
"csstype": "^3.0.2"
|
"csstype": "^3.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/react-dom": {
|
"node_modules/@types/react-dom": {
|
||||||
"version": "18.2.25",
|
"version": "18.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.25.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
|
||||||
"integrity": "sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==",
|
"integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/react": "*"
|
"@types/react": "*"
|
||||||
|
|
@ -7466,9 +7466,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.4.746",
|
"version": "1.4.749",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.746.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.749.tgz",
|
||||||
"integrity": "sha512-jeWaIta2rIG2FzHaYIhSuVWqC6KJYo7oSBX4Jv7g+aVujKztfvdpf+n6MGwZdC5hQXbax4nntykLH2juIQrfPg=="
|
"integrity": "sha512-LRMMrM9ITOvue0PoBrvNIraVmuDbJV5QC9ierz/z5VilMdPOVMjOtpICNld3PuXuTZ3CHH/UPxX9gHhAPwi+0Q=="
|
||||||
},
|
},
|
||||||
"node_modules/emittery": {
|
"node_modules/emittery": {
|
||||||
"version": "0.13.1",
|
"version": "0.13.1",
|
||||||
|
|
@ -7613,14 +7613,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/es-iterator-helpers": {
|
"node_modules/es-iterator-helpers": {
|
||||||
"version": "1.0.18",
|
"version": "1.0.19",
|
||||||
"resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz",
|
"resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
|
||||||
"integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==",
|
"integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"call-bind": "^1.0.7",
|
"call-bind": "^1.0.7",
|
||||||
"define-properties": "^1.2.1",
|
"define-properties": "^1.2.1",
|
||||||
"es-abstract": "^1.23.0",
|
"es-abstract": "^1.23.3",
|
||||||
"es-errors": "^1.3.0",
|
"es-errors": "^1.3.0",
|
||||||
"es-set-tostringtag": "^2.0.3",
|
"es-set-tostringtag": "^2.0.3",
|
||||||
"function-bind": "^1.1.2",
|
"function-bind": "^1.1.2",
|
||||||
|
|
@ -7807,12 +7807,12 @@
|
||||||
"link": true
|
"link": true
|
||||||
},
|
},
|
||||||
"node_modules/eslint-config-next": {
|
"node_modules/eslint-config-next": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz",
|
||||||
"integrity": "sha512-12/uFc0KX+wUs7EDpOUGKMXBXZJiBVGdK5/m/QgXOCg2mQ0bQWoKSWNrCeOg7Vum6Kw1d1TW453W6xh+GbHquw==",
|
"integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@next/eslint-plugin-next": "14.2.2",
|
"@next/eslint-plugin-next": "14.2.3",
|
||||||
"@rushstack/eslint-patch": "^1.3.3",
|
"@rushstack/eslint-patch": "^1.3.3",
|
||||||
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0",
|
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0",
|
||||||
"eslint-import-resolver-node": "^0.3.6",
|
"eslint-import-resolver-node": "^0.3.6",
|
||||||
|
|
@ -7945,14 +7945,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-cypress": {
|
"node_modules/eslint-plugin-cypress": {
|
||||||
"version": "2.15.2",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.0.1.tgz",
|
||||||
"integrity": "sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==",
|
"integrity": "sha512-vcWCHa+clkJewPiz4lC8yHnMUMEVPx0QcZ3zA0sXt7MfdcYL4d+UPs51jR4CVLZDMJkMx72cmq7M9yxiO+bnFg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"globals": "^13.20.0"
|
"globals": "^13.20.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": ">= 3.2.1"
|
"eslint": ">=7 <9"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-cypress/node_modules/globals": {
|
"node_modules/eslint-plugin-cypress/node_modules/globals": {
|
||||||
|
|
@ -8355,9 +8355,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-react-hooks": {
|
"node_modules/eslint-plugin-react-hooks": {
|
||||||
"version": "4.6.0",
|
"version": "4.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.1.tgz",
|
||||||
"integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
|
"integrity": "sha512-Ck77j8hF7l9N4S/rzSLOWEKpn994YH6iwUK8fr9mXIaQvGpQYmOnQLbiue1u5kI5T1y+gdgqosnEAO9NCz0DBg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
|
|
@ -12393,11 +12393,11 @@
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/next": {
|
"node_modules/next": {
|
||||||
"version": "14.2.2",
|
"version": "14.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/next/-/next-14.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz",
|
||||||
"integrity": "sha512-oGwUaa2bCs47FbuxWMpOoXtBMPYpvTPgdZr3UAo+pu7Ns00z9otmYpoeV1HEiYL06AlRQQIA/ypK526KjJfaxg==",
|
"integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@next/env": "14.2.2",
|
"@next/env": "14.2.3",
|
||||||
"@swc/helpers": "0.5.5",
|
"@swc/helpers": "0.5.5",
|
||||||
"busboy": "1.6.0",
|
"busboy": "1.6.0",
|
||||||
"caniuse-lite": "^1.0.30001579",
|
"caniuse-lite": "^1.0.30001579",
|
||||||
|
|
@ -12412,15 +12412,15 @@
|
||||||
"node": ">=18.17.0"
|
"node": ">=18.17.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@next/swc-darwin-arm64": "14.2.2",
|
"@next/swc-darwin-arm64": "14.2.3",
|
||||||
"@next/swc-darwin-x64": "14.2.2",
|
"@next/swc-darwin-x64": "14.2.3",
|
||||||
"@next/swc-linux-arm64-gnu": "14.2.2",
|
"@next/swc-linux-arm64-gnu": "14.2.3",
|
||||||
"@next/swc-linux-arm64-musl": "14.2.2",
|
"@next/swc-linux-arm64-musl": "14.2.3",
|
||||||
"@next/swc-linux-x64-gnu": "14.2.2",
|
"@next/swc-linux-x64-gnu": "14.2.3",
|
||||||
"@next/swc-linux-x64-musl": "14.2.2",
|
"@next/swc-linux-x64-musl": "14.2.3",
|
||||||
"@next/swc-win32-arm64-msvc": "14.2.2",
|
"@next/swc-win32-arm64-msvc": "14.2.3",
|
||||||
"@next/swc-win32-ia32-msvc": "14.2.2",
|
"@next/swc-win32-ia32-msvc": "14.2.3",
|
||||||
"@next/swc-win32-x64-msvc": "14.2.2"
|
"@next/swc-win32-x64-msvc": "14.2.3"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@opentelemetry/api": "^1.1.0",
|
"@opentelemetry/api": "^1.1.0",
|
||||||
|
|
@ -12977,9 +12977,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/path-scurry/node_modules/lru-cache": {
|
"node_modules/path-scurry/node_modules/lru-cache": {
|
||||||
"version": "10.2.0",
|
"version": "10.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.1.tgz",
|
||||||
"integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
|
"integrity": "sha512-tS24spDe/zXhWbNPErCHs/AGOzbKGHT+ybSBqmdLm8WZ1xXLWvH8Qn71QPAlqVhd0qUTWjy+Kl9JmISgDdEjsA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "14 || >=16.14"
|
"node": "14 || >=16.14"
|
||||||
|
|
@ -13534,9 +13534,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react": {
|
"node_modules/react": {
|
||||||
"version": "18.2.0",
|
"version": "18.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/react/-/react-18.3.0.tgz",
|
||||||
"integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
|
"integrity": "sha512-RPutkJftSAldDibyrjuku7q11d3oy6wKOyPe5K1HA/HwwrXcEqBdHsLypkC2FFYjP7bPUa6gbzSBhw4sY2JcDg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loose-envify": "^1.1.0"
|
"loose-envify": "^1.1.0"
|
||||||
},
|
},
|
||||||
|
|
@ -13577,15 +13577,15 @@
|
||||||
"integrity": "sha512-pGv0CtSmu3Mf4cD79LoYtJI7Wq4dpPiLiY1wvKsNaR+X2sJyk1ETiIxjq6G8i+XJqNXExM6vuytzDqblkkSaFw=="
|
"integrity": "sha512-pGv0CtSmu3Mf4cD79LoYtJI7Wq4dpPiLiY1wvKsNaR+X2sJyk1ETiIxjq6G8i+XJqNXExM6vuytzDqblkkSaFw=="
|
||||||
},
|
},
|
||||||
"node_modules/react-dom": {
|
"node_modules/react-dom": {
|
||||||
"version": "18.2.0",
|
"version": "18.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.0.tgz",
|
||||||
"integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
|
"integrity": "sha512-zaKdLBftQJnvb7FtDIpZtsAIb2MZU087RM8bRDZU8LVCCFYjPTsDZJNFUWPcVz3HFSN1n/caxi0ca4B/aaVQGQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loose-envify": "^1.1.0",
|
"loose-envify": "^1.1.0",
|
||||||
"scheduler": "^0.23.0"
|
"scheduler": "^0.23.1"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": "^18.2.0"
|
"react": "^18.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-iframe": {
|
"node_modules/react-iframe": {
|
||||||
|
|
@ -13600,9 +13600,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-is": {
|
"node_modules/react-is": {
|
||||||
"version": "18.2.0",
|
"version": "18.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.0.tgz",
|
||||||
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
|
"integrity": "sha512-wRiUsea88TjKDc4FBEn+sLvIDesp6brMbGWnJGjew2waAc9evdhja/2LvePc898HJbHw0L+MTWy7NhpnELAvLQ=="
|
||||||
},
|
},
|
||||||
"node_modules/react-markdown": {
|
"node_modules/react-markdown": {
|
||||||
"version": "9.0.1",
|
"version": "9.0.1",
|
||||||
|
|
@ -14179,9 +14179,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/scheduler": {
|
"node_modules/scheduler": {
|
||||||
"version": "0.23.0",
|
"version": "0.23.1",
|
||||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
|
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.1.tgz",
|
||||||
"integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
|
"integrity": "sha512-5GKS5JGfiah1O38Vfa9srZE4s3wdHbwjlCrvIookrg2FO9aIwKLOJXuJQFlEfNcVSOXuaL2hzDeY20uVXcUtrw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loose-envify": "^1.1.0"
|
"loose-envify": "^1.1.0"
|
||||||
}
|
}
|
||||||
|
|
@ -15230,9 +15230,9 @@
|
||||||
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
|
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
|
||||||
},
|
},
|
||||||
"node_modules/tss-react": {
|
"node_modules/tss-react": {
|
||||||
"version": "4.9.6",
|
"version": "4.9.7",
|
||||||
"resolved": "https://registry.npmjs.org/tss-react/-/tss-react-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/tss-react/-/tss-react-4.9.7.tgz",
|
||||||
"integrity": "sha512-JscsxykbRtcMHXH1Wa2JOlk0jJeT0P3n+mPh775SKImBgMTdRX/MmdB1leoZZrCFXPeZ/FSU9Ix5sImvdUC39Q==",
|
"integrity": "sha512-3BhmQH6DeIujDRtvU9UlxadN2SakriKOwdaNp6cn4JSx+YNSF0lFWGNBzQzpRQ7laCbRm9YKBKVolwYhBv+yyg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/cache": "*",
|
"@emotion/cache": "*",
|
||||||
"@emotion/serialize": "*",
|
"@emotion/serialize": "*",
|
||||||
|
|
@ -15254,9 +15254,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tsx": {
|
"node_modules/tsx": {
|
||||||
"version": "4.7.2",
|
"version": "4.7.3",
|
||||||
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.3.tgz",
|
||||||
"integrity": "sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==",
|
"integrity": "sha512-+fQnMqIp/jxZEXLcj6WzYy9FhcS5/Dfk8y4AtzJ6ejKcKqmfTF8Gso/jtrzDggCF2zTU20gJa6n8XqPYwDAUYQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "~0.19.10",
|
"esbuild": "~0.19.10",
|
||||||
"get-tsconfig": "^4.7.2"
|
"get-tsconfig": "^4.7.2"
|
||||||
|
|
@ -15676,9 +15676,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/use-sync-external-store": {
|
"node_modules/use-sync-external-store": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.1.tgz",
|
||||||
"integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
|
"integrity": "sha512-6MCBDr76UJmRpbF8pzP27uIoTocf3tITaMJ52mccgAhMJycuh5A/RL6mDZCTwTisj0Qfeq69FtjMCUX27U78oA==",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
||||||
}
|
}
|
||||||
|
|
@ -16298,11 +16298,11 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/eslint-parser": "7.24.1",
|
"@babel/eslint-parser": "7.24.1",
|
||||||
"@rushstack/eslint-patch": "^1.10.2",
|
"@rushstack/eslint-patch": "^1.10.2",
|
||||||
"@typescript-eslint/eslint-plugin": "^7.7.0",
|
"@typescript-eslint/eslint-plugin": "^7.7.1",
|
||||||
"@typescript-eslint/parser": "^7.7.0",
|
"@typescript-eslint/parser": "^7.7.1",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-config-xo-space": "^0.35.0",
|
"eslint-config-xo-space": "^0.35.0",
|
||||||
"eslint-plugin-cypress": "^2.15.2",
|
"eslint-plugin-cypress": "^3.0.1",
|
||||||
"eslint-plugin-eslint-comments": "^3.2.0",
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-jest": "^28.2.0",
|
"eslint-plugin-jest": "^28.2.0",
|
||||||
|
|
@ -16460,30 +16460,30 @@
|
||||||
"@mui/icons-material": "^5",
|
"@mui/icons-material": "^5",
|
||||||
"@mui/lab": "^5.0.0-alpha.170",
|
"@mui/lab": "^5.0.0-alpha.170",
|
||||||
"@mui/material": "^5",
|
"@mui/material": "^5",
|
||||||
"@mui/x-data-grid-pro": "^7.3.0",
|
"@mui/x-data-grid-pro": "^7.3.1",
|
||||||
"@mui/x-date-pickers-pro": "^7.2.0",
|
"@mui/x-date-pickers-pro": "^7.3.1",
|
||||||
"date-fns": "^3.6.0",
|
"date-fns": "^3.6.0",
|
||||||
"material-ui-popup-state": "^5.1.0",
|
"material-ui-popup-state": "^5.1.0",
|
||||||
"next": "14.2.2",
|
"next": "14.2.3",
|
||||||
"opensearch-common": "*",
|
"opensearch-common": "*",
|
||||||
"react": "18.2.0",
|
"react": "18.3.0",
|
||||||
"react-cookie": "^7.1.4",
|
"react-cookie": "^7.1.4",
|
||||||
"react-cookie-consent": "^9.0.0",
|
"react-cookie-consent": "^9.0.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.3.0",
|
||||||
"react-iframe": "^1.8.5",
|
"react-iframe": "^1.8.5",
|
||||||
"react-markdown": "^9.0.1",
|
"react-markdown": "^9.0.1",
|
||||||
"react-polyglot": "^0.7.2",
|
"react-polyglot": "^0.7.2",
|
||||||
"tss-react": "^4.9.6",
|
"tss-react": "^4.9.7",
|
||||||
"uuid": "^9.0.1"
|
"uuid": "^9.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.24.4",
|
"@babel/core": "^7.24.4",
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^20.12.7",
|
||||||
"@types/react": "18.2.79",
|
"@types/react": "18.3.0",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^9.0.8",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"eslint": "^8.0.0",
|
"eslint": "^8.0.0",
|
||||||
"eslint-config-next": "^14.2.2",
|
"eslint-config-next": "^14.2.3",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-jsx-a11y": "^6.8.0",
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
||||||
|
|
@ -16514,11 +16514,11 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.24.4",
|
"@babel/core": "^7.24.4",
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^20.12.7",
|
||||||
"@types/react": "18.2.79",
|
"@types/react": "18.3.0",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^9.0.8",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"eslint": "^8.0.0",
|
"eslint": "^8.0.0",
|
||||||
"eslint-config-next": "^14.2.2",
|
"eslint-config-next": "^14.2.3",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-jsx-a11y": "^6.8.0",
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
||||||
|
|
@ -16554,15 +16554,15 @@
|
||||||
"@mui/icons-material": "^5",
|
"@mui/icons-material": "^5",
|
||||||
"@mui/lab": "^5.0.0-alpha.170",
|
"@mui/lab": "^5.0.0-alpha.170",
|
||||||
"@mui/material": "^5",
|
"@mui/material": "^5",
|
||||||
"@mui/x-data-grid-pro": "^7.3.0",
|
"@mui/x-data-grid-pro": "^7.3.1",
|
||||||
"@mui/x-date-pickers-pro": "^7.2.0",
|
"@mui/x-date-pickers-pro": "^7.3.1",
|
||||||
"next": "14.2.2",
|
"next": "14.2.3",
|
||||||
"react": "18.2.0",
|
"react": "18.3.0",
|
||||||
"react-dom": "18.2.0"
|
"react-dom": "18.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^20.12.7",
|
||||||
"@types/react": "18.2.79",
|
"@types/react": "18.3.0",
|
||||||
"typescript": "^5.4.5"
|
"typescript": "^5.4.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,11 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rushstack/eslint-patch": "^1.10.2",
|
"@rushstack/eslint-patch": "^1.10.2",
|
||||||
"@typescript-eslint/eslint-plugin": "^7.7.0",
|
"@typescript-eslint/eslint-plugin": "^7.7.1",
|
||||||
"@typescript-eslint/parser": "^7.7.0",
|
"@typescript-eslint/parser": "^7.7.1",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-config-xo-space": "^0.35.0",
|
"eslint-config-xo-space": "^0.35.0",
|
||||||
"eslint-plugin-cypress": "^2.15.2",
|
"eslint-plugin-cypress": "^3.0.1",
|
||||||
"eslint-plugin-eslint-comments": "^3.2.0",
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-jest": "^28.2.0",
|
"eslint-plugin-jest": "^28.2.0",
|
||||||
|
|
|
||||||
|
|
@ -12,30 +12,30 @@
|
||||||
"@mui/icons-material": "^5",
|
"@mui/icons-material": "^5",
|
||||||
"@mui/lab": "^5.0.0-alpha.170",
|
"@mui/lab": "^5.0.0-alpha.170",
|
||||||
"@mui/material": "^5",
|
"@mui/material": "^5",
|
||||||
"@mui/x-data-grid-pro": "^7.3.0",
|
"@mui/x-data-grid-pro": "^7.3.1",
|
||||||
"@mui/x-date-pickers-pro": "^7.2.0",
|
"@mui/x-date-pickers-pro": "^7.3.1",
|
||||||
"opensearch-common": "*",
|
"opensearch-common": "*",
|
||||||
"date-fns": "^3.6.0",
|
"date-fns": "^3.6.0",
|
||||||
"material-ui-popup-state": "^5.1.0",
|
"material-ui-popup-state": "^5.1.0",
|
||||||
"next": "14.2.2",
|
"next": "14.2.3",
|
||||||
"react": "18.2.0",
|
"react": "18.3.0",
|
||||||
"react-cookie": "^7.1.4",
|
"react-cookie": "^7.1.4",
|
||||||
"react-cookie-consent": "^9.0.0",
|
"react-cookie-consent": "^9.0.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.3.0",
|
||||||
"react-iframe": "^1.8.5",
|
"react-iframe": "^1.8.5",
|
||||||
"react-markdown": "^9.0.1",
|
"react-markdown": "^9.0.1",
|
||||||
"react-polyglot": "^0.7.2",
|
"react-polyglot": "^0.7.2",
|
||||||
"tss-react": "^4.9.6",
|
"tss-react": "^4.9.7",
|
||||||
"uuid": "^9.0.1"
|
"uuid": "^9.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.24.4",
|
"@babel/core": "^7.24.4",
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^20.12.7",
|
||||||
"@types/react": "18.2.79",
|
"@types/react": "18.3.0",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^9.0.8",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"eslint": "^8.0.0",
|
"eslint": "^8.0.0",
|
||||||
"eslint-config-next": "^14.2.2",
|
"eslint-config-next": "^14.2.3",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-jsx-a11y": "^6.8.0",
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -11,11 +11,11 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.24.4",
|
"@babel/core": "^7.24.4",
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^20.12.7",
|
||||||
"@types/react": "18.2.79",
|
"@types/react": "18.3.0",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^9.0.8",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"eslint": "^8.0.0",
|
"eslint": "^8.0.0",
|
||||||
"eslint-config-next": "^14.2.2",
|
"eslint-config-next": "^14.2.3",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-jsx-a11y": "^6.8.0",
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -11,15 +11,15 @@
|
||||||
"@mui/icons-material": "^5",
|
"@mui/icons-material": "^5",
|
||||||
"@mui/lab": "^5.0.0-alpha.170",
|
"@mui/lab": "^5.0.0-alpha.170",
|
||||||
"@mui/material": "^5",
|
"@mui/material": "^5",
|
||||||
"@mui/x-data-grid-pro": "^7.3.0",
|
"@mui/x-data-grid-pro": "^7.3.1",
|
||||||
"@mui/x-date-pickers-pro": "^7.2.0",
|
"@mui/x-date-pickers-pro": "^7.3.1",
|
||||||
"next": "14.2.2",
|
"next": "14.2.3",
|
||||||
"react": "18.2.0",
|
"react": "18.3.0",
|
||||||
"react-dom": "18.2.0"
|
"react-dom": "18.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^20.12.7",
|
||||||
"@types/react": "18.2.79",
|
"@types/react": "18.3.0",
|
||||||
"typescript": "^5.4.5"
|
"typescript": "^5.4.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue