diff --git a/src/app/(main)/reports/ReportDeleteButton.tsx b/src/app/(main)/reports/ReportDeleteButton.tsx index ce3958e5..c0f16469 100644 --- a/src/app/(main)/reports/ReportDeleteButton.tsx +++ b/src/app/(main)/reports/ReportDeleteButton.tsx @@ -1,7 +1,7 @@ 'use client'; import { Button, Icon, Icons, Modal, ModalTrigger, Text } from 'react-basics'; import { useApi, useMessages } from 'components/hooks'; -import { touch } from 'store/cache'; +import { touch } from 'store/modified'; import ConfirmationForm from 'components/common/ConfirmationForm'; export function ReportDeleteButton({ diff --git a/src/app/(main)/settings/teams/TeamAddForm.tsx b/src/app/(main)/settings/teams/TeamAddForm.tsx index 53220b8f..a3caf25f 100644 --- a/src/app/(main)/settings/teams/TeamAddForm.tsx +++ b/src/app/(main)/settings/teams/TeamAddForm.tsx @@ -8,7 +8,7 @@ import { Button, SubmitButton, } from 'react-basics'; -import { touch } from 'store/cache'; +import { touch } from 'store/modified'; import { useApi, useMessages } from 'components/hooks'; export function TeamAddForm({ onSave, onClose }: { onSave: () => void; onClose: () => void }) { diff --git a/src/app/(main)/settings/teams/TeamDeleteForm.tsx b/src/app/(main)/settings/teams/TeamDeleteForm.tsx index f6f40557..aa2b1d3f 100644 --- a/src/app/(main)/settings/teams/TeamDeleteForm.tsx +++ b/src/app/(main)/settings/teams/TeamDeleteForm.tsx @@ -1,6 +1,6 @@ 'use client'; import { useApi, useMessages } from 'components/hooks'; -import { touch } from 'store/cache'; +import { touch } from 'store/modified'; import TypeConfirmationForm from 'components/common/TypeConfirmationForm'; const CONFIRM_VALUE = 'DELETE'; diff --git a/src/app/(main)/settings/teams/TeamJoinForm.tsx b/src/app/(main)/settings/teams/TeamJoinForm.tsx index 1510b6ef..b448a368 100644 --- a/src/app/(main)/settings/teams/TeamJoinForm.tsx +++ b/src/app/(main)/settings/teams/TeamJoinForm.tsx @@ -10,7 +10,7 @@ import { SubmitButton, } from 'react-basics'; import { useApi, useMessages } from 'components/hooks'; -import { touch } from 'store/cache'; +import { touch } from 'store/modified'; export function TeamJoinForm({ onSave, onClose }: { onSave: () => void; onClose: () => void }) { const { formatMessage, labels, getMessage } = useMessages(); diff --git a/src/app/(main)/settings/teams/TeamLeaveForm.tsx b/src/app/(main)/settings/teams/TeamLeaveForm.tsx index 4e853702..eba448f1 100644 --- a/src/app/(main)/settings/teams/TeamLeaveForm.tsx +++ b/src/app/(main)/settings/teams/TeamLeaveForm.tsx @@ -1,6 +1,6 @@ 'use client'; import { useApi, useMessages } from 'components/hooks'; -import { touch } from 'store/cache'; +import { touch } from 'store/modified'; import ConfirmationForm from 'components/common/ConfirmationForm'; export function TeamLeaveForm({ diff --git a/src/app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton.tsx b/src/app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton.tsx index 581b97a2..bae0e723 100644 --- a/src/app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton.tsx +++ b/src/app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton.tsx @@ -1,7 +1,7 @@ 'use client'; import { useApi, useMessages } from 'components/hooks'; import { Icon, Icons, LoadingButton, Text } from 'react-basics'; -import { touch } from 'store/cache'; +import { touch } from 'store/modified'; export function TeamMemberRemoveButton({ teamId, diff --git a/src/app/(main)/settings/users/UserAddButton.tsx b/src/app/(main)/settings/users/UserAddButton.tsx index b97571c1..57f2ebc5 100644 --- a/src/app/(main)/settings/users/UserAddButton.tsx +++ b/src/app/(main)/settings/users/UserAddButton.tsx @@ -2,7 +2,7 @@ import { Button, Icon, Text, Modal, Icons, ModalTrigger, useToasts } from 'react-basics'; import UserAddForm from './UserAddForm'; import { useMessages } from 'components/hooks'; -import { touch } from 'store/cache'; +import { touch } from 'store/modified'; export function UserAddButton({ onSave }: { onSave?: () => void }) { const { formatMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/settings/users/UserDeleteForm.tsx b/src/app/(main)/settings/users/UserDeleteForm.tsx index 5fed5fbb..0cce8d6d 100644 --- a/src/app/(main)/settings/users/UserDeleteForm.tsx +++ b/src/app/(main)/settings/users/UserDeleteForm.tsx @@ -1,7 +1,7 @@ 'use client'; import { useApi, useMessages } from 'components/hooks'; import ConfirmationForm from 'components/common/ConfirmationForm'; -import { touch } from 'store/cache'; +import { touch } from 'store/modified'; export function UserDeleteForm({ userId, username, onSave, onClose }) { const { FormattedMessage, messages, labels, formatMessage } = useMessages(); diff --git a/src/app/(main)/settings/websites/WebsiteAddButton.tsx b/src/app/(main)/settings/websites/WebsiteAddButton.tsx index 9fd06a1a..90fc15b1 100644 --- a/src/app/(main)/settings/websites/WebsiteAddButton.tsx +++ b/src/app/(main)/settings/websites/WebsiteAddButton.tsx @@ -2,7 +2,7 @@ import { Button, Icon, Icons, Modal, ModalTrigger, Text, useToasts } from 'react-basics'; import WebsiteAddForm from './WebsiteAddForm'; import { useMessages } from 'components/hooks'; -import { touch } from 'store/cache'; +import { touch } from 'store/modified'; export function WebsiteAddButton({ teamId, onSave }: { teamId: string; onSave?: () => void }) { const { formatMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/settings/websites/[websiteId]/ShareUrl.tsx b/src/app/(main)/settings/websites/[websiteId]/ShareUrl.tsx index 50e1ad1d..13c07dd1 100644 --- a/src/app/(main)/settings/websites/[websiteId]/ShareUrl.tsx +++ b/src/app/(main)/settings/websites/[websiteId]/ShareUrl.tsx @@ -1,5 +1,4 @@ 'use client'; -import { Website } from '@prisma/client'; import { Form, FormRow, @@ -11,21 +10,22 @@ import { LoadingButton, useToasts, } from 'react-basics'; -import { useState } from 'react'; +import { useContext, useState } from 'react'; import { getRandomChars } from 'next-basics'; import { useApi, useMessages } from 'components/hooks'; +import { WebsiteContext } from 'app/(main)/websites/[websiteId]/WebsiteProvider'; +import { touch } from 'store/modified'; const generateId = () => getRandomChars(16); export function ShareUrl({ - website, hostUrl, - onSave, }: { - website: Website; + websiteId: string; hostUrl?: string; onSave?: () => void; }) { + const website = useContext(WebsiteContext); const { domain, shareId } = website; const { formatMessage, labels, messages } = useMessages(); const [id, setId] = useState(shareId); @@ -47,7 +47,6 @@ export function ShareUrl({ const data = { shareId: checked ? generateId() : null }; mutate(data, { onSuccess: async () => { - onSave?.(); showToast({ message: formatMessage(messages.saved), variant: 'success' }); }, }); @@ -60,7 +59,7 @@ export function ShareUrl({ { onSuccess: async () => { showToast({ message: formatMessage(messages.saved), variant: 'success' }); - onSave?.(); + touch(`website:${website?.id}`); }, }, ); diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx index 5607ad23..d22c0608 100644 --- a/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx +++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx @@ -4,7 +4,7 @@ import { useRouter } from 'next/navigation'; import { useMessages } from 'components/hooks'; import WebsiteDeleteForm from './WebsiteDeleteForm'; import WebsiteResetForm from './WebsiteResetForm'; -import { touch } from 'store/cache'; +import { touch } from 'store/modified'; export function WebsiteData({ websiteId, onSave }: { websiteId: string; onSave?: () => void }) { const { formatMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteEditForm.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteEditForm.tsx index 838a6cd6..cd4fb5d7 100644 --- a/src/app/(main)/settings/websites/[websiteId]/WebsiteEditForm.tsx +++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteEditForm.tsx @@ -1,6 +1,5 @@ 'use client'; -import { Website } from '@prisma/client'; -import { useRef } from 'react'; +import { useContext, useRef } from 'react'; import { SubmitButton, Form, @@ -12,18 +11,20 @@ import { } from 'react-basics'; import { useApi, useMessages } from 'components/hooks'; import { DOMAIN_REGEX } from 'lib/constants'; +import { touch } from 'store/modified'; +import { WebsiteContext } from 'app/(main)/websites/[websiteId]/WebsiteProvider'; export function WebsiteEditForm({ - website, - onSave, + websiteId, }: { - website: Website; + websiteId: string; onSave?: (data: any) => void; }) { + const website = useContext(WebsiteContext); const { formatMessage, labels, messages } = useMessages(); const { post, useMutation } = useApi(); const { mutate, error } = useMutation({ - mutationFn: (data: any) => post(`/websites/${website.id}`, data), + mutationFn: (data: any) => post(`/websites/${websiteId}`, data), }); const ref = useRef(null); const { showToast } = useToasts(); @@ -33,7 +34,7 @@ export function WebsiteEditForm({ onSuccess: async () => { showToast({ message: formatMessage(messages.saved), variant: 'success' }); ref.current.reset(data); - onSave?.(data); + touch(`website:${website?.id}`); }, }); }; @@ -41,7 +42,7 @@ export function WebsiteEditForm({ return (
- + diff --git a/src/app/(main)/settings/websites/WebsiteSettings.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteSettings.tsx similarity index 57% rename from src/app/(main)/settings/websites/WebsiteSettings.tsx rename to src/app/(main)/settings/websites/[websiteId]/WebsiteSettings.tsx index 271ff5d2..fcb6316b 100644 --- a/src/app/(main)/settings/websites/WebsiteSettings.tsx +++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteSettings.tsx @@ -1,31 +1,23 @@ 'use client'; -import { useState, Key } from 'react'; -import { Item, Tabs, Button, Text, Icon, Loading } from 'react-basics'; +import { useState, Key, useContext } from 'react'; +import { Item, Tabs, Button, Text, Icon } from 'react-basics'; import Link from 'next/link'; import Icons from 'components/icons'; import PageHeader from 'components/layout/PageHeader'; -import WebsiteContext from 'app/(main)/websites/[websiteId]/WebsiteContext'; -import WebsiteEditForm from './[websiteId]/WebsiteEditForm'; -import WebsiteData from './[websiteId]/WebsiteData'; -import TrackingCode from './[websiteId]/TrackingCode'; -import ShareUrl from './[websiteId]/ShareUrl'; -import { useWebsite, useMessages } from 'components/hooks'; +import WebsiteEditForm from './WebsiteEditForm'; +import WebsiteData from './WebsiteData'; +import TrackingCode from './TrackingCode'; +import ShareUrl from './ShareUrl'; +import { useMessages } from 'components/hooks'; +import { WebsiteContext } from 'app/(main)/websites/[websiteId]/WebsiteProvider'; export function WebsiteSettings({ websiteId, openExternal = false }) { + const website = useContext(WebsiteContext); const { formatMessage, labels } = useMessages(); - const { data: website, isLoading, refetch } = useWebsite(websiteId); const [tab, setTab] = useState('details'); - const handleSave = () => { - refetch(); - }; - - if (isLoading) { - return ; - } - return ( - + <> }>