+
+
+
+
+
+
+
+Part 3: Code - React Cat Preview Field Extension
+Below is the code for the React component that we will be creating in this exercise. This component will display a random cat picture from the Cat API.
+import React, { useEffect, useState } from 'react';
+import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react';
+import FormControl from '@material-ui/core/FormControl';
+import { Button, FormHelperText, FormLabel } from '@material-ui/core';
+
+export interface CatResult {
+ id: string;
+ url: string;
+ width: number;
+ height: number;
+}
+
+/*
+ This is the actual component that will get rendered in the form
+*/
+export const RandomCatPixExtension = ({
+ onChange,
+ rawErrors,
+ required,
+ formData,
+}: FieldExtensionComponentProps<string>) => {
+ const [catPic, setCatPic] = useState('');
+
+ const refreshPic = async () => {
+ const catResult = await fetch('https://api.thecatapi.com/v1/images/search');
+ const catData: Record<string, CatResult> = await catResult.json();
+ setCatPic(catData[0].url);
+ onChange(catData[0].url);
+ };
+
+ useEffect(() => {
+ refreshPic();
+ }, []);
+
+ return (
+ <FormControl
+ margin="normal"
+ required={required}
+ error={rawErrors?.length > 0 && !formData}
+ >
+ <FormLabel>Random Cat Picture</FormLabel>
+ <Button variant="contained" color="primary" onClick={() => refreshPic()}>
+ Refresh 😻
+ </Button>
+
+ <img src={catPic} alt="Random Cat" width={'500px'} />
+
+ <FormHelperText id="entityName">
+ Giving you a random cat picture, all day, every day.
+ </FormHelperText>
+ </FormControl>
+ );
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+