Display improvements
This commit is contained in:
parent
cca8d03988
commit
39cfada3e8
9 changed files with 98 additions and 24 deletions
|
|
@ -39,18 +39,21 @@ 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(
|
||||||
<Grid key={field.name} item xs={field.size ?? 6}>
|
(field) =>
|
||||||
<TextField
|
!field.hidden && (
|
||||||
name={field.name}
|
<Grid key={field.name} item xs={field.size ?? 6}>
|
||||||
label={field.label}
|
<TextField
|
||||||
lines={field.lines ?? 1}
|
name={field.name}
|
||||||
required={field.required ?? false}
|
label={field.label}
|
||||||
formState={formState}
|
lines={field.lines ?? 1}
|
||||||
helperText={field.helperText}
|
required={field.required ?? false}
|
||||||
/>
|
formState={formState}
|
||||||
</Grid>
|
helperText={field.helperText}
|
||||||
))}
|
/>
|
||||||
|
</Grid>
|
||||||
|
),
|
||||||
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
</InternalCreate>
|
</InternalCreate>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -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 },
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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: [
|
||||||
|
|
|
||||||
|
|
@ -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: [
|
||||||
|
|
|
||||||
|
|
@ -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?://[^/]+'`),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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 ? (
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue