Skip to content

Commit

Permalink
consolidate auth and access
Browse files Browse the repository at this point in the history
  • Loading branch information
AlyssaWang committed Jan 15, 2025
1 parent 3ea537b commit ed347d9
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 175 deletions.
153 changes: 0 additions & 153 deletions client/src/components/InputsModal/Auth/InputAccess.tsx

This file was deleted.

43 changes: 33 additions & 10 deletions client/src/components/InputsModal/Auth/InputAuth.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,25 @@ import { Card, CardContent, InputLabel, List, ListItem } from '@mui/material';
import Markdown from 'react-markdown';
import remarkGfm from 'remark-gfm';
import { Auth, TestInput } from '~/models/testSuiteModels';
import { AuthType, getAuthFields } from '~/components/InputsModal/Auth/AuthSettings';
import {
AuthType,
getAccessFields,
getAuthFields,
} from '~/components/InputsModal/Auth/AuthSettings';
import AuthTypeSelector from '~/components/InputsModal/Auth/AuthTypeSelector';
import FieldLabel from '~/components/InputsModal/FieldLabel';
import InputFields from '~/components/InputsModal/InputFields';
import useStyles from '../styles';

export interface InputAuthProps {
mode: 'access' | 'auth';
input: TestInput;
index: number;
inputsMap: Map<string, unknown>;
setInputsMap: (map: Map<string, unknown>, edited?: boolean) => void;
}

