import { DefaultButton, Pivot, PivotItem, Stack } from "@fluentui/react"; import { FullTextPolicy, VectorEmbedding, VectorEmbeddingPolicy } from "Contracts/DataModels"; import { FullTextPoliciesComponent, getFullTextLanguageOptions, } from "Explorer/Controls/FullTextSeach/FullTextPoliciesComponent"; import { titleAndInputStackProps } from "Explorer/Controls/Settings/SettingsRenderUtils"; import { ContainerPolicyTabTypes, isDirty } from "Explorer/Controls/Settings/SettingsUtils"; import { VectorEmbeddingPoliciesComponent } from "Explorer/Controls/VectorSearch/VectorEmbeddingPoliciesComponent"; import React from "react"; export interface ContainerPolicyComponentProps { vectorEmbeddingPolicy: VectorEmbeddingPolicy; vectorEmbeddingPolicyBaseline: VectorEmbeddingPolicy; onVectorEmbeddingPolicyChange: (newVectorEmbeddingPolicy: VectorEmbeddingPolicy) => void; onVectorEmbeddingPolicyDirtyChange: (isVectorEmbeddingPolicyDirty: boolean) => void; isVectorSearchEnabled: boolean; fullTextPolicy: FullTextPolicy; fullTextPolicyBaseline: FullTextPolicy; onFullTextPolicyChange: (newFullTextPolicy: FullTextPolicy) => void; onFullTextPolicyDirtyChange: (isFullTextPolicyDirty: boolean) => void; isFullTextSearchEnabled: boolean; shouldDiscardContainerPolicies: boolean; resetShouldDiscardContainerPolicyChange: () => void; isGlobalSecondaryIndex?: boolean; } export const ContainerPolicyComponent: React.FC = ({ vectorEmbeddingPolicy, vectorEmbeddingPolicyBaseline, onVectorEmbeddingPolicyChange, onVectorEmbeddingPolicyDirtyChange, isVectorSearchEnabled, fullTextPolicy, fullTextPolicyBaseline, onFullTextPolicyChange, onFullTextPolicyDirtyChange, isFullTextSearchEnabled, shouldDiscardContainerPolicies, resetShouldDiscardContainerPolicyChange, }) => { const [selectedTab, setSelectedTab] = React.useState( ContainerPolicyTabTypes.VectorPolicyTab, ); const [vectorEmbeddings, setVectorEmbeddings] = React.useState(); const [vectorEmbeddingsBaseline, setVectorEmbeddingsBaseline] = React.useState(); const [discardVectorChanges, setDiscardVectorChanges] = React.useState(false); const [fullTextSearchPolicy, setFullTextSearchPolicy] = React.useState(); const [fullTextSearchPolicyBaseline, setFullTextSearchPolicyBaseline] = React.useState(); const [discardFullTextChanges, setDiscardFullTextChanges] = React.useState(false); React.useEffect(() => { setVectorEmbeddings(vectorEmbeddingPolicy?.vectorEmbeddings); setVectorEmbeddingsBaseline(vectorEmbeddingPolicyBaseline?.vectorEmbeddings); }, [vectorEmbeddingPolicy]); React.useEffect(() => { setFullTextSearchPolicy(fullTextPolicy); setFullTextSearchPolicyBaseline(fullTextPolicyBaseline); }, [fullTextPolicy, fullTextPolicyBaseline]); React.useEffect(() => { if (shouldDiscardContainerPolicies) { setVectorEmbeddings(vectorEmbeddingPolicyBaseline?.vectorEmbeddings); setDiscardVectorChanges(true); setFullTextSearchPolicy(fullTextPolicyBaseline); setDiscardFullTextChanges(true); resetShouldDiscardContainerPolicyChange(); } }); const checkAndSendVectorEmbeddingPoliciesToSettings = (newVectorEmbeddings: VectorEmbedding[]): void => { if (isDirty(newVectorEmbeddings, vectorEmbeddingsBaseline)) { onVectorEmbeddingPolicyDirtyChange(true); onVectorEmbeddingPolicyChange({ vectorEmbeddings: newVectorEmbeddings }); } else { resetShouldDiscardContainerPolicyChange(); } }; const checkAndSendFullTextPolicyToSettings = (newFullTextPolicy: FullTextPolicy): void => { if (isDirty(newFullTextPolicy, fullTextSearchPolicyBaseline)) { onFullTextPolicyDirtyChange(true); onFullTextPolicyChange(newFullTextPolicy); } else { resetShouldDiscardContainerPolicyChange(); } }; const onVectorChangesDiscarded = (): void => { setDiscardVectorChanges(false); }; const onFullTextChangesDiscarded = (): void => { setDiscardFullTextChanges(false); }; const onPivotChange = (item: PivotItem): void => { const selectedTab = ContainerPolicyTabTypes[item.props.itemKey as keyof typeof ContainerPolicyTabTypes]; setSelectedTab(selectedTab); }; return (
{isVectorSearchEnabled && ( {vectorEmbeddings && ( checkAndSendVectorEmbeddingPoliciesToSettings(vectorEmbeddings) } discardChanges={discardVectorChanges} onChangesDiscarded={onVectorChangesDiscarded} /> )} )} {isFullTextSearchEnabled && ( {fullTextSearchPolicy ? ( checkAndSendFullTextPolicyToSettings(newFullTextPolicy) } discardChanges={discardFullTextChanges} onChangesDiscarded={onFullTextChangesDiscarded} /> ) : ( { checkAndSendFullTextPolicyToSettings({ defaultLanguage: getFullTextLanguageOptions()[0].key as never, fullTextPaths: [], }); }} > Create new full text search policy )} )}
); };