diff --git a/next.config.js b/next.config.js
index c73790b8..a155ece7 100644
--- a/next.config.js
+++ b/next.config.js
@@ -87,6 +87,7 @@ const config = {
defaultLocale: process.env.DEFAULT_LOCALE || '',
disableLogin: process.env.DISABLE_LOGIN || '',
disableUI: process.env.DISABLE_UI || '',
+ hostUrl: process.env.HOST_URL || '',
},
basePath,
output: 'standalone',
diff --git a/src/app/(main)/dashboard/Dashboard.tsx b/src/app/(main)/dashboard/Dashboard.tsx
index 0f281aa7..ec1d793c 100644
--- a/src/app/(main)/dashboard/Dashboard.tsx
+++ b/src/app/(main)/dashboard/Dashboard.tsx
@@ -38,7 +38,7 @@ export function Dashboard() {
const { page } = params;
if (query.isLoading) {
- return ;
+ return ;
}
return (
diff --git a/src/app/(main)/settings/SettingsContext.tsx b/src/app/(main)/settings/SettingsContext.tsx
new file mode 100644
index 00000000..898a40cc
--- /dev/null
+++ b/src/app/(main)/settings/SettingsContext.tsx
@@ -0,0 +1,5 @@
+import { createContext } from 'react';
+
+export const SettingsContext = createContext(null);
+
+export default SettingsContext;
diff --git a/src/app/(main)/settings/layout.tsx b/src/app/(main)/settings/layout.tsx
index f738f883..f9612361 100644
--- a/src/app/(main)/settings/layout.tsx
+++ b/src/app/(main)/settings/layout.tsx
@@ -4,6 +4,7 @@ import useUser from 'components/hooks/useUser';
import useMessages from 'components/hooks/useMessages';
import SideNav from 'components/layout/SideNav';
import styles from './layout.module.css';
+import SettingsContext from './SettingsContext';
export default function SettingsLayout({ children }) {
const { user } = useUser();
@@ -24,14 +25,26 @@ export default function SettingsLayout({ children }) {
return null;
}
+ const hostUrl = process.env.hostUrl || location.origin;
+
+ const config = {
+ settingsUrl: '/settings/websites',
+ hostUrl,
+ shareUrl: hostUrl,
+ trackingCodeUrl: hostUrl,
+ websitesUrl: `/websites`,
+ };
+
return (
-
- {!cloudMode && (
-
-
-
- )}
-
{children}
-
+
+
+ {!cloudMode && (
+
+
+
+ )}
+
{children}
+
+
);
}
diff --git a/src/app/(main)/settings/users/UserAddButton.tsx b/src/app/(main)/settings/users/UserAddButton.tsx
index 7f08107c..1158ecec 100644
--- a/src/app/(main)/settings/users/UserAddButton.tsx
+++ b/src/app/(main)/settings/users/UserAddButton.tsx
@@ -22,7 +22,7 @@ export function UserAddButton({ onSave }: { onSave?: () => void }) {
{formatMessage(labels.createUser)}
- {close => }
+ {(close: () => void) => }
);
diff --git a/src/app/(main)/settings/users/UserAddForm.tsx b/src/app/(main)/settings/users/UserAddForm.tsx
index 11066a24..8c153775 100644
--- a/src/app/(main)/settings/users/UserAddForm.tsx
+++ b/src/app/(main)/settings/users/UserAddForm.tsx
@@ -21,7 +21,7 @@ export function UserAddForm({ onSave, onClose }) {
});
const { formatMessage, labels } = useMessages();
- const handleSubmit = async data => {
+ const handleSubmit = async (data: any) => {
mutate(data, {
onSuccess: async () => {
onSave(data);
diff --git a/src/app/(main)/settings/users/UserDeleteButton.tsx b/src/app/(main)/settings/users/UserDeleteButton.tsx
index 2b93c138..775004a8 100644
--- a/src/app/(main)/settings/users/UserDeleteButton.tsx
+++ b/src/app/(main)/settings/users/UserDeleteButton.tsx
@@ -24,7 +24,7 @@ export function UserDeleteButton({
{formatMessage(labels.delete)}
- {close => (
+ {(close: () => void) => (
)}
diff --git a/src/app/(main)/settings/users/[id]/UserSettings.js b/src/app/(main)/settings/users/[id]/UserSettings.tsx
similarity index 90%
rename from src/app/(main)/settings/users/[id]/UserSettings.js
rename to src/app/(main)/settings/users/[id]/UserSettings.tsx
index 3d8a92ea..d9b149c3 100644
--- a/src/app/(main)/settings/users/[id]/UserSettings.js
+++ b/src/app/(main)/settings/users/[id]/UserSettings.tsx
@@ -1,17 +1,17 @@
'use client';
-import { useEffect, useState } from 'react';
+import { Key, useEffect, useState } from 'react';
import { Item, Loading, Tabs, useToasts } from 'react-basics';
import UserEditForm from '../UserEditForm';
import PageHeader from 'components/layout/PageHeader';
import useApi from 'components/hooks/useApi';
-import UserWebsites from '../UserWebsites';
import useMessages from 'components/hooks/useMessages';
+import UserWebsites from '../UserWebsites';
export function UserSettings({ userId }) {
const { formatMessage, labels, messages } = useMessages();
const [edit, setEdit] = useState(false);
const [values, setValues] = useState(null);
- const [tab, setTab] = useState('details');
+ const [tab, setTab] = useState('details');
const { get, useQuery } = useApi();
const { showToast } = useToasts();
const { data, isLoading } = useQuery({
@@ -24,7 +24,7 @@ export function UserSettings({ userId }) {
gcTime: 0,
});
- const handleSave = data => {
+ const handleSave = (data: any) => {
showToast({ message: formatMessage(messages.saved), variant: 'success' });
if (data) {
setValues(state => ({ ...state, ...data }));
@@ -42,7 +42,7 @@ export function UserSettings({ userId }) {
}, [data]);
if (isLoading || !values) {
- return ;
+ return ;
}
return (
diff --git a/src/app/(main)/settings/websites/WebsiteAddButton.tsx b/src/app/(main)/settings/websites/WebsiteAddButton.tsx
index 16681b0e..7b4c92de 100644
--- a/src/app/(main)/settings/websites/WebsiteAddButton.tsx
+++ b/src/app/(main)/settings/websites/WebsiteAddButton.tsx
@@ -22,7 +22,7 @@ export function WebsiteAddButton({ onSave }: { onSave?: () => void }) {
{formatMessage(labels.addWebsite)}
- {close => }
+ {(close: () => void) => }
);
diff --git a/src/app/(main)/settings/websites/WebsiteAddForm.tsx b/src/app/(main)/settings/websites/WebsiteAddForm.tsx
index 9f3ba178..6d8fb8c3 100644
--- a/src/app/(main)/settings/websites/WebsiteAddForm.tsx
+++ b/src/app/(main)/settings/websites/WebsiteAddForm.tsx
@@ -10,12 +10,15 @@ import {
import useApi from 'components/hooks/useApi';
import { DOMAIN_REGEX } from 'lib/constants';
import useMessages from 'components/hooks/useMessages';
+import { useContext } from 'react';
+import SettingsContext from '../SettingsContext';
export function WebsiteAddForm({ onSave, onClose }: { onSave?: () => void; onClose?: () => void }) {
const { formatMessage, labels, messages } = useMessages();
+ const { websitesUrl } = useContext(SettingsContext);
const { post, useMutation } = useApi();
const { mutate, error, isPending } = useMutation({
- mutationFn: (data: any) => post('/websites', data),
+ mutationFn: (data: any) => post(websitesUrl, data),
});
const handleSubmit = async (data: any) => {
diff --git a/src/app/(main)/settings/websites/WebsiteSettings.js b/src/app/(main)/settings/websites/WebsiteSettings.tsx
similarity index 77%
rename from src/app/(main)/settings/websites/WebsiteSettings.js
rename to src/app/(main)/settings/websites/WebsiteSettings.tsx
index ffda838c..e925d1cf 100644
--- a/src/app/(main)/settings/websites/WebsiteSettings.js
+++ b/src/app/(main)/settings/websites/WebsiteSettings.tsx
@@ -1,5 +1,5 @@
'use client';
-import { useEffect, useState } from 'react';
+import { useContext, useEffect, useState, Key } from 'react';
import { Item, Tabs, useToasts, Button, Text, Icon, Icons, Loading } from 'react-basics';
import { useRouter } from 'next/navigation';
import Link from 'next/link';
@@ -10,33 +10,35 @@ import TrackingCode from './[id]/TrackingCode';
import ShareUrl from './[id]/ShareUrl';
import useApi from 'components/hooks/useApi';
import useMessages from 'components/hooks/useMessages';
+import SettingsContext from '../SettingsContext';
-export function WebsiteSettings({ websiteId, openExternal = false, analyticsUrl }) {
+export function WebsiteSettings({ websiteId, openExternal = false }) {
const router = useRouter();
const { formatMessage, labels, messages } = useMessages();
const { get, useQuery } = useApi();
const { showToast } = useToasts();
+ const { websitesUrl, settingsUrl } = useContext(SettingsContext);
const { data, isLoading } = useQuery({
queryKey: ['website', websiteId],
- queryFn: () => get(`/websites/${websiteId}`),
+ queryFn: () => get(`${websitesUrl}/${websiteId}`),
enabled: !!websiteId,
gcTime: 0,
});
const [values, setValues] = useState(null);
- const [tab, setTab] = useState('details');
+ const [tab, setTab] = useState('details');
const showSuccess = () => {
showToast({ message: formatMessage(messages.saved), variant: 'success' });
};
- const handleSave = data => {
+ const handleSave = (data: any) => {
showSuccess();
- setValues(state => ({ ...state, ...data }));
+ setValues((state: any) => ({ ...state, ...data }));
};
- const handleReset = async value => {
+ const handleReset = async (value: string) => {
if (value === 'delete') {
- router.push('/settings/websites');
+ router.push(settingsUrl);
} else if (value === 'reset') {
showSuccess();
}
@@ -55,7 +57,7 @@ export function WebsiteSettings({ websiteId, openExternal = false, analyticsUrl
return (
<>
-
+