This guide shows you how to use simfinity-fe-components with Next.js projects.
# In the simfinity-fe-components directory
npm pack
# This creates: simfinity-fe-components-1.0.0.tgz# In your Next.js project directory
npm install /path/to/simfinity-fe-components-1.0.0.tgz
# Or if the .tgz file is in the same directory
npm install ./simfinity-fe-components-1.0.0.tgznpm install urql graphql-tag @emotion/react @emotion/styled @mui/material @mui/icons-material @mui/system @mui/x-data-grid graphqlnpm install git+https://github.com/simtlix/simfinity-fe-components.git# Copy the dist folder to your Next.js project
cp -r /path/to/simfinity-fe-components/dist ./packages/simfinity-fe-components/
# Then import directly
import { EntityForm } from './packages/simfinity-fe-components/index.esm.js';# Create a symlink in your Next.js project
ln -s /path/to/simfinity-fe-components ./packages/simfinity-fe-components
# Install dependencies in the symlinked package
cd packages/simfinity-fe-components && npm install// components/SimfinityWrapper.tsx
'use client';
import { Provider as UrqlProvider, createClient } from 'urql';
import { ThemeProvider, createTheme } from '@mui/material/styles';
import { CssBaseline } from '@mui/material';
import { EntityForm, EntityTable } from 'simfinity-fe-components';
const client = createClient({
url: process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT || 'https://your-graphql-endpoint.com/graphql',
});
const theme = createTheme({
// Your MUI theme configuration
});
export function SimfinityWrapper({ children }: { children: React.ReactNode }) {
return (
<UrqlProvider value={client}>
<ThemeProvider theme={theme}>
<CssBaseline />
{children}
</ThemeProvider>
</UrqlProvider>
);
}// app/page.tsx
import { SimfinityWrapper } from '@/components/SimfinityWrapper';
import { EntityForm, EntityTable } from 'simfinity-fe-components';
export default function HomePage() {
return (
<SimfinityWrapper>
<div className="container mx-auto p-4">
<h1>My Next.js App with Simfinity Components</h1>
<div className="mb-8">
<h2>Entity Form</h2>
<EntityForm
listField="series"
action="create"
onSuccess={(data) => console.log('Form submitted:', data)}
/>
</div>
<div>
<h2>Entity Table</h2>
<EntityTable
listField="series"
onRowClick={(id) => console.log('Row clicked:', id)}
/>
</div>
</div>
</SimfinityWrapper>
);
}// lib/urql-client.ts
import { createClient } from 'urql';
export const client = createClient({
url: process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT || 'https://your-graphql-endpoint.com/graphql',
});// lib/theme.ts
import { createTheme } from '@mui/material/styles';
export const theme = createTheme({
// Your theme configuration
});// pages/index.tsx
import { Provider as UrqlProvider } from 'urql';
import { ThemeProvider } from '@mui/material/styles';
import { CssBaseline } from '@mui/material';
import { client } from '@/lib/urql-client';
import { theme } from '@/lib/theme';
import { EntityForm, EntityTable } from 'simfinity-fe-components';
export default function HomePage() {
return (
<UrqlProvider value={client}>
<ThemeProvider theme={theme}>
<CssBaseline />
<div className="container mx-auto p-4">
<h1>My Next.js App with Simfinity Components</h1>
<EntityForm
listField="series"
action="create"
onSuccess={(data) => console.log('Form submitted:', data)}
/>
<EntityTable
listField="series"
onRowClick={(id) => console.log('Row clicked:', id)}
/>
</div>
</ThemeProvider>
</UrqlProvider>
);
}/** @type {import('next').NextConfig} */
const nextConfig = {
transpilePackages: ['simfinity-fe-components'],
experimental: {
esmExternals: 'loose', // Helps with ESM packages
},
webpack: (config) => {
// Handle ESM modules
config.resolve.extensionAlias = {
'.js': ['.js', '.ts', '.tsx'],
};
return config;
},
};
module.exports = nextConfig;Solution: Make sure to add transpilePackages in next.config.js
Solution: Use the esmExternals: 'loose' option
Solution: Make sure to wrap with MUI ThemeProvider and CssBaseline
Solution: Ensure UrqlProvider wraps your components
- Make your changes
- Run
npm run build - Run
npm packto create new .tgz - In your Next.js project:
npm install ./simfinity-fe-components-1.0.0.tgz - Restart your Next.js dev server
When ready for production:
npm publishThen install normally:
npm install simfinity-fe-components