diff --git a/src/components/robot/AutoRobotDetailModal.tsx b/src/components/robot/AutoRobotDetailModal.tsx new file mode 100644 index 000000000..59d1bd360 --- /dev/null +++ b/src/components/robot/AutoRobotDetailModal.tsx @@ -0,0 +1,442 @@ +import React, { FC } from 'react'; +import { useTranslation } from 'react-i18next'; +import { + Box, + Typography, + TextField, + Button, + Divider, + Chip, + FormControl, + InputLabel, + Select, + MenuItem, + Stack, + Table, + TableBody, + TableCell, + TableHead, + TableRow, +} from '@mui/material'; +import { GenericModal } from '../ui/GenericModal'; + +interface AutoRobotData { + id: string; + name: string; + category?: string; + description?: string; + access?: string; + sample?: any[]; + logo?: string; + configOptions?: { + parameters?: Array<{ + id: string; + label: string; + type: 'dropdown' | 'search' | 'url' | 'limit' | 'username' | 'path-segment'; + required?: boolean; + placeholder?: string; + queryParam: string; + options?: Array<{ value: string; label: string; }>; + }>; + }; +} + +interface AutoRobotDetailModalProps { + open: boolean; + onClose: () => void; + robot: AutoRobotData | null; + onUseRobot: (robot: AutoRobotData, config?: { parameters?: { [key: string]: string } }) => void; +} + +export const AutoRobotDetailModal: FC = ({ open, onClose, robot, onUseRobot }) => { + const { t } = useTranslation(); + + if (!robot) return null; + + const sampleData = robot.sample || []; + + const columnHeaders = sampleData.length > 0 + ? Object.keys(sampleData[0]) + : []; + + const needsConfiguration = robot.configOptions?.parameters && robot.configOptions.parameters.length > 0; + const parameters = robot.configOptions?.parameters || []; + + const handleUseRobot = () => { + onUseRobot(robot); + }; + + return ( + + + + {robot.logo && ( + + )} + + + {robot.name} + + + + + + + + {t('robot.description', 'Description')} + + + {robot.description || t('recordingtable.no_description', 'No description available')} + + + + + + {needsConfiguration && ( + + + {t('robot.config.configuration', 'Configuration')} + + + + {t('robot.config.info_message', 'The following fields will be required when you use this robot:')} + + + + {parameters.map((param) => { + if (param.type === 'dropdown') { + return ( + + {param.label}{param.required ? ' *' : ''} + + + ); + } + + if (param.type === 'search') { + return ( + + ); + } + + if (param.type === 'url') { + return ( + + ); + } + + if (param.type === 'limit') { + return ( + + ); + } + + if (param.type === 'username') { + return ( + + ); + } + + if (param.type === 'path-segment') { + return ( + + ); + } + + return null; + })} + + + )} + + {needsConfiguration && ( + + )} + + {sampleData.length > 0 && ( + + + {t('robot.sample_output', 'Sample Output')} + + + + + + {columnHeaders.map((header, index) => ( + + {header} + + ))} + + + + {sampleData.map((row, rowIndex) => ( + + {columnHeaders.map((header, cellIndex) => ( + + {row[header] !== null ? (typeof row[header] === 'object' ? JSON.stringify(row[header]) : String(row[header])) : '-'} + + ))} + + ))} + +
+
+
+ )} + + + + + +
+
+ ); +}; + +export default AutoRobotDetailModal; diff --git a/src/components/robot/AutoRobots.tsx b/src/components/robot/AutoRobots.tsx new file mode 100644 index 000000000..76d3ebbe3 --- /dev/null +++ b/src/components/robot/AutoRobots.tsx @@ -0,0 +1,406 @@ +import React, { memo, useState, useMemo, useEffect, FC } from "react"; +import { useTranslation } from 'react-i18next'; +import { + Box, + Typography, + TextField, + Card, + CardContent, + Grid, + InputAdornment, + Divider, + Chip, + Pagination, + Button, +} from "@mui/material"; +import { Search as SearchIcon } from "@mui/icons-material"; +import { GenericModal } from "../ui/GenericModal"; +import { AutoRobotDetailModal } from "./AutoRobotDetailModal"; +import { AUTO_ROBOTS } from "../../constants/autoRobots"; + +interface Data { + id: string; + name: string; + category?: string; + description?: string; + access?: string; + sample?: any[]; + logo?: string; + configOptions?: { + parameters?: Array<{ + id: string; + label: string; + type: 'dropdown' | 'search' | 'url' | 'limit' | 'username' | 'path-segment'; + required?: boolean; + placeholder?: string; + queryParam: string; + options?: Array<{ value: string; label: string; }>; + }>; + }; +} + +interface RecordingCardProps { + row: Data; + onUseRobot: (robot: Data) => void; +} + +const RecordingCard: FC = memo(({ row, onUseRobot }) => { + const { t } = useTranslation(); + + const isPremium = row.access === 'premium'; + + return ( + + {isPremium && ( + + )} + + + + + {row.logo && ( + + )} + + theme.palette.text.primary, + lineHeight: 1.2, + height: '2.4em', + display: '-webkit-box', + WebkitLineClamp: 2, + WebkitBoxOrient: 'vertical', + overflow: 'hidden', + textOverflow: 'ellipsis' + }} + > + {row.name} + + + + + + {row.description || t('recordingtable.no_description')} + + + + + + + + + + ); +}); + +export const AutoRobots: FC = () => { + const { t } = useTranslation(); + const [page, setPage] = useState(1); + const [rowsPerPage] = useState(6); + const [searchTerm, setSearchTerm] = useState(''); + const [selectedCategory, setSelectedCategory] = useState(''); + const [selectedRobot, setSelectedRobot] = useState(null); + const [detailModalOpen, setDetailModalOpen] = useState(false); + const [cloudModalOpen, setCloudModalOpen] = useState(false); + + const rows = AUTO_ROBOTS; + + const categories = useMemo(() => { + const uniqueCategories = [...new Set(rows + .map((row: any) => row.category) + .filter(Boolean) + )]; + return uniqueCategories; + }, [rows]); + + function useDebounce(value: T, delay: number): T { + const [debouncedValue, setDebouncedValue] = useState(value); + + useEffect(() => { + const handler = setTimeout(() => { + setDebouncedValue(value); + }, delay); + + return () => { + clearTimeout(handler); + }; + }, [value, delay]); + + return debouncedValue; + } + + const debouncedSearchTerm = useDebounce(searchTerm, 300); + + const filteredRows = useMemo(() => { + let filtered = rows; + + if (selectedCategory) { + filtered = filtered.filter(row => row.category === selectedCategory); + } + + const searchLower = debouncedSearchTerm.toLowerCase(); + if (debouncedSearchTerm) { + filtered = filtered.filter(row => row.name.toLowerCase().includes(searchLower)); + } + + return filtered; + }, [rows, debouncedSearchTerm, selectedCategory]); + + const handlePageChange = (_event: React.ChangeEvent, value: number): void => { + setPage(value); + window.scrollTo({ top: 0, behavior: 'smooth' }); + }; + + const paginatedRows = useMemo(() => { + const startIndex = (page - 1) * rowsPerPage; + return filteredRows.slice(startIndex, startIndex + rowsPerPage); + }, [filteredRows, page, rowsPerPage]); + + const totalPages = Math.ceil(filteredRows.length / rowsPerPage); + + const handleUseRobotClick = (robot: Data): void => { + setSelectedRobot(robot); + setDetailModalOpen(true); + }; + + const handleAddToMyRobots = (robot: Data, config?: { parameters?: { [key: string]: string } }): void => { + setDetailModalOpen(false); + setCloudModalOpen(true); + }; + + return ( + <> + + + + {t('mainmenu.prebuilt_robots', 'Auto Robots')} + + ) => setSearchTerm(e.target.value)} + InputProps={{ + startAdornment: ( + + + + ), + }} + sx={{ width: '250px' }} + /> + + + + setSelectedCategory('')} + color={selectedCategory === '' ? 'primary' : 'default'} + sx={{ + '&:hover': { backgroundColor: theme => selectedCategory === '' ? theme.palette.primary.main : theme.palette.action.hover } + }} + /> + {categories.map((category) => ( + setSelectedCategory(category)} + color={selectedCategory === category ? 'primary' : 'default'} + sx={{ + '&:hover': { backgroundColor: theme => selectedCategory === category ? theme.palette.primary.main : theme.palette.action.hover } + }} + /> + ))} + + + + {paginatedRows.map((row) => ( + + + + ))} + + + {filteredRows.length === 0 ? ( + + + {searchTerm + ? t('recordingtable.no_results', 'No results found') + : t('recordingtable.no_recordings', 'No robots available')} + + + ) : ( + + + + )} + + + setDetailModalOpen(false)} + robot={selectedRobot} + onUseRobot={handleAddToMyRobots} + /> + + setCloudModalOpen(false)} + modalStyle={{ + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: '500px', + maxWidth: '90vw', + padding: '32px', + backgroundColor: 'background.paper', + boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.15)', + borderRadius: '12px', + }} + > + + + Available on Maxun Cloud + + + Auto Robots are available exclusively on Maxun Cloud. Sign up for free to access pre-built automation templates and start extracting data instantly. + + + + + + + + + ); +}; + +export default AutoRobots; diff --git a/src/constants/autoRobots.ts b/src/constants/autoRobots.ts new file mode 100644 index 000000000..19c529716 --- /dev/null +++ b/src/constants/autoRobots.ts @@ -0,0 +1,522 @@ +export const AUTO_ROBOTS = [ + { + id: "mock-robot-1", + name: "Extract stories from Medium user profile", + description: "Scraping Medium profiles for stories, reveals what content truly connects with readers. Example: https://thedankoe.medium.com", + category: "News", + logo: "https://img.logo.dev/medium.com?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "Likes": "277", + "Comments": "6", + "Story Date": "Aug 26", + "Story Title": "HUMAN 3.0 — A Map To Reach The Top 1%", + "Story Description": "Read online free here." + }, + { + "Likes": "351", + "Comments": "6", + "Story Date": "Jul 31", + "Story Title": "You don't need a niche, you need a point of view", + "Story Description": "How to survive in the AI generated internet" + }, + { + "Likes": "412", + "Comments": "11", + "Story Date": "Jul 22", + "Story Title": "You have about 36 months to make it", + "Story Description": "why everyone is racing to get rich" + } + ] + }, + { + id: "mock-robot-2", + name: "Extract Apps From Pipedream", + description: "Browse available Pipedream apps to tap into automation tools.", + category: "Tech", + logo: "https://img.logo.dev/pipedream.com?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "App": "HTTP / Webhook", + "Description": "Get a unique URL where you can send HTTP or webhook requests" + }, + { + "App": "Node", + "Description": "Anything you can do with Node.js, you can do in a Pipedream workflow. This includes using most of npm's 400,000+ packages." + }, + { + "App": "Python", + "Description": "Anything you can do in Python can be done in a Pipedream Workflow. This includes using any of the 350,000+ PyPi packages." + } + ] + }, + { + id: "mock-robot-3", + name: "Extract URLs from Sitemap URL Set", + description: "Extract URLs from XML sitemaps—special .xml files that websites publish to list all their public pages and update frequencies. Example: https://www.nike.com/sitemap-us-help.xml", + category: "Tech", + logo: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSDdTRSGj8VljQR4AOE2QewgUJvqxDkxI7GkW5CnwMxuwdgwHCpiV1whxI&s=10", + access: "free", + sample: [ + { + "loc": "https://www.nike.com/help/a/promo-code-terms", + "lastmod": "2019-02-06" + }, + { + "loc": "https://www.nike.com/help/a/nfl-jersey", + "lastmod": "2019-02-06" + }, + { + "loc": "https://www.nike.com/help/a/free-shipping", + "lastmod": "2019-02-06" + } + ], + configOptions: { + parameters: [ + { + id: "website_url", + type: "url" as const, + label: "Website URL", + required: true, + queryParam: "url", + placeholder: "https://www.nike.com/sitemap-us-help.xml" + }, + { + id: "result_limit", + type: "limit" as const, + label: "Number of entries", + required: true, + queryParam: "limit", + placeholder: "100" + } + ] + } + }, + { + id: "mock-robot-4", + name: "Extract trending repositories from Github", + description: "Spot trending GitHub repos to follow what developers are building.", + category: "Tech", + logo: "https://img.logo.dev/github.com?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "URL": "https://github.com/microsoft/markitdown", + "Name": "microsoft / markitdown", + "Forks": "2,608", + "Stars": "52,816", + "Language": "Python", + "Description": "Python tool for converting files and office documents to Markdown.", + "Stars Today": "822 stars today" + }, + { + "URL": "https://github.com/hydralauncher/hydra", + "Name": "hydralauncher / hydra", + "Forks": "3,533", + "Stars": "12,547", + "Language": "TypeScript", + "Description": "Hydra is a game launcher with its own embedded bittorrent client", + "Stars Today": "112 stars today" + }, + { + "URL": "https://github.com/pocketbase/pocketbase", + "Name": "pocketbase / pocketbase", + "Forks": "2,257", + "Stars": "45,993", + "Language": "Go", + "Description": "Open Source realtime backend in 1 file", + "Stars Today": "391 stars today" + } + ] + }, + { + id: "mock-robot-5", + name: "Extract companies from trustpilot search results", + description: "Search for any information regarding companies and extract data received from the search results. Example: https://www.trustpilot.com/search?query=Car%20wash%20near%20me", + category: "Companies", + logo: "https://img.logo.dev/trustpilot.com?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "Name": "IMO Car Wash", + "Site": "www.imocarwash.com", + "Rating": "2.5", + "Address": "35 - 37 Amersham Hill, High Wycombe, United Kingdom", + "Total Reviews": "2,894" + }, + { + "Name": "Tint World", + "Site": "www.tintworld.com", + "Rating": "3.5", + "Address": "United States", + "Total Reviews": "820" + }, + { + "Name": "Shinearmor", + "Site": "shinearmor.com", + "Rating": "4.2", + "Address": "Philips Hwy 6100, Jacksonville, United States", + "Total Reviews": "311" + } + ], + configOptions: { + parameters: [ + { + id: "search_query", + type: "search" as const, + label: "Search Query", + required: true, + queryParam: "query", + placeholder: "Enter business type or name (e.g., Car dealer near me, Pizza restaurant NYC, etc.)" + } + ] + } + }, + { + id: "mock-robot-6", + name: "Extract extension reviews from Chrome Web Store", + description: "Gather Chrome extension reviews and ratings to analyze user feedback and popularity trends.", + category: "Tech", + logo: "https://img.logo.dev/chromewebstore.google.com?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "Date": "Jul 9, 2025", + "Review": "Very useful and easy to use tool. Highly recommended!", + "Reviewer Name": "Jean-Philippe Demoulin" + }, + { + "Date": "Jul 8, 2025", + "Review": "Been using this tool for some time now and the new update is a game changer!", + "Reviewer Name": "Michael Libman" + }, + { + "Date": "Jul 8, 2025", + "Review": "It's a great tool and the customer service is the best!", + "Reviewer Name": "Telma V" + } + ], + configOptions: { + parameters: [ + { + id: "website_url", + type: "url" as const, + label: "Extension reviews URL", + required: true, + queryParam: "url", + placeholder: "https://chromewebstore.google.com/detail/extension-id/reviews" + } + ] + } + }, + { + id: "mock-robot-7", + name: "Extract Newest Products From FutureTools.io Based On Category", + description: "Explore the latest tools from FutureTools.io by category. Example: https://www.futuretools.io/?search=youtube", + category: "Tech", + logo: "https://img.logo.dev/futuretools.io?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "URL": "https://www.futuretools.io/tools/virlo", + "Name": "Virlo", + "Upvotes": "7", + "Category": "Social Media", + "Description": "A platform to analyze trends and insights to optimize short-form content for viral potential on social media." + }, + { + "URL": "https://www.futuretools.io/tools/noteey", + "Name": "Noteey", + "Upvotes": "3", + "Category": "Productivity", + "Description": "A tool to organize, annotate, and connect visual notes offline." + }, + { + "URL": "https://www.futuretools.io/tools/papira", + "Name": "Papira", + "Upvotes": "2", + "Category": "Copywriting", + "Description": "A tool to create documents using personalized AI writing commands." + } + ], + configOptions: { + parameters: [ + { + id: "search_query", + type: "search" as const, + label: "Search Query", + required: true, + queryParam: "search", + placeholder: "Enter tool category (e.g., youtube, music etc.)" + } + ] + } + }, + { + id: "mock-robot-8", + name: "Extract Google Trends based on region", + description: "Extracting Google Trends by region uncovers what topics are gaining traction in specific areas.", + category: "News", + logo: "https://img.logo.dev/google.com?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "Rise": "1,000%", + "Trend": "AI developments", + "Started": "23 hours ago", + "Search Volume": "500K+" + }, + { + "Rise": "1,000%", + "Trend": "Tech innovations", + "Started": "19 hours ago", + "Search Volume": "100K+" + }, + { + "Rise": "1,000%", + "Trend": "Market trends", + "Started": "24 hours ago", + "Search Volume": "500K+" + } + ], + configOptions: { + parameters: [ + { + id: "geo", + type: "dropdown" as const, + label: "Region", + options: [ + { label: "India", value: "IN" }, + { label: "United States", value: "US" }, + { label: "United Kingdom", value: "GB" }, + { label: "Canada", value: "CA" }, + { label: "Australia", value: "AU" }, + { label: "Germany", value: "DE" }, + { label: "France", value: "FR" }, + { label: "Japan", value: "JP" }, + { label: "Brazil", value: "BR" }, + { label: "Mexico", value: "MX" } + ], + required: true, + queryParam: "geo" + } + ] + } + }, + { + id: "mock-robot-9", + name: "Extract HTML code and full screenshot from a webpage", + description: "Extract HTML source code with matching visual screenshots.", + category: "Tech", + logo: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSDdTRSGj8VljQR4AOE2QewgUJvqxDkxI7GkW5CnwMxuwdgwHCpiV1whxI&s=10", + access: "free", + sample: [ + { + "Label": "html", + "Value": "Example Page..." + } + ], + configOptions: { + parameters: [ + { + id: "website_url", + type: "url" as const, + label: "Website URL", + required: true, + queryParam: "url", + placeholder: "https://www.example.com" + } + ] + } + }, + { + id: "mock-robot-10", + name: "Extract jobs from Craigslist based on location and industry", + description: "Get job listings from Craigslist filtered by region and sector.", + category: "Jobs", + logo: "https://img.logo.dev/craigslist.com?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "Job": "Nurses Should Apply", + "Location": "Sacramento", + "Date Posted": "22/04", + "Description": "Commission & Bonuses Only" + }, + { + "Job": "Entry Level Full-Time Bookkeeper Needed", + "Location": "Arden Area", + "Date Posted": "19/04", + "Description": "Pay Depending on Experience" + }, + { + "Job": "Entry Level Full-Time Bookkeeper Needed", + "Location": "Arden Area", + "Date Posted": "15/04", + "Description": "Pay Depending on Experience" + } + ] + }, + { + id: "mock-robot-11", + name: "Extract popular movies by genre from IMDb", + description: "Find trending IMDb movies sorted by genre for entertainment insights.", + category: "Entertainment", + logo: "https://img.logo.dev/imdb.com?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "Year": "2025", + "Title": "Frankenstein", + "Votes": "(76K)", + "Rating": "7.6", + "Duration": "2h 29m", + "Description": "A brilliant but egotistical scientist brings a creature to life in a monstrous experiment." + }, + { + "Year": "2025", + "Title": "Weapons", + "Votes": "(236K)", + "Rating": "7.5", + "Duration": "2h 8m", + "Description": "A community questions who is behind mysterious disappearances." + }, + { + "Year": "2025", + "Title": "The Black Phone 2", + "Votes": "(28K)", + "Rating": "6.3", + "Duration": "1h 54m", + "Description": "A teen struggles with life after captivity while his sister receives disturbing calls." + } + ], + configOptions: { + parameters: [ + { + id: "title_type", + type: "dropdown" as const, + label: "Movie Type", + options: [ + { label: "Movie", value: "feature" }, + { label: "TV Series", value: "tv_series" }, + { label: "Short", value: "short" }, + { label: "Documentary", value: "documentary" } + ], + required: true, + queryParam: "title_type" + }, + { + id: "genres", + type: "dropdown" as const, + label: "Genre", + options: [ + { label: "Action", value: "action" }, + { label: "Comedy", value: "comedy" }, + { label: "Drama", value: "drama" }, + { label: "Horror", value: "horror" }, + { label: "Thriller", value: "thriller" }, + { label: "Sci-Fi", value: "sci_fi" } + ], + required: true, + queryParam: "genres" + } + ] + } + }, + { + id: "mock-robot-12", + name: "Extract complete text and full screenshot from a webpage", + description: "Capture webpage text content alongside visual screenshots in one go.", + category: "Tech", + logo: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSDdTRSGj8VljQR4AOE2QewgUJvqxDkxI7GkW5CnwMxuwdgwHCpiV1whxI&s=10", + access: "free", + sample: [ + { + "Label": "text", + "Value": "Welcome to the website! Discover new products and services..." + } + ], + configOptions: { + parameters: [ + { + id: "website_url", + type: "url" as const, + label: "Website URL", + required: true, + queryParam: "url", + placeholder: "https://www.example.com" + } + ] + } + }, + { + id: "mock-robot-13", + name: "Extract YCombinator Companies", + description: "Pull data on startups backed by Y Combinator to track innovation.", + category: "Tech", + logo: "https://img.logo.dev/ycombinator.com?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "Name": "Airbnb", + "Location": "San Francisco, CA, USA", + "YC Season": "W09", + "Category": "CONSUMER", + "Description": "Book accommodations around the world." + }, + { + "Name": "Amplitude", + "Location": "San Francisco, CA, USA", + "YC Season": "W12", + "Category": "B2B", + "Description": "Digital Analytics Platform" + }, + { + "Name": "Coinbase", + "Location": "San Francisco, CA, USA", + "YC Season": "S12", + "Category": "FINTECH", + "Description": "Buy, sell, and manage cryptocurrencies." + } + ] + }, + { + id: "mock-robot-14", + name: "Extract products from Product Hunt based on category", + description: "Discover top Product Hunt launches tailored to specific categories.", + category: "Tech", + logo: "https://img.logo.dev/producthunt.com?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=100&retina=true", + access: "free", + sample: [ + { + "Name": "OpenAI", + "Description": "The most powerful platform for building AI products.", + "Reviews": "4.6 (78 reviews)" + }, + { + "Name": "Claude by Anthropic", + "Description": "AI research company building reliable AI systems.", + "Reviews": "4.8 (117 reviews)" + }, + { + "Name": "ChatGPT by OpenAI", + "Description": "Get instant answers and creative inspiration.", + "Reviews": "4.7 (768 reviews)" + } + ], + configOptions: { + parameters: [ + { + id: "category", + type: "path-segment" as const, + label: "Category", + required: true, + queryParam: "category", + placeholder: "e.g., health-fitness" + } + ] + } + } +]; diff --git a/src/pages/MainPage.tsx b/src/pages/MainPage.tsx index 004785f71..8d4e0d47f 100644 --- a/src/pages/MainPage.tsx +++ b/src/pages/MainPage.tsx @@ -6,6 +6,7 @@ import { Recordings } from "../components/robot/Recordings"; import { Runs } from "../components/run/Runs"; import ProxyForm from '../components/proxy/ProxyForm'; import ApiKey from '../components/api/ApiKey'; +import { AutoRobots } from '../components/robot/AutoRobots'; import { useGlobalInfoStore, useCacheInvalidation } from "../context/globalInfo"; import { createAndRunRecording, createRunForStoredRecording, CreateRunResponseWithQueue, interpretStoredRecording, notifyAboutAbort, scheduleStoredRecording } from "../api/storage"; import { io, Socket } from "socket.io-client"; @@ -317,6 +318,8 @@ export const MainPage = ({ handleEditRecording, initialContent }: MainPageProps) return ; case 'apikey': return ; + case 'prebuilt-robots': + return ; default: return null; } diff --git a/src/pages/PageWrapper.tsx b/src/pages/PageWrapper.tsx index 729f2e1b1..89d1272b3 100644 --- a/src/pages/PageWrapper.tsx +++ b/src/pages/PageWrapper.tsx @@ -114,6 +114,7 @@ export const PageWrapper = () => { } /> } /> } /> + } /> } /> } /> } />