mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-17 18:35:19 +02:00
per-connector defaults, periodic sync, and double-trigger guard
This commit is contained in:
parent
f552a3186f
commit
f5db2184c7
2 changed files with 49 additions and 20 deletions
|
|
@ -241,22 +241,28 @@ export const COMPOSIO_TOOLKITS = [
|
||||||
},
|
},
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
// Skip IndexingConfigurationView and auto-index with defaults after OAuth
|
// Per-connector defaults for auto-indexing after OAuth (days back, days forward, periodic frequency in minutes)
|
||||||
export const AUTO_INDEX_CONNECTOR_TYPES = new Set<string>([
|
export const AUTO_INDEX_DEFAULTS: Record<string, { daysBack: number; daysForward: number; frequencyMinutes: number }> = {
|
||||||
EnumConnectorName.GOOGLE_GMAIL_CONNECTOR,
|
// Messaging — high volume, recent messages matter most
|
||||||
EnumConnectorName.GOOGLE_CALENDAR_CONNECTOR,
|
[EnumConnectorName.GOOGLE_GMAIL_CONNECTOR]: { daysBack: 30, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
EnumConnectorName.COMPOSIO_GMAIL_CONNECTOR,
|
[EnumConnectorName.COMPOSIO_GMAIL_CONNECTOR]: { daysBack: 30, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
EnumConnectorName.COMPOSIO_GOOGLE_CALENDAR_CONNECTOR,
|
[EnumConnectorName.SLACK_CONNECTOR]: { daysBack: 30, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
EnumConnectorName.AIRTABLE_CONNECTOR,
|
[EnumConnectorName.DISCORD_CONNECTOR]: { daysBack: 30, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
EnumConnectorName.NOTION_CONNECTOR,
|
[EnumConnectorName.TEAMS_CONNECTOR]: { daysBack: 30, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
EnumConnectorName.LINEAR_CONNECTOR,
|
// Calendar — past context + upcoming events
|
||||||
EnumConnectorName.SLACK_CONNECTOR,
|
[EnumConnectorName.GOOGLE_CALENDAR_CONNECTOR]: { daysBack: 90, daysForward: 90, frequencyMinutes: 1440 },
|
||||||
EnumConnectorName.TEAMS_CONNECTOR,
|
[EnumConnectorName.COMPOSIO_GOOGLE_CALENDAR_CONNECTOR]: { daysBack: 90, daysForward: 90, frequencyMinutes: 1440 },
|
||||||
EnumConnectorName.DISCORD_CONNECTOR,
|
// Project management — medium-term relevance
|
||||||
EnumConnectorName.JIRA_CONNECTOR,
|
[EnumConnectorName.LINEAR_CONNECTOR]: { daysBack: 90, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
EnumConnectorName.CONFLUENCE_CONNECTOR,
|
[EnumConnectorName.JIRA_CONNECTOR]: { daysBack: 90, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
EnumConnectorName.CLICKUP_CONNECTOR,
|
[EnumConnectorName.CLICKUP_CONNECTOR]: { daysBack: 90, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
]);
|
// Knowledge bases — evergreen content
|
||||||
|
[EnumConnectorName.NOTION_CONNECTOR]: { daysBack: 365, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
|
[EnumConnectorName.CONFLUENCE_CONNECTOR]: { daysBack: 365, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
|
[EnumConnectorName.AIRTABLE_CONNECTOR]: { daysBack: 365, daysForward: 0, frequencyMinutes: 1440 },
|
||||||
|
};
|
||||||
|
|
||||||
|
export const AUTO_INDEX_CONNECTOR_TYPES = new Set<string>(Object.keys(AUTO_INDEX_DEFAULTS));
|
||||||
|
|
||||||
// Re-export IndexingConfigState from schemas for backward compatibility
|
// Re-export IndexingConfigState from schemas for backward compatibility
|
||||||
export type { IndexingConfigState } from "./connector-popup.schemas";
|
export type { IndexingConfigState } from "./connector-popup.schemas";
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ import { queryClient } from "@/lib/query-client/client";
|
||||||
import type { IndexingConfigState } from "../constants/connector-constants";
|
import type { IndexingConfigState } from "../constants/connector-constants";
|
||||||
import {
|
import {
|
||||||
AUTO_INDEX_CONNECTOR_TYPES,
|
AUTO_INDEX_CONNECTOR_TYPES,
|
||||||
|
AUTO_INDEX_DEFAULTS,
|
||||||
COMPOSIO_CONNECTORS,
|
COMPOSIO_CONNECTORS,
|
||||||
OAUTH_CONNECTORS,
|
OAUTH_CONNECTORS,
|
||||||
OTHER_CONNECTORS,
|
OTHER_CONNECTORS,
|
||||||
|
|
@ -81,6 +82,7 @@ export const useConnectorDialog = () => {
|
||||||
const [connectingConnectorType, setConnectingConnectorType] = useState<string | null>(null);
|
const [connectingConnectorType, setConnectingConnectorType] = useState<string | null>(null);
|
||||||
const [isCreatingConnector, setIsCreatingConnector] = useState(false);
|
const [isCreatingConnector, setIsCreatingConnector] = useState(false);
|
||||||
const isCreatingConnectorRef = useRef(false);
|
const isCreatingConnectorRef = useRef(false);
|
||||||
|
const isAutoIndexingRef = useRef(false);
|
||||||
|
|
||||||
// Accounts list view state (for OAuth connectors with multiple accounts)
|
// Accounts list view state (for OAuth connectors with multiple accounts)
|
||||||
const [viewingAccountsType, setViewingAccountsType] = useState<{
|
const [viewingAccountsType, setViewingAccountsType] = useState<{
|
||||||
|
|
@ -126,20 +128,40 @@ export const useConnectorDialog = () => {
|
||||||
connectorTitle: string,
|
connectorTitle: string,
|
||||||
connectorType: string
|
connectorType: string
|
||||||
) => {
|
) => {
|
||||||
if (!searchSpaceId) return;
|
if (!searchSpaceId || isAutoIndexingRef.current) return;
|
||||||
|
isAutoIndexingRef.current = true;
|
||||||
|
|
||||||
|
const defaults = AUTO_INDEX_DEFAULTS[connectorType];
|
||||||
|
const now = new Date();
|
||||||
|
const startDate = new Date(now);
|
||||||
|
startDate.setDate(startDate.getDate() - (defaults?.daysBack ?? 365));
|
||||||
|
const endDate = new Date(now);
|
||||||
|
endDate.setDate(endDate.getDate() + (defaults?.daysForward ?? 0));
|
||||||
|
|
||||||
setIsOpen(true);
|
setIsOpen(true);
|
||||||
try {
|
try {
|
||||||
|
await updateConnector({
|
||||||
|
id: connector.id,
|
||||||
|
data: {
|
||||||
|
periodic_indexing_enabled: true,
|
||||||
|
indexing_frequency_minutes: defaults?.frequencyMinutes ?? 1440,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
await indexConnector({
|
await indexConnector({
|
||||||
connector_id: connector.id,
|
connector_id: connector.id,
|
||||||
queryParams: { search_space_id: searchSpaceId },
|
queryParams: {
|
||||||
|
search_space_id: searchSpaceId,
|
||||||
|
start_date: format(startDate, "yyyy-MM-dd"),
|
||||||
|
end_date: format(endDate, "yyyy-MM-dd"),
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
trackIndexWithDateRangeStarted(
|
trackIndexWithDateRangeStarted(
|
||||||
Number(searchSpaceId),
|
Number(searchSpaceId),
|
||||||
connectorType,
|
connectorType,
|
||||||
connector.id,
|
connector.id,
|
||||||
{ hasStartDate: false, hasEndDate: false }
|
{ hasStartDate: true, hasEndDate: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
toast.success(`${connectorTitle} connected!`, {
|
toast.success(`${connectorTitle} connected!`, {
|
||||||
|
|
@ -166,8 +188,9 @@ export const useConnectorDialog = () => {
|
||||||
queryKey: cacheKeys.logs.summary(Number(searchSpaceId)),
|
queryKey: cacheKeys.logs.summary(Number(searchSpaceId)),
|
||||||
});
|
});
|
||||||
await refetchAllConnectors();
|
await refetchAllConnectors();
|
||||||
|
isAutoIndexingRef.current = false;
|
||||||
},
|
},
|
||||||
[searchSpaceId, indexConnector, refetchAllConnectors, setIsOpen, router]
|
[searchSpaceId, indexConnector, updateConnector, refetchAllConnectors, setIsOpen, router]
|
||||||
);
|
);
|
||||||
|
|
||||||
// Synchronize state with URL query params
|
// Synchronize state with URL query params
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue