mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-04-08 03:00:28 -04:00
## Changes 🏗️ ### ESLint Config 1. **Disabled `react-hooks/exhaustive-deps`:** - to prevent unnecessary dependency proliferation and rely on code review instead 2. **Added [`next/typescript`](https://nextjs.org/docs/app/api-reference/config/eslint#with-typescript):** - to the ESLint config to make sure we also have TS linting rules 3. **Added custom rule for `@typescript-eslint/no-unused-vars`:** - to allow underscore-prefixed variables (convention for intentionally unused), in some cases helpful From now on, whenever we have unused variables or imports, the `lint` CI will fail 🔴 , thanks to `next/typescript` that adds `typescript-eslint/no-unused-vars` 💆🏽 ### Minor Fixes - Replaced empty interfaces with type aliases to resolve `@typescript-eslint/no-empty-object-type` warnings - Fixed unsafe non-null assertions with proper null checks - Removed `@ts-ignore` comments in favour of proper type casting ( _when possible_ 🙏🏽 ) ### Google Analytics Component - Changed Next.js Script strategy from `beforeInteractive` to `afterInteractive` to resolve Next.js warnings - this make sure loading analytics does not block page render 🙏🏽 ( _better page load time_ ) ### Are these changes safe? As long as the Typescript compiler does not complain ( check the `type-check` job ) we should be save. Most changes are removing unused code, if that code would be used somewhere else the compiler should catch it and tell us 🫶 I also typed some code when possible, or bypassed the linter when I thought it was fair for now. I disabled a couple ESLint rules. Most importantly the `no-explicity-any` one as we have loads of stuff untyped yet ( _this should be improved once API types are generated for us_ ). ### DX Added some settings on `.vscode` folder 📁 so that files will be formatted on save and also ESLint will fix errors on save when able 💯 ### 📈 **Result:** - ✅ All linting errors resolved - ✅ Improved TypeScript strict mode compliance - ✅ Better developer experience with cleaner code ## Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Lint CI job passes - [x] There is not type errors ( _TS will catch issue related to these changes_ )
94 lines
2.7 KiB
TypeScript
94 lines
2.7 KiB
TypeScript
import { beautifyString } from "@/lib/utils";
|
|
import { Clipboard } from "lucide-react";
|
|
import React from "react";
|
|
import { Button } from "./ui/button";
|
|
import { ContentRenderer } from "./ui/render";
|
|
import {
|
|
Table,
|
|
TableBody,
|
|
TableCell,
|
|
TableHead,
|
|
TableHeader,
|
|
TableRow,
|
|
} from "./ui/table";
|
|
import { useToast } from "./ui/use-toast";
|
|
|
|
type DataTableProps = {
|
|
title?: string;
|
|
truncateLongData?: boolean;
|
|
data: { [key: string]: Array<any> };
|
|
};
|
|
|
|
export default function DataTable({
|
|
title,
|
|
truncateLongData,
|
|
data,
|
|
}: DataTableProps) {
|
|
const { toast } = useToast();
|
|
|
|
const copyData = (pin: string, data: string) => {
|
|
navigator.clipboard.writeText(data).then(() => {
|
|
toast({
|
|
title: `"${pin}" data copied to clipboard!`,
|
|
duration: 2000,
|
|
});
|
|
});
|
|
};
|
|
|
|
return (
|
|
<>
|
|
{title && <strong className="mt-2 flex justify-center">{title}</strong>}
|
|
<Table className="cursor-default select-text">
|
|
<TableHeader>
|
|
<TableRow>
|
|
<TableHead>Pin</TableHead>
|
|
<TableHead>Data</TableHead>
|
|
</TableRow>
|
|
</TableHeader>
|
|
<TableBody>
|
|
{Object.entries(data).map(([key, value]) => (
|
|
<TableRow className="group" key={key}>
|
|
<TableCell className="cursor-text">
|
|
{beautifyString(key)}
|
|
</TableCell>
|
|
<TableCell className="cursor-text">
|
|
<div className="flex min-h-9 items-center whitespace-pre-wrap">
|
|
<Button
|
|
className="absolute right-1 top-auto m-1 hidden p-2 group-hover:block"
|
|
variant="outline"
|
|
size="icon"
|
|
onClick={() =>
|
|
copyData(
|
|
beautifyString(key),
|
|
value
|
|
.map((i) =>
|
|
typeof i === "object"
|
|
? JSON.stringify(i, null, 2)
|
|
: String(i),
|
|
)
|
|
.join(", "),
|
|
)
|
|
}
|
|
title="Copy Data"
|
|
>
|
|
<Clipboard size={18} />
|
|
</Button>
|
|
{value.map((item, index) => (
|
|
<React.Fragment key={index}>
|
|
<ContentRenderer
|
|
value={item}
|
|
truncateLongData={truncateLongData}
|
|
/>
|
|
{index < value.length - 1 && ", "}
|
|
</React.Fragment>
|
|
))}
|
|
</div>
|
|
</TableCell>
|
|
</TableRow>
|
|
))}
|
|
</TableBody>
|
|
</Table>
|
|
</>
|
|
);
|
|
}
|