From 1cafec96bcbdf385ec15c59b7c9ee3f3b41fb48a Mon Sep 17 00:00:00 2001 From: Hitesh Wadhwani Date: Tue, 8 Oct 2024 16:37:59 +0530 Subject: [PATCH 1/6] added monetdb to FE --- apps/web/public/icons/monetdb.png | Bin 0 -> 9389 bytes apps/web/src/components/forms/monetdb.tsx | 303 ++++++++++++++++++ apps/web/src/hooks/useDatasource.ts | 1 + .../[workspaceId]/data-sources/new/index.tsx | 7 +- .../data-sources/new/monetdb.tsx | 63 ++++ 5 files changed, 373 insertions(+), 1 deletion(-) create mode 100644 apps/web/public/icons/monetdb.png create mode 100644 apps/web/src/components/forms/monetdb.tsx create mode 100644 apps/web/src/pages/workspaces/[workspaceId]/data-sources/new/monetdb.tsx diff --git a/apps/web/public/icons/monetdb.png b/apps/web/public/icons/monetdb.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea1d10f0e8fc55c35c97d2426675d1b1f380502 GIT binary patch literal 9389 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 literal 0 HcmV?d00001 diff --git a/apps/web/src/components/forms/monetdb.tsx b/apps/web/src/components/forms/monetdb.tsx new file mode 100644 index 00000000..8b8866cf --- /dev/null +++ b/apps/web/src/components/forms/monetdb.tsx @@ -0,0 +1,303 @@ +import type { PostgreSQLDataSource } from '@briefer/database' +import Link from 'next/link' +import { useEffect } from 'react' +import { useForm } from 'react-hook-form' + +import FormError from './formError' +import FileUploadInput from './FileUploadInput' +import { readFile } from '@/utils/file' +import { GATEWAY_IP } from '@/utils/info' +import Spin from '../Spin' + +export type PostgreSQLDataSourceInput = PostgreSQLDataSource & { + password: string + cert?: string +} + +type PostgreSQLDataSourceFormValues = Omit< + PostgreSQLDataSourceInput, + 'cert' +> & { + password: string + cert: File +} + +type PostgreSQLFormProps = { + onSubmit: (values: PostgreSQLDataSourceInput) => Promise + postgreSQLDataSource?: PostgreSQLDataSource | null + workspaceId: string +} + +export default function MonetDBForm({ + postgreSQLDataSource, + onSubmit, + workspaceId, +}: PostgreSQLFormProps) { + const isEditing = Boolean(postgreSQLDataSource) + + const { register, handleSubmit, formState, reset, control } = + useForm({ + mode: 'onChange', + defaultValues: { readOnly: true }, + }) + + useEffect(() => { + if (postgreSQLDataSource) { + reset(postgreSQLDataSource) + } + }, [postgreSQLDataSource, reset]) + + const onSubmitHandler = handleSubmit(async (data) => { + const certFile = data.cert + let certContent = undefined as string | undefined + if (certFile) { + certContent = await readFile(certFile, 'hex') + } + + await onSubmit({ + ...data, + cert: certContent, + }) + }) + + return ( +
+
+
+

+ {postgreSQLDataSource ? 'Edit' : 'New'} PostgreSQL data source +

+

+ {postgreSQLDataSource ? 'Edit' : 'Add'} a PostgreSQL database for + Briefer to pull data from. Our fixed IP address is{' '} + + {GATEWAY_IP()} + + . +

+ +
+
+ +
+ + +
+
+ +
+ +
+ + +
+
+ +
+ +
+ { + v = parseInt(v) + if (isNaN(v)) return 'Port must be a number.' + return true + }, + })} + type="number" + name="port" + placeholder="5432" + required + className="block w-full rounded-md border-0 py-3 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-ceramic-200/70 sm:text-md sm:leading-6" + /> + +
+
+ +
+ +
+ + +
+
+ +
+ +
+ + +
+
+ +
+ +
+ + {isEditing && !Boolean(formState.errors.password) && ( + + Leave empty to keep previous password + + )} + +
+
+
+ + +
+ +
+ +
+