Skip to content

Commit 1e557cb

Browse files
committed
feat(plugin-report): add ReportRenderer and ReportViewer components with rendering logic for charts and tables
- Implemented ReportRenderer to display reports with optional charts and data tables. - Added ReportViewer for displaying generated reports with a toolbar for export and print functionalities. - Introduced ReportBuilder for configuring reports with available fields and sections. - Created unit tests for ReportBuilder, ReportRenderer, and ReportViewer to ensure proper rendering and functionality. - Registered components in ComponentRegistry for use within the ObjectUI framework. - Configured TypeScript and Vite for building and testing the plugin.
1 parent 1990cb4 commit 1e557cb

File tree

17 files changed

+1238
-302
lines changed

17 files changed

+1238
-302
lines changed

apps/console/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"@object-ui/plugin-kanban": "workspace:*",
4343
"@object-ui/plugin-list": "workspace:*",
4444
"@object-ui/plugin-map": "workspace:*",
45+
"@object-ui/plugin-report": "workspace:*",
4546
"@object-ui/plugin-timeline": "workspace:*",
4647
"@object-ui/react": "workspace:*",
4748
"@object-ui/types": "workspace:*",

apps/console/src/components/ReportView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useState } from 'react';
22
import { useParams } from 'react-router-dom';
3-
import { ReportViewer } from '@object-ui/plugin-dashboard';
3+
import { ReportViewer } from '@object-ui/plugin-report';
44
import { Empty, EmptyTitle, EmptyDescription, Button } from '@object-ui/components';
55
import { Code2 } from 'lucide-react';
66
import appConfig from '../../objectstack.shared';

apps/console/src/index.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
@source '../../../packages/fields/src/**/*.{ts,tsx}';
88
@source '../../../packages/react/src/**/*.{ts,tsx}';
99
@source '../../../packages/plugin-dashboard/src/**/*.{ts,tsx}';
10+
@source '../../../packages/plugin-report/src/**/*.{ts,tsx}';
1011
@source '../../../packages/plugin-form/src/**/*.{ts,tsx}';
1112
@source '../../../packages/plugin-grid/src/**/*.{ts,tsx}';
1213
@source '../../../packages/plugin-calendar/src/**/*.{ts,tsx}';

