Display improvements

This commit is contained in:
Darren Clarke 2024-04-26 16:29:13 +02:00
parent cca8d03988
commit 39cfada3e8
9 changed files with 98 additions and 24 deletions

View file

@ -39,7 +39,9 @@ export const Create: FC<CreateProps> = ({ service }) => {
formState={formState} formState={formState}
> >
<Grid container direction="row" rowSpacing={3} columnSpacing={2}> <Grid container direction="row" rowSpacing={3} columnSpacing={2}>
{fields.map((field) => ( {fields.map(
(field) =>
!field.hidden && (
<Grid key={field.name} item xs={field.size ?? 6}> <Grid key={field.name} item xs={field.size ?? 6}>
<TextField <TextField
name={field.name} name={field.name}
@ -50,7 +52,8 @@ export const Create: FC<CreateProps> = ({ service }) => {
helperText={field.helperText} helperText={field.helperText}
/> />
</Grid> </Grid>
))} ),
)}
</Grid> </Grid>
</InternalCreate> </InternalCreate>
); );

View file

@ -46,6 +46,8 @@ export const Edit: FC<EditProps> = ({ service, row }) => {
name={field.name} name={field.name}
label={field.label} label={field.label}
lines={field.lines ?? 1} lines={field.lines ?? 1}
disabled={field.disabled ?? false}
refreshable={field.refreshable ?? false}
required={field.required ?? false} required={field.required ?? false}
formState={formState} formState={formState}
helperText={field.helperText} helperText={field.helperText}

View file

@ -3,6 +3,15 @@
import { revalidatePath } from "next/cache"; import { revalidatePath } from "next/cache";
import { db, Database } from "@/app/_lib/database"; import { db, Database } from "@/app/_lib/database";
import { FieldDescription, Entity } from "@/app/_lib/service"; import { FieldDescription, Entity } from "@/app/_lib/service";
import crypto from "crypto";
const generateToken = () => {
const length = 20;
const randomBytes = crypto.randomBytes(length);
const randomString = randomBytes.toString("hex").slice(0, length);
return randomString;
};
type CreateActionArgs = { type CreateActionArgs = {
entity: Entity; entity: Entity;
@ -20,8 +29,12 @@ export const createAction = async ({
formData, formData,
}: CreateActionArgs) => { }: CreateActionArgs) => {
const newRecord = fields.reduce( const newRecord = fields.reduce(
(acc: Record<string, string>, field: FieldDescription) => { (acc: Record<string, any>, field: FieldDescription) => {
// @ts-expect-error if (field.autogenerated === "token") {
acc[field.name] = generateToken();
return acc;
}
acc[field.name] = formData.get(field.name)?.toString() ?? null; acc[field.name] = formData.get(field.name)?.toString() ?? null;
return acc; return acc;
}, },
@ -56,8 +69,7 @@ export const updateAction = async ({
}: UpdateActionArgs) => { }: UpdateActionArgs) => {
const id = currentState.values.id; const id = currentState.values.id;
const updatedRecord = fields.reduce( const updatedRecord = fields.reduce(
(acc: Record<string, string>, field: FieldDescription) => { (acc: Record<string, any>, field: FieldDescription) => {
// @ts-expect-error
acc[field.name] = formData.get(field.name)?.toString() ?? null; acc[field.name] = formData.get(field.name)?.toString() ?? null;
return acc; return acc;
}, },

View file

@ -26,6 +26,20 @@ export const facebookConfig: ServiceConfig = {
label: "Page Access Token", label: "Page Access Token",
required: true, required: true,
}, },
{
name: "token",
label: "Token",
hidden: true,
required: true,
autogenerated: "token",
},
{
name: "verifyToken",
label: "Verify Token",
hidden: true,
required: true,
autogenerated: "token",
},
], ],
updateFields: [ updateFields: [
{ name: "name", label: "Name", required: true, size: 12 }, { name: "name", label: "Name", required: true, size: 12 },
@ -35,6 +49,18 @@ export const facebookConfig: ServiceConfig = {
size: 12, size: 12,
lines: 3, lines: 3,
}, },
{
name: "token",
label: "Token",
disabled: true,
refreshable: true,
},
{
name: "verifyToken",
label: "Verify Token",
disabled: true,
refreshable: true,
},
{ name: "appId", label: "App ID", required: true }, { name: "appId", label: "App ID", required: true },
{ name: "appSecret", label: "App Secret", required: true }, { name: "appSecret", label: "App Secret", required: true },
{ name: "pageId", label: "Page ID", required: true }, { name: "pageId", label: "Page ID", required: true },
@ -52,6 +78,17 @@ export const facebookConfig: ServiceConfig = {
required: true, required: true,
size: 12, size: 12,
}, },
{
name: "token",
label: "Token",
copyable: true,
},
{
name: "verifyToken",
label: "Verify Token",
copyable: true,
},
{ name: "appId", label: "App ID", required: true }, { name: "appId", label: "App ID", required: true },
{ name: "appSecret", label: "App Secret", required: true }, { name: "appSecret", label: "App Secret", required: true },
{ {

View file

@ -16,9 +16,12 @@ export type Entity = (typeof entities)[number];
export type FieldDescription = { export type FieldDescription = {
name: string; name: string;
label: string; label: string;
autogenerated?: "token";
hidden?: boolean;
type?: string; type?: string;
lines?: number; lines?: number;
copyable?: boolean; copyable?: boolean;
refreshable?: boolean;
defaultValue?: string; defaultValue?: string;
required?: boolean; required?: boolean;
disabled?: boolean; disabled?: boolean;

View file

@ -23,13 +23,19 @@ export const signalConfig: ServiceConfig = {
label: "phoneNumber", label: "phoneNumber",
required: true, required: true,
}, },
{
name: "token",
label: "Token",
hidden: true,
required: true,
autogenerated: "token",
},
], ],
updateFields: [ updateFields: [
{ name: "name", label: "Name", required: true, size: 12 }, { name: "name", label: "Name", required: true, size: 12 },
{ {
name: "description", name: "description",
label: "Description", label: "Description",
required: true,
size: 12, size: 12,
}, },
{ {
@ -43,13 +49,16 @@ export const signalConfig: ServiceConfig = {
{ {
name: "description", name: "description",
label: "Description", label: "Description",
required: true,
size: 12, size: 12,
}, },
{ {
name: "phoneNumber", name: "phoneNumber",
label: "phoneNumber", label: "phoneNumber",
required: true, },
{
name: "token",
label: "Token",
copyable: true,
}, },
], ],
listColumns: [ listColumns: [

View file

@ -23,13 +23,19 @@ export const whatsappConfig: ServiceConfig = {
label: "Phone Number", label: "Phone Number",
required: true, required: true,
}, },
{
name: "token",
label: "Token",
hidden: true,
required: true,
autogenerated: "token",
},
], ],
updateFields: [ updateFields: [
{ name: "name", label: "Name", required: true, size: 12 }, { name: "name", label: "Name", required: true, size: 12 },
{ {
name: "description", name: "description",
label: "Description", label: "Description",
required: true,
size: 12, size: 12,
}, },
{ {
@ -43,13 +49,16 @@ export const whatsappConfig: ServiceConfig = {
{ {
name: "description", name: "description",
label: "Description", label: "Description",
required: true,
size: 12, size: 12,
}, },
{ {
name: "phoneNumber", name: "phoneNumber",
label: "Phone Number", label: "Phone Number",
required: true, },
{
name: "token",
label: "Token",
copyable: true,
}, },
], ],
listColumns: [ listColumns: [

View file

@ -10,7 +10,6 @@ export async function up(db: Kysely<any>): Promise<void> {
.addColumn("description", "text") .addColumn("description", "text")
.addColumn("backend_type", "text", (col) => col.notNull()) .addColumn("backend_type", "text", (col) => col.notNull())
.addColumn("backend_id", "uuid", (col) => col.notNull()) .addColumn("backend_id", "uuid", (col) => col.notNull())
.addColumn("name", "text", (col) => col.notNull())
.addColumn("endpoint_url", "text", (col) => .addColumn("endpoint_url", "text", (col) =>
col.notNull().check(sql`endpoint_url ~ '^https?://[^/]+'`), col.notNull().check(sql`endpoint_url ~ '^https?://[^/]+'`),
) )

View file

@ -48,8 +48,8 @@ export const DisplayTextField: FC<DisplayTextFieldProps> = ({
"& .MuiFormLabel-root": { "& .MuiFormLabel-root": {
fontSize: 18, fontSize: 18,
color: darkGray, color: darkGray,
minWidth: 0,
}, },
width: "100%",
}} }}
InputProps={{ InputProps={{
endAdornment: copyable ? ( endAdornment: copyable ? (