Skip to content

Commit 67069f9

Browse files
authored
Merge pull request #193 from gaiin-platform/feature/sharepoint
Feature/sharepoint
2 parents f4acc55 + db31f79 commit 67069f9

File tree

3 files changed

+92
-20
lines changed

3 files changed

+92
-20
lines changed

components/DataSources/DataSourceSelector.tsx

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,16 @@ export const DataSourceSelector: FC<Props> = ({ onDataSourceSelected,
5656

5757
}, [loading]);
5858

59+
const getIntegrationName = (integration: string) => {
60+
switch (integration) {
61+
case "microsoft_drive":
62+
return "OneDrive";
63+
case "microsoft_sharepoint":
64+
return "SharePoint";
65+
}
66+
return capitalize(integration.split('_')[0]);
67+
}
68+
5969
useEffect(() => {
6070
if (selectRef.current) {
6171
selectRef.current.focus();
@@ -159,7 +169,7 @@ export const DataSourceSelector: FC<Props> = ({ onDataSourceSelected,
159169
{translateIntegrationIcon(key)}
160170
</div>
161171
<div className="ml-2">
162-
{capitalize(key.split('_')[0])}
172+
{getIntegrationName(key)}
163173
</div>
164174
</div>
165175
</a>
@@ -174,6 +184,7 @@ export const DataSourceSelector: FC<Props> = ({ onDataSourceSelected,
174184
>
175185
Close
176186
</button>}
187+
<br></br>
177188

178189

179190
{/* <a href="#"*/}
@@ -260,10 +271,9 @@ export const DataSourceSelector: FC<Props> = ({ onDataSourceSelected,
260271
}}
261272
/>
262273
)}
263-
{userIntegrations &&
274+
{userIntegrations &&
264275
userIntegrations.map((key) =>
265-
selectedPage === key ?
266-
<div key={key}>
276+
<div key={key} style={{ display: selectedPage === key ? 'block' : 'none' }}>
267277
<DataSourcesTableScrollingIntegrations
268278
onDataSourceSelected={onIntegrationDataSourceSelected}
269279
disallowedFileExtensions={disallowedFileExtensions}
@@ -281,8 +291,8 @@ export const DataSourceSelector: FC<Props> = ({ onDataSourceSelected,
281291
enableHiding: false,
282292
}}
283293
enableDownload={onClose ? false : true}
284-
/>
285-
</div> : null )
294+
/>
295+
</div>)
286296
}
287297

288298
</div>

components/DataSources/DataSourcesTableScrollingIntegrations.tsx

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ const DataSourcesTableScrollingIntegrations: FC<Props> = ({ driveId,
189189
</ActionButton>
190190
{folderHistory.map((item, index) => (
191191
<React.Fragment key={item.id || index}>
192-
{/* <span className="mx-1 text-gray-500">/</span> */}
192+
<span className="mx-1 text-gray-500">/</span>
193193
<button
194194
className="cursor-pointer text-blue-500 hover:text-blue-700"
195195
onClick={(e) => {
@@ -319,13 +319,18 @@ const DataSourcesTableScrollingIntegrations: FC<Props> = ({ driveId,
319319
{isFolder ? (
320320
<div className="flex flex-row items-center gap-2">
321321
<IconFolder size={16} className="flex items-center" />
322-
<span
322+
<span
323323
className="text-gray-400 cursor-pointer hover:text-blue-500"
324324
onClick={(e) => {
325325
e.stopPropagation();
326-
const newHistory = [...folderHistory, { id: record.id, name: record.name }];
327-
setFolderHistory(newHistory);
328-
onFolderPathChange?.(newHistory);
326+
// Use functional update to avoid stale closure
327+
setFolderHistory((prevHistory) => {
328+
// console.log('Current folderHistory:', prevHistory);
329+
const newHistory = [...prevHistory, { id: record.id, name: record.name }];
330+
// console.log('New history:', newHistory);
331+
onFolderPathChange?.(newHistory);
332+
return newHistory;
333+
});
329334
setIsLoading(true);
330335
fetchFiles(record.id);
331336
}}
@@ -426,9 +431,12 @@ const DataSourcesTableScrollingIntegrations: FC<Props> = ({ driveId,
426431
const isFolder = record.mimeType.toLowerCase().includes("folder");
427432

428433
if (isFolder) {
429-
const newHistory = [...folderHistory, { id: record.id, name: record.name }];
430-
setFolderHistory(newHistory);
431-
onFolderPathChange?.(newHistory);
434+
// Use functional update to avoid stale closure
435+
setFolderHistory((prevHistory) => {
436+
const newHistory = [...prevHistory, { id: record.id, name: record.name }];
437+
onFolderPathChange?.(newHistory);
438+
return newHistory;
439+
});
432440
setIsLoading(true);
433441
fetchFiles(record.id);
434442
} else {

components/Promptbar/components/AssistantModalComponents/AssistantDriveDataSources.tsx

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { FC, useContext, useState, useEffect } from 'react';
2-
import { IconBrandGoogleDrive, IconAlertTriangle, IconFolder, IconFolders } from '@tabler/icons-react';
2+
import { IconAlertTriangle, IconFolder, IconFolders } from '@tabler/icons-react';
33
import HomeContext from '@/pages/api/home/home.context';
44
import { capitalize } from '@/utils/app/data';
55
import DataSourcesTableScrollingIntegrations from '@/components/DataSources/DataSourcesTableScrollingIntegrations';
@@ -15,6 +15,7 @@ import { getScheduledTask } from '@/services/scheduledTasksService';
1515
import { cronToDriveRescanSchedule } from '@/utils/app/scheduledTasks';
1616
import { AssistantDefinition } from '@/types/assistant';
1717
import { getDriveFileIntegrationTypes } from '@/utils/app/integrations';
18+
import { translateIntegrationIcon } from '@/components/Integrations/IntegrationsDialog';
1819

1920

2021
// Add helper function to check if there are any files selected
@@ -78,6 +79,7 @@ export const AssistantDriveDataSources: FC<Props> = ({
7879
const [supportedDriveIntegrations, setSupportedDriveIntegrations] = useState<string[] | null>(null);
7980

8081
const [selectedIntegration, setSelectedIntegration] = useState<string>('');
82+
const [selectedMicrosoftService, setSelectedMicrosoftService] = useState<'microsoft_drive' | 'microsoft_sharepoint'>('microsoft_drive');
8183
const [connectedDriveIntegrations, setConnectedDriveIntegrations] = useState<string[] | null>(null);
8284
const [currentFolderPath, setCurrentFolderPath] = useState<string[]>([]);
8385
const [currentFolderHistory, setCurrentFolderHistory] = useState<Array<{id: string | null, name: string}>>([]);
@@ -433,8 +435,13 @@ export const AssistantDriveDataSources: FC<Props> = ({
433435
}
434436

435437
const handleOnTabChange = (integrationProvider: string) => {
436-
const integration = integrationProvider.toLowerCase() + "_drive";
437-
setSelectedIntegration(integration);
438+
if (integrationProvider.toLowerCase() === 'microsoft') {
439+
// For Microsoft, use the selected service (OneDrive or SharePoint)
440+
setSelectedIntegration(selectedMicrosoftService);
441+
} else {
442+
const integration = integrationProvider.toLowerCase() + "_drive";
443+
setSelectedIntegration(integration);
444+
}
438445
}
439446

440447
// Initialize drive rescan schedule from existing scheduled tasks
@@ -496,13 +503,60 @@ export const AssistantDriveDataSources: FC<Props> = ({
496503
{renderRescanScheduler()}
497504
</div>}
498505

499-
<IntegrationTabs open={true}
506+
<IntegrationTabs open={true}
500507
onConnectedIntegrations={handleOnConnectedIntegrations}
501508
onSupportedIntegrations={handleOnSupportedIntegrations}
502509
onTabChange={handleOnTabChange}
503-
allowedIntegrations={Object.values(integrationProviders).map(provider => provider + "_drive")}
510+
allowedIntegrations={[
511+
...Object.values(integrationProviders).map(provider => provider + "_drive"),
512+
'microsoft_sharepoint' // Add SharePoint explicitly
513+
]}
504514
/>
505-
515+
516+
{/* Microsoft Service Selector - shown when Microsoft tab is active */}
517+
{selectedIntegration && (selectedIntegration.startsWith('microsoft_')) && (
518+
<div className="mb-4 px-4">
519+
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2 flex items-center gap-2">
520+
<span className="flex items-center gap-2">
521+
Select Service
522+
</span>
523+
{/* Connection status indicator */}
524+
{connectedDriveIntegrations?.includes(selectedMicrosoftService) ? (
525+
<span className="ml-auto text-xs text-green-600 dark:text-green-400 flex items-center gap-1">
526+
<span className="w-2 h-2 bg-green-500 rounded-full"></span>
527+
Connected
528+
</span>
529+
) : (
530+
<span className="ml-auto text-xs text-red-600 dark:text-red-400 flex items-center gap-1">
531+
<span className="w-2 h-2 bg-red-500 rounded-full"></span>
532+
Disconnected
533+
</span>
534+
)}
535+
</label>
536+
<div className="relative">
537+
<select
538+
value={selectedMicrosoftService}
539+
onChange={(e) => {
540+
const newService = e.target.value as 'microsoft_drive' | 'microsoft_sharepoint';
541+
setSelectedMicrosoftService(newService);
542+
setSelectedIntegration(newService);
543+
}}
544+
className="w-full p-2 pl-10 border border-gray-300 dark:border-[#454652] rounded-md bg-white dark:bg-[#40414F] text-gray-900 dark:text-white text-sm cursor-pointer"
545+
>
546+
<option value="microsoft_drive">
547+
OneDrive
548+
</option>
549+
<option value="microsoft_sharepoint">
550+
SharePoint
551+
</option>
552+
</select>
553+
<div className="absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none">
554+
{translateIntegrationIcon(selectedMicrosoftService)}
555+
</div>
556+
</div>
557+
</div>
558+
)}
559+
506560
{/* File Display */}
507561
{selectedIntegration && (
508562
<>

0 commit comments

Comments
 (0)