feat(export): add removeId option to ExportDialog
Add configurable removeId checkbox (default: true) for controlling whether to include id field in exported API code. Persists to localStorage. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,7 @@ type CreateOptions = {
|
||||
removeViewItem?: boolean;
|
||||
before?: string;
|
||||
after?: string;
|
||||
removeId?: boolean;
|
||||
}
|
||||
export const ExportDialog = () => {
|
||||
const { showExportDialog, setShowExportDialog, exportRoutes } = useStudioStore(
|
||||
@@ -26,7 +27,7 @@ export const ExportDialog = () => {
|
||||
);
|
||||
const [copied, setCopied] = useState(false);
|
||||
const [before, setBefore] = useState(() => {
|
||||
const defaultBefore = `import { createQueryApi } from '@kevisual/query/api';`;
|
||||
const defaultBefore = `import { createQueryApi } from '@kevisual/query/api';`;
|
||||
if (typeof window !== 'undefined') {
|
||||
return localStorage.getItem('exportBefore') || defaultBefore;
|
||||
}
|
||||
@@ -45,6 +46,12 @@ export const ExportDialog = () => {
|
||||
}
|
||||
return false;
|
||||
});
|
||||
const [removeId, setRemoveId] = useState(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
return localStorage.getItem('exportRemoveId') !== 'false';
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
// 保存配置到 localStorage
|
||||
useEffect(() => {
|
||||
@@ -59,6 +66,10 @@ export const ExportDialog = () => {
|
||||
localStorage.setItem('exportRemoveViewItem', String(removeViewItem));
|
||||
}, [removeViewItem]);
|
||||
|
||||
useEffect(() => {
|
||||
localStorage.setItem('exportRemoveId', String(removeId));
|
||||
}, [removeId]);
|
||||
|
||||
const code = useMemo(() => {
|
||||
if (!exportRoutes) return '';
|
||||
let routeInfo = exportRoutes.map(route => pick(route, ['path', 'key', 'id', 'description', 'metadata']));
|
||||
@@ -66,10 +77,11 @@ export const ExportDialog = () => {
|
||||
before,
|
||||
after,
|
||||
removeViewItem,
|
||||
removeId,
|
||||
};
|
||||
const query = createQueryByRoutes(cloneDeep(routeInfo as any), options);
|
||||
return query;
|
||||
}, [exportRoutes, before, after, removeViewItem]);
|
||||
}, [exportRoutes, before, after, removeViewItem, removeId]);
|
||||
|
||||
const handleCopy = async () => {
|
||||
try {
|
||||
@@ -91,7 +103,7 @@ export const ExportDialog = () => {
|
||||
<div className="flex gap-4 w-full overflow-hidden">
|
||||
<div className="w-90 shrink-0 space-y-4">
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor="before">Before (import)</Label>
|
||||
<Label htmlFor="before">代码前 (import)</Label>
|
||||
<Textarea
|
||||
id="before"
|
||||
value={before}
|
||||
@@ -101,7 +113,7 @@ export const ExportDialog = () => {
|
||||
/>
|
||||
</div>
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor="after">After (export)</Label>
|
||||
<Label htmlFor="after">代码后 (export)</Label>
|
||||
<Textarea
|
||||
id="after"
|
||||
value={after}
|
||||
@@ -119,7 +131,18 @@ export const ExportDialog = () => {
|
||||
setRemoveViewItem(value);
|
||||
}}
|
||||
/>
|
||||
<Label htmlFor="removeViewItem">Remove View Item</Label>
|
||||
<Label htmlFor="removeViewItem">移除视图项</Label>
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<Checkbox
|
||||
id="removeId"
|
||||
checked={removeId}
|
||||
onCheckedChange={(checked) => {
|
||||
const value = checked === true;
|
||||
setRemoveId(value);
|
||||
}}
|
||||
/>
|
||||
<Label htmlFor="removeId">移除 ID</Label>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex-1 p-4 border border-gray-300 rounded-md bg-gray-50">
|
||||
|
||||
Reference in New Issue
Block a user