Files
omni-tools/src/tools/defineTool.tsx

45 lines
999 B
TypeScript
Raw Normal View History

2024-06-22 22:06:16 +01:00
import ToolLayout from '../components/ToolLayout';
import React, { LazyExoticComponent, JSXElementConstructor } from 'react';
interface ToolOptions {
path: string;
component: LazyExoticComponent<JSXElementConstructor<NonNullable<unknown>>>;
keywords: string[];
2024-06-23 01:26:04 +01:00
image?: string;
2024-06-22 22:06:16 +01:00
name: string;
description: string;
}
2024-06-22 23:31:00 +01:00
export interface DefinedTool {
2024-06-23 01:26:04 +01:00
type: string;
2024-06-22 22:06:16 +01:00
path: string;
name: string;
description: string;
2024-06-23 01:26:04 +01:00
image?: string;
2024-06-22 22:06:16 +01:00
keywords: string[];
component: () => JSX.Element;
}
export const defineTool = (
basePath: string,
options: ToolOptions
): DefinedTool => {
2024-06-23 01:26:04 +01:00
const { image, path, name, description, keywords, component } = options;
2024-06-22 22:06:16 +01:00
const Component = component;
return {
2024-06-23 01:26:04 +01:00
type: basePath,
2024-06-22 22:06:16 +01:00
path: `${basePath}/${path}`,
name,
2024-06-23 01:26:04 +01:00
image,
2024-06-22 22:06:16 +01:00
description,
keywords,
component: () => {
return (
2024-06-23 01:26:04 +01:00
<ToolLayout title={name} description={description} image={image}>
2024-06-22 22:06:16 +01:00
<Component />
</ToolLayout>
);
}
};
};