1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-04-22 22:16:13 -04:00
Files
Sonarr/frontend/src/Components/Form/OAuthInput.tsx
T
2025-12-25 21:05:44 -08:00

76 lines
1.8 KiB
TypeScript

import React, { useCallback, useEffect } from 'react';
import SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';
import { kinds } from 'Helpers/Props';
import useOAuth from 'OAuth/useOAuth';
import { getValidationFailures } from 'Store/Selectors/selectSettings';
import { InputOnChange } from 'typings/inputs';
import { useFormInputGroup } from './FormInputGroupContext';
export interface OAuthInputProps {
label?: string;
name: string;
provider: string;
providerData: Record<string, unknown>;
section?: string;
onChange: InputOnChange<unknown>;
}
function OAuthInput({
label = 'Start OAuth',
name,
provider,
providerData,
section,
onChange,
}: OAuthInputProps) {
const formInputActions = useFormInputGroup();
const { authorizing, error, result, startOAuth, resetOAuth } = useOAuth();
const handlePress = useCallback(() => {
startOAuth({
name,
provider,
providerData,
section,
});
}, [name, provider, providerData, section, startOAuth]);
useEffect(() => {
if (!result) {
return;
}
Object.keys(result).forEach((key) => {
onChange({ name: key, value: result[key] });
});
}, [result, onChange]);
useEffect(() => {
return () => {
resetOAuth();
};
}, [resetOAuth]);
useEffect(() => {
const validationFailures = getValidationFailures(error);
formInputActions?.setClientErrors(validationFailures?.errors ?? []);
formInputActions?.setClientWarnings(validationFailures?.warnings ?? []);
}, [name, error, formInputActions]);
return (
<div>
<SpinnerErrorButton
kind={kinds.PRIMARY}
isSpinning={authorizing}
error={error}
onPress={handlePress}
>
{label}
</SpinnerErrorButton>
</div>
);
}
export default OAuthInput;