Please can you examine the code below and explain exactly when the router.refresh() is happening? I'm using the nextjs App router that was released with version 13 - not the pages router. This is a client component that exists within a server component. The server component is /topic/[topicPage]/page.tsx.
// components/AddResourceButton.tsx
'use client'
import React, { useState } from 'react';
import { BiPlus } from "react-icons/bi";
import AddResourceForm from '@/components/AddResourceForm';
import { useRouter } from 'next/navigation';
interface AddResourceButtonProps {
topicId: string;
}
const AddResourceButton: React.FC<AddResourceButtonProps> = ({ topicId }) => {
const [isFormVisible, setIsFormVisible] = useState(false);
const [resources, setResources] = useState([]);
const router = useRouter();
const fetchResources = async () => {
const res = await fetch(${process.env.NEXT_PUBLIC_API_BASE_URL}/topics/${topicId}/resources);
const data = await res.json();
setResources(data);
};
const handleFormSuccess = async () => {
setIsFormVisible(false);
await fetchResources();
router.refresh();
// Optionally refresh resources or show success message
};
return (
<>
{!isFormVisible && ( // This line controls the visibility of the button
<button
onClick={() => setIsFormVisible(true)}
className="flex items-center justify-center w-full bg-primary-600 text-text-50 font-semibold py-1 px-2 rounded-full hover:bg-primary-700 transition duration-300 ease-in-out focus:outline-none focus:shadow-outline"
>
<BiPlus className="mr-1 h-5 w-5" aria-hidden="true"/>
Add a Resource
</button>
)}
{isFormVisible && <AddResourceForm topicId={topicId} userId="7bf0931d-69f6-4a1b-ab94-80b25c0f10ec" onSuccess={handleFormSuccess} />}
</>
);
};
export default AddResourceButton;