console: fix missing props in ConnectPostgresWidget's read replicas field

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/8147
GitOrigin-RevId: 12aedbb5a7960ccdf26205eb49e0ba48d0c0d4f9
This commit is contained in:
Vijay Prasanna 2023-03-02 10:38:11 +05:30 committed by hasura-bot
parent 1e0fa95493
commit 0d49cf02f3
7 changed files with 51 additions and 38 deletions

View File

@ -34,12 +34,14 @@ export const DatabaseUrl = ({
{connectionType === 'databaseUrl' ? (
<InputField
name={`${name}.url`}
key={`${name}.url`}
label="Database URL"
placeholder="postgresql://username:password@hostname:port/postgres"
/>
) : connectionType === 'envVar' ? (
<InputField
name={`${name}.envVar`}
key={`${name}.envVar`}
label="Environment variable"
placeholder="HASURA_GRAPHQL_DB_URL_FROM_ENV"
/>

View File

@ -3,7 +3,7 @@ import { InputField } from '../../../../../new-components/Form';
export const ExtensionSchema = ({ name }: { name: string }) => {
return (
<InputField
name={`${name}.extensionSchema`}
name={name}
label="Extension Schema"
placeholder="public"
tooltip="Name of the schema where the graphql-engine will install database extensions (default: `public`). Specified schema should be present in the search path of the database."

View File

@ -17,7 +17,7 @@ export const IsolationLevel = ({ name }: { name: string }) => {
label: 'serializable',
},
]}
name={`${name}.isolationLevel`}
name={name}
label="Isolation Level"
tooltip="The transaction isolation level in which the queries made to the source will be run"
/>

View File

@ -4,6 +4,7 @@ import { ComponentStory, ComponentMeta } from '@storybook/react';
import { z } from 'zod';
import { ReadReplicas } from './ReadReplicas';
import { connectionInfoSchema } from '../schema';
export default {
component: ReadReplicas,
@ -12,10 +13,12 @@ export default {
export const Primary: ComponentStory<typeof ReadReplicas> = () => (
<SimpleForm
onSubmit={data => console.log(data)}
schema={z.any()}
schema={z.object({
readReplicas: z.array(connectionInfoSchema),
})}
options={{}}
>
<ReadReplicas name="rr" hideOptions={[]} />
<ReadReplicas name="readReplicas" hideOptions={[]} />
<br />
<Button type="submit" className="my-2">
Submit

View File

@ -3,7 +3,7 @@ import { Button } from '../../../../../new-components/Button';
import { CardedTable } from '../../../../../new-components/CardedTable';
import { useState } from 'react';
import { ConnectionInfoSchema } from '../schema';
import { FaPlus, FaTrash } from 'react-icons/fa';
import { FaEdit, FaPlus, FaTrash } from 'react-icons/fa';
import { IndicatorCard } from '../../../../../new-components/IndicatorCard';
import {
areSSLSettingsEnabled,
@ -32,9 +32,11 @@ export const ReadReplicas = ({
const { watch, setValue } =
useFormContext<Record<string, ConnectionInfoSchema[]>>();
const [mode, setMode] = useState<'idle' | 'add'>('idle');
const [mode, setMode] = useState<'idle' | 'add' | 'edit'>('idle');
const readReplicas = watch(name);
const [activeRow, setActiveRow] = useState<number>();
return (
<div className="my-2">
{!fields?.length ? (
@ -42,20 +44,29 @@ export const ReadReplicas = ({
) : (
<CardedTable
columns={['No', 'Read Replica', null]}
data={(fields ?? []).map((field, i) => [
data={(readReplicas ?? []).map((field, i) => [
i + 1,
<div>{getDatabaseConnectionDisplayName(field.databaseUrl)}</div>,
<div className="flex gap-3 justify-end">
<Button
size="sm"
icon={<FaEdit />}
onClick={() => {
setActiveRow(i);
setMode('edit');
}}
/>
<Button
size="sm"
icon={<FaTrash />}
mode="destructive"
onClick={() => {
setValue(
name,
readReplicas.filter((_, index) => index !== i)
);
}}
/>,
/>
</div>,
])}
showActionCell
/>
@ -69,6 +80,7 @@ export const ReadReplicas = ({
append({
databaseUrl: { connectionType: 'databaseUrl', url: '' },
});
setActiveRow(readReplicas?.length ?? 0);
}}
mode="primary"
icon={<FaPlus />}
@ -77,10 +89,10 @@ export const ReadReplicas = ({
</Button>
)}
{mode === 'add' && (
{(mode === 'add' || mode === 'edit') && (
<Dialog
hasBackdrop
title="Add Read Replica"
title={mode === 'edit' ? 'Edit Read Replica' : 'Add Read Replica'}
onClose={() => {
setMode('idle');
}}
@ -90,7 +102,7 @@ export const ReadReplicas = ({
<div className="p-4">
<div className="bg-white border border-hasGray-300 rounded-md shadow-sm overflow-hidden p-4">
<DatabaseUrl
name={`${name}.${fields?.length - 1}.databaseUrl`}
name={`${name}.${activeRow}.databaseUrl`}
hideOptions={hideOptions}
/>
</div>
@ -103,14 +115,10 @@ export const ReadReplicas = ({
</div>
}
>
<PoolSettings
name={`${name}.${fields?.length - 1}.poolSettings`}
/>
<IsolationLevel
name={`${name}.${fields?.length - 1}.isolationLevel`}
/>
<PoolSettings name={`${name}.${activeRow}.poolSettings`} />
<IsolationLevel name={`${name}.${activeRow}.isolationLevel`} />
<UsePreparedStatements
name={`${name}.${fields?.length - 1}.usePreparedStatements`}
name={`${name}.${activeRow}.usePreparedStatements`}
/>
{areSSLSettingsEnabled() && (
<Collapsible
@ -127,9 +135,7 @@ export const ReadReplicas = ({
</div>
}
>
<SslSettings
name={`${name}.${fields?.length - 1}.sslSettings`}
/>
<SslSettings name={`${name}.${activeRow}.sslSettings`} />
</Collapsible>
)}
</Collapsible>
@ -137,15 +143,12 @@ export const ReadReplicas = ({
<Button
onClick={() => {
setMode('idle');
setValue(
`${name}.${fields?.length - 1}`,
fields[fields?.length - 1]
);
setActiveRow(undefined);
}}
mode="primary"
className="my-2"
>
Add Read Replica
{mode === 'edit' ? 'Edit Read Replica' : 'Add Read Replica'}
</Button>
</div>
</Dialog>

View File

@ -3,7 +3,7 @@ import { BooleanInput } from './BooleanInput';
export const UsePreparedStatements = ({ name }: { name: string }) => {
return (
<BooleanInput
name={`${name}.usePreparedStatements`}
name={name}
label="Use Prepared Statements"
tooltip="Prepared statements are disabled by default"
/>

View File

@ -1,4 +1,9 @@
export * from './source';
export * from './table';
export * from './relationships';
export type { PostgresConfiguration } from './configuration';
export {
PostgresConfiguration,
MssqlConfiguration,
BigQueryConfiguration,
CitusConfiguration,
} from './configuration';