back button + popups (#2707)

* back button + popups

* remove logs
This commit is contained in:
pablodanswer
2024-10-07 13:10:58 -07:00
committed by GitHub
parent 3404c7eb1d
commit 150dcc2883
8 changed files with 73 additions and 27 deletions

View File

@@ -106,6 +106,7 @@ export function AssistantEditor({
admin?: boolean; admin?: boolean;
}) { }) {
const router = useRouter(); const router = useRouter();
const { popup, setPopup } = usePopup(); const { popup, setPopup } = usePopup();
const colorOptions = [ const colorOptions = [

View File

@@ -19,7 +19,9 @@ export interface EmbeddingDetails {
default_model_id?: number; default_model_id?: number;
name: string; name: string;
} }
import { EmbeddingIcon } from "@/components/icons/icons"; import { EmbeddingIcon } from "@/components/icons/icons";
import { usePopupFromQuery } from "@/components/popup/PopupFromQuery";
import Link from "next/link"; import Link from "next/link";
import { SavedSearchSettings } from "../../embeddings/interfaces"; import { SavedSearchSettings } from "../../embeddings/interfaces";
@@ -29,6 +31,12 @@ import { SettingsContext } from "@/components/settings/SettingsProvider";
function Main() { function Main() {
const settings = useContext(SettingsContext); const settings = useContext(SettingsContext);
const { popup: searchSettingsPopup } = usePopupFromQuery({
"search-settings": {
message: `Changed search settings successfully`,
type: "success",
},
});
const { const {
data: currentEmeddingModel, data: currentEmeddingModel,
isLoading: isLoadingCurrentModel, isLoading: isLoadingCurrentModel,
@@ -74,6 +82,7 @@ function Main() {
return ( return (
<div className="h-screen"> <div className="h-screen">
{searchSettingsPopup}
{!futureEmbeddingModel ? ( {!futureEmbeddingModel ? (
<> <>
{settings?.settings.needs_reindexing && ( {settings?.settings.needs_reindexing && (

View File

@@ -41,7 +41,7 @@ import { Formik } from "formik";
import { AccessTypeForm } from "@/components/admin/connectors/AccessTypeForm"; import { AccessTypeForm } from "@/components/admin/connectors/AccessTypeForm";
import { AccessTypeGroupSelector } from "@/components/admin/connectors/AccessTypeGroupSelector"; import { AccessTypeGroupSelector } from "@/components/admin/connectors/AccessTypeGroupSelector";
import NavigationRow from "./NavigationRow"; import NavigationRow from "./NavigationRow";
import { useRouter } from "next/navigation";
export interface AdvancedConfig { export interface AdvancedConfig {
refreshFreq: number; refreshFreq: number;
pruneFreq: number; pruneFreq: number;
@@ -111,6 +111,8 @@ export default function AddConnector({
}: { }: {
connector: ConfigurableSources; connector: ConfigurableSources;
}) { }) {
const router = useRouter();
// State for managing credentials and files // State for managing credentials and files
const [currentCredential, setCurrentCredential] = const [currentCredential, setCurrentCredential] =
useState<Credential<any> | null>(null); useState<Credential<any> | null>(null);
@@ -201,13 +203,7 @@ export default function AddConnector({
}; };
const onSuccess = () => { const onSuccess = () => {
setPopup({ router.push("/admin/indexing/status?message=connector-created");
message: "Connector created! Redirecting to connector home page",
type: "success",
});
setTimeout(() => {
window.open("/admin/indexing/status", "_self");
}, 1000);
}; };
return ( return (

View File

@@ -25,9 +25,11 @@ import RerankingDetailsForm from "../RerankingFormPage";
import { useEmbeddingFormContext } from "@/components/context/EmbeddingContext"; import { useEmbeddingFormContext } from "@/components/context/EmbeddingContext";
import { Modal } from "@/components/Modal"; import { Modal } from "@/components/Modal";
import { useRouter } from "next/navigation";
export default function EmbeddingForm() { export default function EmbeddingForm() {
const { formStep, nextFormStep, prevFormStep } = useEmbeddingFormContext(); const { formStep, nextFormStep, prevFormStep } = useEmbeddingFormContext();
const { popup, setPopup } = usePopup(); const { popup, setPopup } = usePopup();
const router = useRouter();
const [advancedEmbeddingDetails, setAdvancedEmbeddingDetails] = const [advancedEmbeddingDetails, setAdvancedEmbeddingDetails] =
useState<AdvancedSearchConfiguration>({ useState<AdvancedSearchConfiguration>({
@@ -172,10 +174,6 @@ export default function EmbeddingForm() {
const response = await updateSearchSettings(values); const response = await updateSearchSettings(values);
if (response.ok) { if (response.ok) {
setPopup({
message: "Updated search settings successfully",
type: "success",
});
return true; return true;
} else { } else {
setPopup({ message: "Failed to update search settings", type: "error" }); setPopup({ message: "Failed to update search settings", type: "error" });
@@ -184,14 +182,7 @@ export default function EmbeddingForm() {
}; };
const navigateToEmbeddingPage = (changedResource: string) => { const navigateToEmbeddingPage = (changedResource: string) => {
setPopup({ router.push("/admin/configuration/search?message=search-settings");
message: `Changed ${changedResource} successfully. Redirecting to embedding page`,
type: "success",
});
setTimeout(() => {
window.open("/admin/configuration/search", "_self");
}, 2000);
}; };
const onConfirm = async () => { const onConfirm = async () => {

View File

@@ -11,8 +11,15 @@ import { AdminPageTitle } from "@/components/admin/Title";
import Link from "next/link"; import Link from "next/link";
import { Button, Text } from "@tremor/react"; import { Button, Text } from "@tremor/react";
import { useConnectorCredentialIndexingStatus } from "@/lib/hooks"; import { useConnectorCredentialIndexingStatus } from "@/lib/hooks";
import { usePopupFromQuery } from "@/components/popup/PopupFromQuery";
function Main() { function Main() {
const { popup } = usePopupFromQuery({
"connector-created": {
message: "Connector created successfully",
type: "success",
},
});
const { const {
data: indexAttemptData, data: indexAttemptData,
isLoading: indexAttemptIsLoading, isLoading: indexAttemptIsLoading,
@@ -67,10 +74,13 @@ function Main() {
}); });
return ( return (
<CCPairIndexingStatusTable <>
ccPairsIndexingStatuses={indexAttemptData} {popup}
editableCcPairsIndexingStatuses={editableIndexAttemptData} <CCPairIndexingStatusTable
/> ccPairsIndexingStatuses={indexAttemptData}
editableCcPairsIndexingStatuses={editableIndexAttemptData}
/>
</>
); );
} }

View File

@@ -57,9 +57,15 @@ export const EmbeddingFormProvider: React.FC<{
useEffect(() => { useEffect(() => {
// Update URL when formStep changes // Update URL when formStep changes
const updatedSearchParams = new URLSearchParams(searchParams.toString()); const updatedSearchParams = new URLSearchParams(searchParams.toString());
const existingStep = updatedSearchParams.get("step");
updatedSearchParams.set("step", formStep.toString()); updatedSearchParams.set("step", formStep.toString());
const newUrl = `${pathname}?${updatedSearchParams.toString()}`; const newUrl = `${pathname}?${updatedSearchParams.toString()}`;
router.push(newUrl);
if (!existingStep) {
router.replace(newUrl);
} else if (newUrl !== pathname) {
router.push(newUrl);
}
}, [formStep, router, pathname, searchParams]); }, [formStep, router, pathname, searchParams]);
// Update formStep when URL changes // Update formStep when URL changes

View File

@@ -57,12 +57,17 @@ export const FormProvider: React.FC<{
useEffect(() => { useEffect(() => {
// Update URL when formStep changes // Update URL when formStep changes
const updatedSearchParams = new URLSearchParams(searchParams.toString()); const updatedSearchParams = new URLSearchParams(searchParams.toString());
const existingStep = updatedSearchParams.get("step");
updatedSearchParams.set("step", formStep.toString()); updatedSearchParams.set("step", formStep.toString());
const newUrl = `${pathname}?${updatedSearchParams.toString()}`; const newUrl = `${pathname}?${updatedSearchParams.toString()}`;
router.push(newUrl);
if (!existingStep) {
router.replace(newUrl);
} else if (newUrl !== pathname) {
router.push(newUrl);
}
}, [formStep, router, pathname, searchParams]); }, [formStep, router, pathname, searchParams]);
// Update formStep when URL changes
useEffect(() => { useEffect(() => {
const stepFromUrl = parseInt(searchParams.get("step") || "0", 10); const stepFromUrl = parseInt(searchParams.get("step") || "0", 10);
if (stepFromUrl !== formStep) { if (stepFromUrl !== formStep) {

View File

@@ -0,0 +1,28 @@
import { useEffect } from "react";
import { usePopup } from "../admin/connectors/Popup";
import { PopupSpec } from "../admin/connectors/Popup";
import { useRouter } from "next/navigation";
interface PopupMessages {
[key: string]: PopupSpec;
}
export const usePopupFromQuery = (messages: PopupMessages) => {
const router = useRouter();
const { popup, setPopup } = usePopup();
useEffect(() => {
const searchParams = new URLSearchParams(window.location.search);
// Get the value for search param with key "message"
const messageValue = searchParams.get("message");
// Check if any key from messages object is present in search params
if (messageValue && messageValue in messages) {
const popupMessage = messages[messageValue];
router.replace(window.location.pathname);
setPopup(popupMessage);
}
}, []);
return { popup };
};