* fix: enhance DataTable pagination examples and improve display logic - Added a note in the DataTableStory component to clarify that examples show only the first page of data for demonstration purposes. - Adjusted pagination examples to reflect smaller datasets, changing the displayed data slices for better clarity and testing. - Updated the Pagination component to calculate and display the current record range more accurately based on the current page index and size. * chore(dependencies): update package versions for improved compatibility - Upgraded `@supabase/supabase-js` from `2.55.0` to `2.57.0` for enhanced functionality and performance. - Bumped `@tanstack/react-query` from `5.85.5` to `5.85.9` to incorporate the latest improvements. - Updated `ai` from `5.0.28` to `5.0.30` for better performance. - Incremented `nodemailer` from `7.0.5` to `7.0.6` for stability. - Updated `typescript-eslint` from `8.41.0` to `8.42.0` for improved type definitions and linting capabilities. - Adjusted various package dependencies across multiple components to ensure compatibility and stability. * chore(dependencies): update package versions for improved compatibility - Upgraded `@ai-sdk/openai` from `2.0.23` to `2.0.24` for enhanced functionality. - Bumped `@tanstack/react-query` from `5.85.9` to `5.86.0` to incorporate the latest improvements. - Updated `ai` from `5.0.30` to `5.0.33` for better performance. - Incremented `@types/node` from `24.3.0` to `24.3.1` for type safety enhancements. - Updated `dotenv` from `17.2.1` to `17.2.2` for stability. - Adjusted `tailwindcss` and related packages to `4.1.13` for improved styling capabilities. - Updated `react-i18next` from `15.7.3` to `15.7.3` to include the latest localization fixes. - Incremented `@sentry/nextjs` from `10.8.0` to `10.10.0` for enhanced monitoring features. - Updated various package dependencies across multiple components to ensure compatibility and stability. * fix(config): conditionally disable `devIndicators` in CI environment * feat(settings): encapsulate danger zone actions in a styled card component - Introduced a new `DangerZoneCard` component to enhance the visual presentation of danger zone actions in the team account settings. - Updated `TeamAccountDangerZone` to wrap deletion and leave actions within the `DangerZoneCard` for improved user experience. - Removed redundant card structure from `TeamAccountSettingsContainer` to streamline the component hierarchy. * fix(e2e): improve admin account tests for response handling and visibility checks - Enhanced the admin test suite by adding a check for the POST request method when waiting for the response from the `/admin/accounts` endpoint. - Reduced wait times in the `filterAccounts` function for improved test performance. - Updated the `selectAccount` function to ensure the account link is visible before clicking, enhancing reliability in the test flow. * chore(dependencies): update package versions for improved compatibility - Upgraded `@supabase/supabase-js` from `2.57.0` to `2.57.2` for enhanced functionality and performance. - Bumped `@tanstack/react-query` from `5.86.0` to `5.87.1` to incorporate the latest improvements. - Updated `i18next` from `25.5.1` to `25.5.2` for better localization support. - Incremented `eslint` from `9.34.0` to `9.35.0` for improved linting capabilities. - Adjusted various package dependencies across multiple components to ensure compatibility and stability. * feat(admin): enhance user ban and reactivation actions with success handling - Updated `AdminBanUserDialog` and `AdminReactivateUserDialog` components to handle success states based on the results of the respective actions. - Modified `banUserAction` and `reactivateUserAction` to return success status and log errors if the actions fail. - Introduced `revalidatePage` function to refresh the user account page after banning or reactivating a user. - Improved error handling in the dialogs to provide better feedback to the admin user. * feat(admin): refactor user ban and reactivation dialogs for improved structure and error handling - Introduced `BanUserForm` and `ReactivateUserForm` components to encapsulate form logic within the respective dialogs, enhancing readability and maintainability. - Updated the `AdminBanUserDialog` and `AdminReactivateUserDialog` components to utilize the new form components, streamlining the user interface. - Enhanced error handling to provide clearer feedback to the admin user during ban and reactivation actions. - Removed unnecessary revalidation calls in the server actions to optimize performance and maintain clarity in the action flow. - Added `@types/react-dom` dependency for improved type definitions. * refactor(admin): streamline user dialogs and server actions for improved clarity - Removed unnecessary `useRouter` imports from `AdminBanUserDialog` and `AdminReactivateUserDialog` components to simplify the code. - Updated `revalidateAdmin` function calls to use `revalidatePath` with specific paths, enhancing clarity in the server actions. - Ensured that the user dialogs maintain a clean structure while focusing on form logic and error handling.
166 lines
3.9 KiB
JavaScript
166 lines
3.9 KiB
JavaScript
import withBundleAnalyzer from '@next/bundle-analyzer';
|
|
|
|
const IS_PRODUCTION = process.env.NODE_ENV === 'production';
|
|
const SUPABASE_URL = process.env.NEXT_PUBLIC_SUPABASE_URL;
|
|
const ENABLE_REACT_COMPILER = process.env.ENABLE_REACT_COMPILER === 'true';
|
|
|
|
const INTERNAL_PACKAGES = [
|
|
'@kit/ui',
|
|
'@kit/auth',
|
|
'@kit/accounts',
|
|
'@kit/admin',
|
|
'@kit/team-accounts',
|
|
'@kit/shared',
|
|
'@kit/supabase',
|
|
'@kit/i18n',
|
|
'@kit/mailers',
|
|
'@kit/billing-gateway',
|
|
'@kit/email-templates',
|
|
'@kit/database-webhooks',
|
|
'@kit/cms',
|
|
'@kit/monitoring',
|
|
'@kit/next',
|
|
'@kit/notifications',
|
|
];
|
|
|
|
/** @type {import('next').NextConfig} */
|
|
const config = {
|
|
reactStrictMode: true,
|
|
/** Enables hot reloading for local packages without a build step */
|
|
transpilePackages: INTERNAL_PACKAGES,
|
|
images: {
|
|
remotePatterns: getRemotePatterns(),
|
|
},
|
|
logging: {
|
|
fetches: {
|
|
fullUrl: true,
|
|
},
|
|
},
|
|
serverExternalPackages: [],
|
|
// needed for supporting dynamic imports for local content
|
|
outputFileTracingIncludes: {
|
|
'/*': ['./content/**/*'],
|
|
},
|
|
redirects: getRedirects,
|
|
turbopack: {
|
|
resolveExtensions: ['.ts', '.tsx', '.js', '.jsx'],
|
|
resolveAlias: getModulesAliases(),
|
|
},
|
|
devIndicators:
|
|
process.env.NEXT_PUBLIC_CI === 'true'
|
|
? false
|
|
: {
|
|
position: 'bottom-right',
|
|
},
|
|
experimental: {
|
|
mdxRs: true,
|
|
reactCompiler: ENABLE_REACT_COMPILER,
|
|
clientSegmentCache: true,
|
|
optimizePackageImports: [
|
|
'recharts',
|
|
'lucide-react',
|
|
'@radix-ui/react-icons',
|
|
'@radix-ui/react-avatar',
|
|
'@radix-ui/react-select',
|
|
'date-fns',
|
|
...INTERNAL_PACKAGES,
|
|
],
|
|
},
|
|
modularizeImports: {
|
|
lodash: {
|
|
transform: 'lodash/{{member}}',
|
|
},
|
|
},
|
|
/** We already do linting and typechecking as separate tasks in CI */
|
|
eslint: { ignoreDuringBuilds: true },
|
|
typescript: { ignoreBuildErrors: true },
|
|
};
|
|
|
|
export default withBundleAnalyzer({
|
|
enabled: process.env.ANALYZE === 'true',
|
|
})(config);
|
|
|
|
function getRemotePatterns() {
|
|
/** @type {import('next').NextConfig['remotePatterns']} */
|
|
const remotePatterns = [];
|
|
|
|
if (SUPABASE_URL) {
|
|
const hostname = new URL(SUPABASE_URL).hostname;
|
|
|
|
remotePatterns.push({
|
|
protocol: 'https',
|
|
hostname,
|
|
});
|
|
}
|
|
|
|
return IS_PRODUCTION
|
|
? remotePatterns
|
|
: [
|
|
{
|
|
protocol: 'http',
|
|
hostname: '127.0.0.1',
|
|
},
|
|
{
|
|
protocol: 'http',
|
|
hostname: 'localhost',
|
|
},
|
|
];
|
|
}
|
|
|
|
async function getRedirects() {
|
|
return [
|
|
{
|
|
source: '/server-sitemap.xml',
|
|
destination: '/sitemap.xml',
|
|
permanent: true,
|
|
},
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @description Aliases modules based on the environment variables
|
|
* This will speed up the development server by not loading the modules that are not needed
|
|
* @returns {Record<string, string>}
|
|
*/
|
|
function getModulesAliases() {
|
|
if (process.env.NODE_ENV !== 'development') {
|
|
return {};
|
|
}
|
|
|
|
const monitoringProvider = process.env.NEXT_PUBLIC_MONITORING_PROVIDER;
|
|
const billingProvider = process.env.NEXT_PUBLIC_BILLING_PROVIDER;
|
|
const mailerProvider = process.env.MAILER_PROVIDER;
|
|
const captchaProvider = process.env.NEXT_PUBLIC_CAPTCHA_SITE_KEY;
|
|
|
|
// exclude the modules that are not needed
|
|
const excludeSentry = monitoringProvider !== 'sentry';
|
|
const excludeStripe = billingProvider !== 'stripe';
|
|
const excludeNodemailer = mailerProvider !== 'nodemailer';
|
|
const excludeTurnstile = !captchaProvider;
|
|
|
|
/** @type {Record<string, string>} */
|
|
const aliases = {};
|
|
|
|
// the path to the noop module
|
|
const noopPath = '~/lib/dev-mock-modules';
|
|
|
|
if (excludeSentry) {
|
|
aliases['@sentry/nextjs'] = noopPath;
|
|
}
|
|
|
|
if (excludeStripe) {
|
|
aliases['stripe'] = noopPath;
|
|
aliases['@stripe/stripe-js'] = noopPath;
|
|
}
|
|
|
|
if (excludeNodemailer) {
|
|
aliases['nodemailer'] = noopPath;
|
|
}
|
|
|
|
if (excludeTurnstile) {
|
|
aliases['@marsidev/react-turnstile'] = noopPath;
|
|
}
|
|
|
|
return aliases;
|
|
}
|