apps/console/vite.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export default defineConfig({
2020
'@object-ui/fields': path.resolve(__dirname, '../../packages/fields/src'),
2121
'@object-ui/layout': path.resolve(__dirname, '../../packages/layout/src'),
2222
'@object-ui/plugin-dashboard': path.resolve(__dirname, '../../packages/plugin-dashboard/src'),
23+
'@object-ui/plugin-report': path.resolve(__dirname, '../../packages/plugin-report/src'),
2324
'@object-ui/plugin-form': path.resolve(__dirname, '../../packages/plugin-form/src'),
2425
'@object-ui/plugin-grid': path.resolve(__dirname, '../../packages/plugin-grid/src'),
2526
'@object-ui/react': path.resolve(__dirname, '../../packages/react/src'),

packages/plugin-dashboard/src/index.tsx

Lines changed: 1 addition & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,8 @@ import { DashboardRenderer } from './DashboardRenderer';
1111
import { DashboardGridLayout } from './DashboardGridLayout';
1212
import { MetricWidget } from './MetricWidget';
1313
import { MetricCard } from './MetricCard';
14-
import { ReportRenderer } from './ReportRenderer';
15-
import { ReportViewer } from './ReportViewer';
16-
import { ReportBuilder } from './ReportBuilder';
1714

18-
export { DashboardRenderer, DashboardGridLayout, MetricWidget, MetricCard, ReportRenderer, ReportViewer, ReportBuilder };
15+
export { DashboardRenderer, DashboardGridLayout, MetricWidget, MetricCard };
1916

2017
// Register dashboard component
2118
ComponentRegistry.register(
@@ -80,57 +77,6 @@ ComponentRegistry.register(
8077
}
8178
);
8279

83-
// Register report component (legacy)
84-
ComponentRegistry.register(
85-
'report',
86-
ReportRenderer,
87-
{
88-
namespace: 'plugin-dashboard',
89-
label: 'Report',
90-
category: 'Dashboard',
91-
inputs: [
92-
{ name: 'title', type: 'string', label: 'Title' },
93-
{ name: 'description', type: 'string', label: 'Description' },
94-
{ name: 'chart', type: 'code', label: 'Chart Configuration' },
95-
]
96-
}
97-
);
98-
99-
// Register report viewer component
100-
ComponentRegistry.register(
101-
'report-viewer',
102-
ReportViewer,
103-
{
104-
namespace: 'plugin-dashboard',
105-
label: 'Report Viewer',
106-
category: 'Reports',
107-
inputs: [
108-
{ name: 'report', type: 'code', label: 'Report Configuration', required: true },
109-
{ name: 'data', type: 'code', label: 'Report Data' },
110-
{ name: 'showToolbar', type: 'boolean', label: 'Show Toolbar', defaultValue: true },
111-
{ name: 'allowExport', type: 'boolean', label: 'Allow Export', defaultValue: true },
112-
{ name: 'allowPrint', type: 'boolean', label: 'Allow Print', defaultValue: true },
113-
]
114-
}
115-
);
116-
117-
// Register report builder component
118-
ComponentRegistry.register(
119-
'report-builder',
120-
ReportBuilder,
121-
{
122-
namespace: 'plugin-dashboard',
123-
label: 'Report Builder',
124-
category: 'Reports',
125-
inputs: [
126-
{ name: 'report', type: 'code', label: 'Initial Report Config' },
127-
{ name: 'dataSources', type: 'code', label: 'Available Data Sources' },
128-
{ name: 'availableFields', type: 'code', label: 'Available Fields' },
129-
{ name: 'showPreview', type: 'boolean', label: 'Show Preview', defaultValue: true },
130-
]
131-
}
132-
);
133-
13480
// Register dashboard grid layout component
13581
ComponentRegistry.register(
13682
'dashboard-grid',
@@ -159,8 +105,4 @@ export const dashboardComponents = {
159105
DashboardGridLayout,
160106
MetricWidget,
161107
MetricCard,
162-
ReportRenderer,
163-
ReportViewer,
164-
ReportBuilder,
165108
};
166-
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"name": "@object-ui/plugin-report",
3+
"version": "0.1.0",
4+
"main": "dist/index.js",
5+
"module": "dist/index.mjs",
6+
"types": "dist/index.d.ts",
7+
"files": [
8+
"dist"
9+
],
10+
"scripts": {
11+
"build": "vite build",
12+
"clean": "rm -rf dist",
13+
"test": "vitest run",
14+
"lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0"
15+
},
16+
"peerDependencies": {
17+
"react": "^18.0.0",
18+
"react-dom": "^18.0.0",
19+
"@object-ui/core": "workspace:*",
20+
"@object-ui/types": "workspace:*",
21+
"@object-ui/components": "workspace:*",
22+
"@object-ui/react": "workspace:*",
23+
"@object-ui/fields": "workspace:*"
24+
},
25+
"dependencies": {
26+
"clsx": "^2.1.0",
27+
"lucide-react": "^0.344.0",
28+
"tailwind-merge": "^2.2.1"
29+
},
30+
"devDependencies": {
31+
"@types/node": "^20.11.24",
32+
"@types/react": "^18.2.61",
33+
"@types/react-dom": "^18.2.19",
34+
"@vitejs/plugin-react": "^4.2.1",
35+
"vite": "^5.1.4",
36+
"vite-plugin-dts": "^3.7.3",
37+
"vitest": "^1.3.1"
38+
}
39+
}

0 commit comments

Comments
 (0)