const InputAuth: FC<InputAuthProps> = ({ input, index, inputsMap, setInputsMap }) => {
const InputAuth: FC<InputAuthProps> = ({ mode, input, index, inputsMap, setInputsMap }) => {
const { classes } = useStyles();
const [authValues, setAuthValues] = React.useState<Map<string, unknown>>(new Map());
const [authValuesPopulated, setAuthValuesPopulated] = React.useState<boolean>(false);
Expand All @@ -35,9 +40,14 @@ const InputAuth: FC<InputAuthProps> = ({ input, index, inputsMap, setInputsMap }
(authComponent?.default || firstListOption || 'public') as string,
);

const [authFields, setAuthFields] = React.useState<TestInput[]>(
getAuthFields(authType as AuthType, authValues, input.options?.components || []),
);
// Set fields depending on mode
let fields: TestInput[] = [];
if (mode === 'access') {
fields = getAccessFields(authType as AuthType, authValues, input.options?.components || []);
} else if (mode === 'auth') {
fields = getAuthFields(authType as AuthType, authValues, input.options?.components || []);
}
const [authFields, setAuthFields] = React.useState<TestInput[]>(fields);

useEffect(() => {
// Set defaults on radio buttons
Expand All @@ -64,7 +74,6 @@ const InputAuth: FC<InputAuthProps> = ({ input, index, inputsMap, setInputsMap }
authFields.forEach((field: TestInput) => {
authValues.set(field.name, combinedStartingValues[field.name as keyof Auth] || '');
});

setAuthValuesPopulated(true);

// Trigger change on mount for default values
Expand All @@ -74,12 +83,26 @@ const InputAuth: FC<InputAuthProps> = ({ input, index, inputsMap, setInputsMap }

useEffect(() => {
// Recalculate hidden fields
setAuthFields(getAuthFields(authType as AuthType, authValues, input.options?.components || []));
if (mode === 'access') {
setAuthFields(
getAccessFields(authType as AuthType, authValues, input.options?.components || []),
);
} else if (mode === 'auth') {
setAuthFields(
getAuthFields(authType as AuthType, authValues, input.options?.components || []),
);
}

// Update inputsMap
// Update inputsMap while maintaining hidden values
if (authValuesPopulated) {
const stringifiedAuthValues = JSON.stringify(Object.fromEntries(authValues));
inputsMap.set(input.name, stringifiedAuthValues);
let stringifiedValues = JSON.stringify(Object.fromEntries(authValues));
if (mode === 'access') {
const combinedStartingValues = getStartingValues();
const accessValuesObject = Object.fromEntries(authValues) as Auth;
const combinedValues = { ...combinedStartingValues, ...accessValuesObject };
stringifiedValues = JSON.stringify(combinedValues);
}
inputsMap.set(input.name, stringifiedValues);
setInputsMap(new Map(inputsMap));
}
}, [authValues]);
Expand Down
13 changes: 7 additions & 6 deletions client/src/components/InputsModal/InputFields.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import React, { FC } from 'react';
import { List } from '@mui/material';
import { TestInput } from '~/models/testSuiteModels';
import InputOAuthCredentials from '~/components/InputsModal/InputOAuthCredentials';
import InputAuth from '~/components/InputsModal/Auth/InputAuth';
import InputCheckboxGroup from '~/components/InputsModal/InputCheckboxGroup';
import InputCombobox from '~/components/InputsModal/InputCombobox';
import InputOAuthCredentials from '~/components/InputsModal/InputOAuthCredentials';
import InputRadioGroup from '~/components/InputsModal/InputRadioGroup';
import InputTextField from '~/components/InputsModal/InputTextField';
import InputAuth from '~/components/InputsModal/Auth/InputAuth';
import InputSingleCheckbox from '~/components/InputsModal/InputSingleCheckbox';
import InputCombobox from '~/components/InputsModal/InputCombobox';
import InputAccess from '~/components/InputsModal/Auth/InputAccess';
import InputTextField from '~/components/InputsModal/InputTextField';

export interface InputFieldsProps {
inputs: TestInput[];
Expand All @@ -26,6 +25,7 @@ const InputFields: FC<InputFieldsProps> = ({ inputs, inputsMap, setInputsMap })
if (input.options?.mode === 'auth') {
return (
<InputAuth
mode="auth"
input={input}
index={index}
inputsMap={inputsMap}
Expand All @@ -35,7 +35,8 @@ const InputFields: FC<InputFieldsProps> = ({ inputs, inputsMap, setInputsMap })
);
}
return (
<InputAccess
<InputAuth
mode="access"
input={input}
index={index}
inputsMap={inputsMap}
Expand Down
13 changes: 7 additions & 6 deletions client/src/components/InputsModal/__tests__/Inputs.test.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { SnackbarProvider } from 'notistack';
import { TestInput } from '~/models/testSuiteModels';
import ThemeProvider from '~/components/ThemeProvider';
import InputAuth from '~/components/InputsModal/Auth/InputAuth';
import InputCheckboxGroup from '~/components/InputsModal/InputCheckboxGroup';
import InputOAuthCredentials from '~/components/InputsModal/InputOAuthCredentials';
import InputRadioGroup from '~/components/InputsModal/InputRadioGroup';
import InputTextField from '~/components/InputsModal/InputTextField';
import InputOAuthCredentials from '~/components/InputsModal/InputOAuthCredentials';
import InputAuth from '~/components/InputsModal/Auth/InputAuth';
import InputAccess from '~/components/InputsModal/Auth/InputAccess';
import { describe, expect, it } from 'vitest';
import ThemeProvider from '~/components/ThemeProvider';

describe('Input Components', () => {
it('renders InputCheckboxGroup', () => {
Expand Down Expand Up @@ -176,6 +175,7 @@ describe('Input Components', () => {
<ThemeProvider>
<SnackbarProvider>
<InputAuth
mode="auth"
input={authInput}
index={0}
inputsMap={new Map<string, string>()}
Expand Down Expand Up @@ -208,7 +208,8 @@ describe('Input Components', () => {
render(
<ThemeProvider>
<SnackbarProvider>
<InputAccess
<InputAuth
mode="access"
input={accessInput}
index={0}
inputsMap={new Map<string, string>()}
Expand Down

0 comments on commit ed347d9

Please sign in to comment.