Merge branch 'dev' into dev

This commit is contained in:
Mike Cao 2023-04-21 14:57:04 -07:00 committed by GitHub
commit 115a2560a7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
122 changed files with 5957 additions and 4050 deletions

View file

@ -11,7 +11,7 @@ import Script from 'next/script';
import { Button, Column, Row } from 'react-basics';
import styles from './TestConsole.module.css';
export default function TestConsole() {
export function TestConsole() {
const { get, useQuery } = useApi();
const { data, isLoading, error } = useQuery(['websites:me'], () => get('/me/websites'));
const router = useRouter();
@ -132,3 +132,5 @@ export default function TestConsole() {
</Page>
);
}
export default TestConsole;

View file

@ -12,7 +12,7 @@ import useDashboard from 'store/dashboard';
import useMessages from 'hooks/useMessages';
import useLocale from 'hooks/useLocale';
export default function Dashboard({ userId }) {
export function Dashboard({ userId }) {
const { formatMessage, labels, messages } = useMessages();
const dashboard = useDashboard();
const { showCharts, limit, editing } = dashboard;
@ -62,3 +62,5 @@ export default function Dashboard({ userId }) {
</Page>
);
}
export default Dashboard;

View file

@ -9,7 +9,7 @@ import styles from './DashboardEdit.module.css';
const dragId = 'dashboard-website-ordering';
export default function DashboardEdit({ websites }) {
export function DashboardEdit({ websites }) {
const settings = useDashboard();
const { websiteOrder } = settings;
const { formatMessage, labels } = useMessages();
@ -98,3 +98,5 @@ export default function DashboardEdit({ websites }) {
</>
);
}
export default DashboardEdit;

View file

@ -3,7 +3,7 @@ import Icons from 'components/icons';
import { saveDashboard } from 'store/dashboard';
import useMessages from 'hooks/useMessages';
export default function DashboardSettingsButton() {
export function DashboardSettingsButton() {
const { formatMessage, labels } = useMessages();
const menuOptions = [
@ -42,3 +42,5 @@ export default function DashboardSettingsButton() {
</PopupTrigger>
);
}
export default DashboardSettingsButton;

View file

@ -17,7 +17,7 @@ import useMessages from 'hooks/useMessages';
import Logo from 'assets/logo.svg';
import styles from './LoginForm.module.css';
export default function LoginForm() {
export function LoginForm() {
const { formatMessage, labels, getMessage } = useMessages();
const router = useRouter();
const { post } = useApi();
@ -60,3 +60,5 @@ export default function LoginForm() {
</div>
);
}
export default LoginForm;

View file

@ -2,7 +2,7 @@ import Head from 'next/head';
import useLocale from 'hooks/useLocale';
import styles from './LoginLayout.module.css';
export default function LoginLayout({ children }) {
export function LoginLayout({ children }) {
const { dir } = useLocale();
return (
@ -14,3 +14,5 @@ export default function LoginLayout({ children }) {
</div>
);
}
export default LoginLayout;

View file

@ -4,7 +4,7 @@ import useLocale from 'hooks/useLocale';
import useCountryNames from 'hooks/useCountryNames';
import useMessages from 'hooks/useMessages';
export default function RealtimeCountries({ data }) {
export function RealtimeCountries({ data }) {
const { formatMessage, labels } = useMessages();
const { locale } = useLocale();
const countryNames = useCountryNames(locale);
@ -23,3 +23,5 @@ export default function RealtimeCountries({ data }) {
/>
);
}
export default RealtimeCountries;

View file

@ -25,7 +25,7 @@ function mergeData(state = [], data = [], time) {
.filter(({ timestamp }) => timestamp >= time);
}
export default function RealtimeDashboard({ websiteId }) {
export function RealtimeDashboard({ websiteId }) {
const { formatMessage, labels } = useMessages();
const router = useRouter();
const [currentData, setCurrentData] = useState();
@ -125,3 +125,5 @@ export default function RealtimeDashboard({ websiteId }) {
</Page>
);
}
export default RealtimeDashboard;

View file

@ -2,7 +2,7 @@ import MetricCard from 'components/metrics/MetricCard';
import useMessages from 'hooks/useMessages';
import styles from './RealtimeHeader.module.css';
export default function RealtimeHeader({ data = {} }) {
export function RealtimeHeader({ data = {} }) {
const { formatMessage, labels } = useMessages();
const { pageviews, visitors, events, countries } = data;
@ -37,3 +37,5 @@ export default function RealtimeHeader({ data = {} }) {
</div>
);
}
export default RealtimeHeader;

View file

@ -6,7 +6,7 @@ import useApi from 'hooks/useApi';
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
import useMessages from 'hooks/useMessages';
export default function RealtimeHome() {
export function RealtimeHome() {
const { formatMessage, labels, messages } = useMessages();
const { get, useQuery } = useApi();
const router = useRouter();
@ -27,3 +27,5 @@ export default function RealtimeHome() {
</Page>
);
}
export default RealtimeHome;

View file

@ -25,7 +25,7 @@ const icons = {
[TYPE_EVENT]: <Icons.Bolt />,
};
export default function RealtimeLog({ data, websiteDomain }) {
export function RealtimeLog({ data, websiteDomain }) {
const { formatMessage, labels, messages, FormattedMessage } = useMessages();
const { locale } = useLocale();
const countryNames = useCountryNames(locale);
@ -154,3 +154,5 @@ export default function RealtimeLog({ data, websiteDomain }) {
</div>
);
}
export default RealtimeLog;

View file

@ -6,7 +6,7 @@ import DataTable from 'components/metrics/DataTable';
import { FILTER_PAGES, FILTER_REFERRERS } from 'lib/constants';
import useMessages from 'hooks/useMessages';
export default function RealtimeUrls({ websiteDomain, data = {} }) {
export function RealtimeUrls({ websiteDomain, data = {} }) {
const { formatMessage, labels } = useMessages();
const { pageviews } = data;
const [filter, setFilter] = useState(FILTER_REFERRERS);
@ -97,3 +97,5 @@ export default function RealtimeUrls({ websiteDomain, data = {} }) {
</>
);
}
export default RealtimeUrls;

View file

@ -4,7 +4,7 @@ import useDateRange from 'hooks/useDateRange';
import { DEFAULT_DATE_RANGE } from 'lib/constants';
import useMessages from 'hooks/useMessages';
export default function DateRangeSetting() {
export function DateRangeSetting() {
const { formatMessage, labels } = useMessages();
const [dateRange, setDateRange] = useDateRange();
const { startDate, endDate, value } = dateRange;
@ -18,3 +18,5 @@ export default function DateRangeSetting() {
</Flexbox>
);
}
export default DateRangeSetting;

View file

@ -4,7 +4,7 @@ import { DEFAULT_LOCALE } from 'lib/constants';
import { languages } from 'lib/lang';
import useMessages from 'hooks/useMessages';
export default function LanguageSetting() {
export function LanguageSetting() {
const { formatMessage, labels } = useMessages();
const { locale, saveLocale } = useLocale();
const options = Object.keys(languages);
@ -28,3 +28,5 @@ export default function LanguageSetting() {
</Flexbox>
);
}
export default LanguageSetting;

View file

@ -3,7 +3,7 @@ import PasswordEditForm from 'components/pages/settings/profile/PasswordEditForm
import Icons from 'components/icons';
import useMessages from 'hooks/useMessages';
export default function PasswordChangeButton() {
export function PasswordChangeButton() {
const { formatMessage, labels, messages } = useMessages();
const { toast, showToast } = useToast();
@ -28,3 +28,5 @@ export default function PasswordChangeButton() {
</>
);
}
export default PasswordChangeButton;

View file

@ -3,7 +3,7 @@ import { Form, FormRow, FormInput, FormButtons, PasswordField, Button } from 're
import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
export default function PasswordEditForm({ onSave, onClose }) {
export function PasswordEditForm({ onSave, onClose }) {
const { formatMessage, labels, messages } = useMessages();
const { post, useMutation } = useApi();
const { mutate, error, isLoading } = useMutation(data => post('/me/password', data));
@ -64,3 +64,5 @@ export default function PasswordEditForm({ onSave, onClose }) {
</Form>
);
}
export default PasswordEditForm;

View file

@ -8,7 +8,7 @@ import useUser from 'hooks/useUser';
import useMessages from 'hooks/useMessages';
import useConfig from 'hooks/useConfig';
export default function ProfileDetails() {
export function ProfileDetails() {
const { user } = useUser();
const { formatMessage, labels } = useMessages();
const { cloudMode } = useConfig();
@ -45,3 +45,5 @@ export default function ProfileDetails() {
</Form>
);
}
export default ProfileDetails;

View file

@ -3,7 +3,7 @@ import PageHeader from 'components/layout/PageHeader';
import ProfileDetails from './ProfileDetails';
import useMessages from 'hooks/useMessages';
export default function ProfileSettings() {
export function ProfileSettings() {
const { formatMessage, labels } = useMessages();
return (
@ -13,3 +13,5 @@ export default function ProfileSettings() {
</Page>
);
}
export default ProfileSettings;

View file

@ -5,7 +5,7 @@ import Sun from 'assets/sun.svg';
import Moon from 'assets/moon.svg';
import styles from './ThemeSetting.module.css';
export default function ThemeSetting() {
export function ThemeSetting() {
const [theme, setTheme] = useTheme();
return (
@ -29,3 +29,5 @@ export default function ThemeSetting() {
</div>
);
}
export default ThemeSetting;

View file

@ -4,7 +4,7 @@ import useTimezone from 'hooks/useTimezone';
import useMessages from 'hooks/useMessages';
import { getTimezone } from 'lib/date';
export default function TimezoneSetting() {
export function TimezoneSetting() {
const { formatMessage, labels } = useMessages();
const [timezone, saveTimezone] = useTimezone();
const options = listTimeZones();
@ -26,3 +26,5 @@ export default function TimezoneSetting() {
</Flexbox>
);
}
export default TimezoneSetting;

View file

@ -11,7 +11,7 @@ import {
import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
export default function TeamAddForm({ onSave, onClose }) {
export function TeamAddForm({ onSave, onClose }) {
const { formatMessage, labels } = useMessages();
const { post, useMutation } = useApi();
const { mutate, error, isLoading } = useMutation(data => post('/teams', data));
@ -44,3 +44,5 @@ export default function TeamAddForm({ onSave, onClose }) {
</Form>
);
}
export default TeamAddForm;

View file

@ -4,7 +4,7 @@ import { Button, Dropdown, Form, FormButtons, FormRow, Item, SubmitButton } from
import WebsiteTags from './WebsiteTags';
import useMessages from 'hooks/useMessages';
export default function TeamAddWebsiteForm({ teamId, onSave, onClose }) {
export function TeamAddWebsiteForm({ teamId, onSave, onClose }) {
const { formatMessage, labels } = useMessages();
const { get, post, useQuery, useMutation } = useApi();
const { mutate, error } = useMutation(data => post(`/teams/${teamId}/websites`, data));
@ -59,3 +59,5 @@ export default function TeamAddWebsiteForm({ teamId, onSave, onClose }) {
</>
);
}
export default TeamAddWebsiteForm;

View file

@ -2,7 +2,7 @@ import { Button, Form, FormButtons, SubmitButton } from 'react-basics';
import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
export default function TeamDeleteForm({ teamId, teamName, onSave, onClose }) {
export function TeamDeleteForm({ teamId, teamName, onSave, onClose }) {
const { formatMessage, labels, messages, FormattedMessage } = useMessages();
const { del, useMutation } = useApi();
const { mutate, error, isLoading } = useMutation(data => del(`/teams/${teamId}`, data));
@ -30,3 +30,5 @@ export default function TeamDeleteForm({ teamId, teamName, onSave, onClose }) {
</Form>
);
}
export default TeamDeleteForm;

View file

@ -15,7 +15,7 @@ import useMessages from 'hooks/useMessages';
const generateId = () => getRandomChars(16);
export default function TeamEditForm({ teamId, data, onSave, readOnly }) {
export function TeamEditForm({ teamId, data, onSave, readOnly }) {
const { formatMessage, labels } = useMessages();
const { post, useMutation } = useApi();
const { mutate, error } = useMutation(data => post(`/teams/${teamId}`, data));
@ -69,3 +69,5 @@ export default function TeamEditForm({ teamId, data, onSave, readOnly }) {
</Form>
);
}
export default TeamEditForm;

View file

@ -11,7 +11,7 @@ import {
import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
export default function TeamJoinForm({ onSave, onClose }) {
export function TeamJoinForm({ onSave, onClose }) {
const { formatMessage, labels, getMessage } = useMessages();
const { post, useMutation } = useApi();
const { mutate, error } = useMutation(data => post('/teams/join', data));
@ -40,3 +40,5 @@ export default function TeamJoinForm({ onSave, onClose }) {
</Form>
);
}
export default TeamJoinForm;

View file

@ -2,7 +2,7 @@ import { Button, Form, FormButtons, SubmitButton } from 'react-basics';
import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
export default function TeamLeaveForm({ teamId, userId, teamName, onSave, onClose }) {
export function TeamLeaveForm({ teamId, userId, teamName, onSave, onClose }) {
const { formatMessage, labels, messages, FormattedMessage } = useMessages();
const { del, useMutation } = useApi();
const { mutate, error, isLoading } = useMutation(() => del(`/team/${teamId}/users/${userId}`));
@ -33,3 +33,5 @@ export default function TeamLeaveForm({ teamId, userId, teamName, onSave, onClos
</Form>
);
}
export default TeamLeaveForm;

View file

@ -2,7 +2,7 @@ import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
import { Icon, Icons, LoadingButton, Text } from 'react-basics';
export default function TeamMemberRemoveButton({ teamId, userId, disabled, onSave }) {
export function TeamMemberRemoveButton({ teamId, userId, disabled, onSave }) {
const { formatMessage, labels } = useMessages();
const { del, useMutation } = useApi();
const { mutate, isLoading } = useMutation(() => del(`/team/${teamId}/users/${userId}`));
@ -27,3 +27,5 @@ export default function TeamMemberRemoveButton({ teamId, userId, disabled, onSav
</LoadingButton>
);
}
export default TeamMemberRemoveButton;

View file

@ -3,7 +3,7 @@ import TeamMembersTable from 'components/pages/settings/teams/TeamMembersTable';
import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
export default function TeamMembers({ teamId, readOnly }) {
export function TeamMembers({ teamId, readOnly }) {
const { toast, showToast } = useToast();
const { get, useQuery } = useApi();
const { formatMessage, messages } = useMessages();
@ -27,3 +27,5 @@ export default function TeamMembers({ teamId, readOnly }) {
</>
);
}
export default TeamMembers;

View file

@ -4,7 +4,7 @@ import { ROLES } from 'lib/constants';
import TeamMemberRemoveButton from './TeamMemberRemoveButton';
import SettingsTable from 'components/common/SettingsTable';
export default function TeamMembersTable({ data = [], onSave, readOnly }) {
export function TeamMembersTable({ data = [], onSave, readOnly }) {
const { formatMessage, labels } = useMessages();
const { user } = useUser();
@ -43,3 +43,5 @@ export default function TeamMembersTable({ data = [], onSave, readOnly }) {
</SettingsTable>
);
}
export default TeamMembersTable;

View file

@ -11,7 +11,7 @@ import TeamEditForm from './TeamEditForm';
import TeamMembers from './TeamMembers';
import TeamWebsites from './TeamWebsites';
export default function TeamSettings({ teamId }) {
export function TeamSettings({ teamId }) {
const { formatMessage, labels, messages } = useMessages();
const { user } = useUser();
const [values, setValues] = useState(null);
@ -68,3 +68,5 @@ export default function TeamSettings({ teamId }) {
</Page>
);
}
export default TeamSettings;

View file

@ -2,7 +2,7 @@ import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
import { Icon, Icons, LoadingButton, Text } from 'react-basics';
export default function TeamWebsiteRemoveButton({ teamId, websiteId, onSave }) {
export function TeamWebsiteRemoveButton({ teamId, websiteId, onSave }) {
const { formatMessage, labels } = useMessages();
const { del, useMutation } = useApi();
const { mutate, isLoading } = useMutation(() => del(`/teams/${teamId}/websites/${websiteId}`));
@ -27,3 +27,5 @@ export default function TeamWebsiteRemoveButton({ teamId, websiteId, onSave }) {
</LoadingButton>
);
}
export default TeamWebsiteRemoveButton;

View file

@ -14,7 +14,7 @@ import TeamAddWebsiteForm from 'components/pages/settings/teams/TeamAddWebsiteFo
import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
export default function TeamWebsites({ teamId }) {
export function TeamWebsites({ teamId }) {
const { toast, showToast } = useToast();
const { formatMessage, labels, messages } = useMessages();
const { get, useQuery } = useApi();
@ -54,3 +54,5 @@ export default function TeamWebsites({ teamId }) {
</div>
);
}
export default TeamWebsites;

View file

@ -6,7 +6,7 @@ import TeamWebsiteRemoveButton from './TeamWebsiteRemoveButton';
import SettingsTable from 'components/common/SettingsTable';
import useConfig from 'hooks/useConfig';
export default function TeamWebsitesTable({ data = [], onSave }) {
export function TeamWebsitesTable({ data = [], onSave }) {
const { formatMessage, labels } = useMessages();
const { openExternal } = useConfig();
const { user } = useUser();
@ -51,3 +51,5 @@ export default function TeamWebsitesTable({ data = [], onSave }) {
</SettingsTable>
);
}
export default TeamWebsitesTable;

View file

@ -6,7 +6,7 @@ import PageHeader from 'components/layout/PageHeader';
import TeamsTable from 'components/pages/settings/teams/TeamsTable';
import Page from 'components/layout/Page';
import Icons from 'components/icons';
import TeamJoinForm from './JoinTeamForm';
import TeamJoinForm from './TeamJoinForm';
import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';

View file

@ -8,7 +8,7 @@ import { ROLES } from 'lib/constants';
import SettingsTable from 'components/common/SettingsTable';
import useLocale from 'hooks/useLocale';
export default function TeamsTable({ data = [], onDelete }) {
export function TeamsTable({ data = [], onDelete }) {
const { formatMessage, labels } = useMessages();
const { user } = useUser();
const { dir } = useLocale();
@ -90,3 +90,5 @@ export default function TeamsTable({ data = [], onDelete }) {
</SettingsTable>
);
}
export default TeamsTable;

View file

@ -1,7 +1,7 @@
import { Button, Icon, Icons, Text } from 'react-basics';
import styles from './WebsiteTags.module.css';
export default function WebsiteTags({ items = [], websites = [], onClick }) {
export function WebsiteTags({ items = [], websites = [], onClick }) {
if (websites.length === 0) {
return null;
}
@ -27,3 +27,5 @@ export default function WebsiteTags({ items = [], websites = [], onClick }) {
</div>
);
}
export default WebsiteTags;

View file

@ -2,7 +2,7 @@ import { Button, Icon, Text, Modal, Icons, ModalTrigger } from 'react-basics';
import UserAddForm from './UserAddForm';
import useMessages from 'hooks/useMessages';
export default function UserAddButton({ onSave }) {
export function UserAddButton({ onSave }) {
const { formatMessage, labels } = useMessages();
const handleSave = () => {
@ -23,3 +23,5 @@ export default function UserAddButton({ onSave }) {
</ModalTrigger>
);
}
export default UserAddButton;

View file

@ -14,7 +14,7 @@ import useApi from 'hooks/useApi';
import { ROLES } from 'lib/constants';
import useMessages from 'hooks/useMessages';
export default function UserAddForm({ onSave, onClose }) {
export function UserAddForm({ onSave, onClose }) {
const { post, useMutation } = useApi();
const { mutate, error, isLoading } = useMutation(data => post(`/users`, data));
const { formatMessage, labels } = useMessages();
@ -68,3 +68,5 @@ export default function UserAddForm({ onSave, onClose }) {
</Form>
);
}
export default UserAddForm;

View file

@ -3,7 +3,7 @@ import { Button, Form, FormButtons, SubmitButton } from 'react-basics';
import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
export default function UserDeleteForm({ userId, username, onSave, onClose }) {
export function UserDeleteForm({ userId, username, onSave, onClose }) {
const { formatMessage, FormattedMessage, labels, messages } = useMessages();
const { del } = useApi();
const { mutate, error, isLoading } = useMutation(() => del(`/users/${userId}`));
@ -33,3 +33,5 @@ export default function UserDeleteForm({ userId, username, onSave, onClose }) {
</Form>
);
}
export default UserDeleteForm;

View file

@ -13,7 +13,7 @@ import useApi from 'hooks/useApi';
import { ROLES } from 'lib/constants';
import useMessages from 'hooks/useMessages';
export default function UserEditForm({ userId, data, onSave }) {
export function UserEditForm({ userId, data, onSave }) {
const { formatMessage, labels, messages } = useMessages();
const { post, useMutation } = useApi();
const { mutate, error } = useMutation(({ username, password, role }) =>
@ -68,3 +68,5 @@ export default function UserEditForm({ userId, data, onSave }) {
</Form>
);
}
export default UserEditForm;

View file

@ -8,7 +8,7 @@ import useApi from 'hooks/useApi';
import UserWebsites from './UserWebsites';
import useMessages from 'hooks/useMessages';
export default function UserSettings({ userId }) {
export function UserSettings({ userId }) {
const { formatMessage, labels, messages } = useMessages();
const [edit, setEdit] = useState(false);
const [values, setValues] = useState(null);
@ -64,3 +64,5 @@ export default function UserSettings({ userId }) {
</Page>
);
}
export default UserSettings;

View file

@ -3,7 +3,7 @@ import useApi from 'hooks/useApi';
import WebsitesTable from 'components/pages/settings/websites/WebsitesTable';
import useMessages from 'hooks/useMessages';
export default function UserWebsites({ userId }) {
export function UserWebsites({ userId }) {
const { formatMessage, messages } = useMessages();
const { get, useQuery } = useApi();
const { data, isLoading } = useQuery(['user:websites', userId], () =>
@ -22,3 +22,5 @@ export default function UserWebsites({ userId }) {
</div>
);
}
export default UserWebsites;

View file

@ -8,7 +8,7 @@ import useApi from 'hooks/useApi';
import useUser from 'hooks/useUser';
import useMessages from 'hooks/useMessages';
export default function UsersList() {
export function UsersList() {
const { formatMessage, labels, messages } = useMessages();
const { user } = useUser();
const { get, useQuery } = useApi();
@ -38,3 +38,5 @@ export default function UsersList() {
</Page>
);
}
export default UsersList;

View file

@ -8,7 +8,7 @@ import useMessages from 'hooks/useMessages';
import SettingsTable from 'components/common/SettingsTable';
import useLocale from 'hooks/useLocale';
export default function UsersTable({ data = [], onDelete }) {
export function UsersTable({ data = [], onDelete }) {
const { formatMessage, labels } = useMessages();
const { user } = useUser();
const { dateLocale } = useLocale();
@ -72,3 +72,5 @@ export default function UsersTable({ data = [], onDelete }) {
</SettingsTable>
);
}
export default UsersTable;

View file

@ -15,7 +15,7 @@ import useMessages from 'hooks/useMessages';
const generateId = () => getRandomChars(16);
export default function ShareUrl({ websiteId, data, onSave }) {
export function ShareUrl({ websiteId, data, onSave }) {
const { formatMessage, labels, messages } = useMessages();
const { name, shareId } = data;
const [id, setId] = useState(shareId);
@ -85,3 +85,5 @@ export default function ShareUrl({ websiteId, data, onSave }) {
</>
);
}
export default ShareUrl;

View file

@ -2,12 +2,12 @@ import { TextArea } from 'react-basics';
import useMessages from 'hooks/useMessages';
import useConfig from 'hooks/useConfig';
export default function TrackingCode({ websiteId }) {
export function TrackingCode({ websiteId }) {
const { formatMessage, messages } = useMessages();
const { trackerScriptName } = useConfig();
const url = trackerScriptName.startsWith('http')
? trackerScriptName
: `${location.origin}/${trackerScriptName}.js`;
: `${location.origin}/${trackerScriptName?.split(',')?.map(n => n.trim())?.[0]}`;
const code = `<script async src="${url}" data-website-id="${websiteId}"></script>`;
@ -18,3 +18,5 @@ export default function TrackingCode({ websiteId }) {
</>
);
}
export default TrackingCode;

View file

@ -11,7 +11,7 @@ import useApi from 'hooks/useApi';
import { DOMAIN_REGEX } from 'lib/constants';
import useMessages from 'hooks/useMessages';
export default function WebsiteAddForm({ onSave, onClose }) {
export function WebsiteAddForm({ onSave, onClose }) {
const { formatMessage, labels, messages } = useMessages();
const { post, useMutation } = useApi();
const { mutate, error, isLoading } = useMutation(data => post('/websites', data));
@ -54,3 +54,5 @@ export default function WebsiteAddForm({ onSave, onClose }) {
</Form>
);
}
export default WebsiteAddForm;

View file

@ -3,7 +3,7 @@ import WebsiteDeleteForm from 'components/pages/settings/websites/WebsiteDeleteF
import WebsiteResetForm from 'components/pages/settings/websites/WebsiteResetForm';
import useMessages from 'hooks/useMessages';
export default function WebsiteData({ websiteId, onSave }) {
export function WebsiteData({ websiteId, onSave }) {
const { formatMessage, labels, messages } = useMessages();
const handleReset = async () => {
@ -45,3 +45,5 @@ export default function WebsiteData({ websiteId, onSave }) {
</>
);
}
export default WebsiteData;

View file

@ -12,7 +12,7 @@ import useMessages from 'hooks/useMessages';
const CONFIRM_VALUE = 'DELETE';
export default function WebsiteDeleteForm({ websiteId, onSave, onClose }) {
export function WebsiteDeleteForm({ websiteId, onSave, onClose }) {
const { formatMessage, labels, messages, FormattedMessage } = useMessages();
const { del, useMutation } = useApi();
const { mutate, error } = useMutation(data => del(`/websites/${websiteId}`, data));
@ -46,3 +46,5 @@ export default function WebsiteDeleteForm({ websiteId, onSave, onClose }) {
</Form>
);
}
export default WebsiteDeleteForm;

View file

@ -4,7 +4,7 @@ import useApi from 'hooks/useApi';
import { DOMAIN_REGEX } from 'lib/constants';
import useMessages from 'hooks/useMessages';
export default function WebsiteEditForm({ websiteId, data, onSave }) {
export function WebsiteEditForm({ websiteId, data, onSave }) {
const { formatMessage, labels, messages } = useMessages();
const { post, useMutation } = useApi();
const { mutate, error } = useMutation(data => post(`/websites/${websiteId}`, data));
@ -49,3 +49,5 @@ export default function WebsiteEditForm({ websiteId, data, onSave }) {
</Form>
);
}
export default WebsiteEditForm;

View file

@ -12,7 +12,7 @@ import useMessages from 'hooks/useMessages';
const CONFIRM_VALUE = 'RESET';
export default function WebsiteResetForm({ websiteId, onSave, onClose }) {
export function WebsiteResetForm({ websiteId, onSave, onClose }) {
const { formatMessage, labels, messages } = useMessages();
const { post, useMutation } = useApi();
const { mutate, error } = useMutation(data => post(`/websites/${websiteId}/reset`, data));
@ -41,3 +41,5 @@ export default function WebsiteResetForm({ websiteId, onSave, onClose }) {
</Form>
);
}
export default WebsiteResetForm;

View file

@ -12,7 +12,7 @@ import useApi from 'hooks/useApi';
import useMessages from 'hooks/useMessages';
import useConfig from 'hooks/useConfig';
export default function WebsiteSettings({ websiteId }) {
export function WebsiteSettings({ websiteId }) {
const router = useRouter();
const { formatMessage, labels, messages } = useMessages();
const { openExternal } = useConfig();
@ -86,3 +86,5 @@ export default function WebsiteSettings({ websiteId }) {
</Page>
);
}
export default WebsiteSettings;

View file

@ -8,7 +8,7 @@ import useApi from 'hooks/useApi';
import useUser from 'hooks/useUser';
import useMessages from 'hooks/useMessages';
export default function WebsitesList() {
export function WebsitesList() {
const { formatMessage, labels, messages } = useMessages();
const { user } = useUser();
const { get, useQuery } = useApi();
@ -52,3 +52,5 @@ export default function WebsitesList() {
</Page>
);
}
export default WebsitesList;

View file

@ -4,7 +4,7 @@ import SettingsTable from 'components/common/SettingsTable';
import useMessages from 'hooks/useMessages';
import useConfig from 'hooks/useConfig';
export default function WebsitesTable({ data = [] }) {
export function WebsitesTable({ data = [] }) {
const { formatMessage, labels } = useMessages();
const { openExternal } = useConfig();
@ -43,3 +43,5 @@ export default function WebsitesTable({ data = [] }) {
</SettingsTable>
);
}
export default WebsitesTable;