diff --git a/ondeck/src/app/api/admin/shape-import/browse/route.ts b/ondeck/src/app/api/admin/shape-import/browse/route.ts index 8224031..cbb5eb7 100644 --- a/ondeck/src/app/api/admin/shape-import/browse/route.ts +++ b/ondeck/src/app/api/admin/shape-import/browse/route.ts @@ -25,6 +25,14 @@ async function graphGet(token: string, url: string) { return res.json() } +// Fixed to the Seubert Commercial SharePoint site +const COMMERCIAL_SITE_URL = 'seubert365.sharepoint.com:/sites/Commercial' + +async function getCommercialSiteId(token: string): Promise { + const data = await graphGet(token, `https://graph.microsoft.com/v1.0/sites/${COMMERCIAL_SITE_URL}?$select=id`) + return data.id +} + export async function GET(req: NextRequest) { const session = await getServerSession(authOptions) if (!session?.user) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) @@ -32,27 +40,15 @@ export async function GET(req: NextRequest) { if (!roles.includes('Admin')) return NextResponse.json({ error: 'Forbidden' }, { status: 403 }) const { searchParams } = req.nextUrl - const level = searchParams.get('level') ?? 'sites' // sites | drives | folders - const siteId = searchParams.get('siteId') ?? '' + const level = searchParams.get('level') ?? 'drives' // drives | folders const driveId = searchParams.get('driveId') ?? '' const itemId = searchParams.get('itemId') ?? '' // folder item id, empty = root try { const token = await getGraphToken() - if (level === 'sites') { - // List all SharePoint sites the app has access to - const data = await graphGet(token, 'https://graph.microsoft.com/v1.0/sites?search=*&$top=50&$select=id,displayName,webUrl') - const sites = (data.value ?? []).map((s: any) => ({ - id: s.id, - name: s.displayName, - url: s.webUrl, - })) - return NextResponse.json({ sites }) - } - if (level === 'drives') { - if (!siteId) return NextResponse.json({ error: 'siteId required' }, { status: 400 }) + const siteId = await getCommercialSiteId(token) const data = await graphGet(token, `https://graph.microsoft.com/v1.0/sites/${siteId}/drives?$select=id,name,driveType`) const drives = (data.value ?? []).map((d: any) => ({ id: d.id, diff --git a/ondeck/src/components/admin/shape-import-panel.tsx b/ondeck/src/components/admin/shape-import-panel.tsx index 7796d24..295c62f 100644 --- a/ondeck/src/components/admin/shape-import-panel.tsx +++ b/ondeck/src/components/admin/shape-import-panel.tsx @@ -35,7 +35,6 @@ import { const DEFAULT_DRIVE_ID = 'b!OYuzIexQkkOvfEPyMJPzzZHfzTrOCOdPhTWgTlzKs6M0ZWVrAc6LR4LjWl4QFEzm' const DEFAULT_FOLDER_PATH = 'Claims/SHAPE Accounts' -interface SpSite { id: string; name: string; url: string } interface SpDrive { id: string; name: string; type: string } interface SpFolder { id: string; name: string } @@ -75,14 +74,11 @@ export function ShapeImportPanel({ initialRuns }: { initialRuns: Run[] }) { const [runs, setRuns] = useState(initialRuns) // SharePoint picker state - const [sites, setSites] = useState([]) const [drives, setDrives] = useState([]) const [folders, setFolders] = useState([]) - const [selectedSiteId, setSelectedSiteId] = useState('') const [selectedDriveId, setSelectedDriveId] = useState(DEFAULT_DRIVE_ID) const [selectedFolderId, setSelectedFolderId] = useState('') const [folderPath, setFolderPath] = useState(DEFAULT_FOLDER_PATH) - const [loadingSites, setLoadingSites] = useState(false) const [loadingDrives, setLoadingDrives] = useState(false) const [loadingFolders, setLoadingFolders] = useState(false) const [pickerError, setPickerError] = useState(null) @@ -170,34 +166,16 @@ export function ShapeImportPanel({ initialRuns }: { initialRuns: Run[] }) { useEffect(() => () => stopPolling(), [stopPolling]) - // Load sites on mount + // Load document libraries on mount (site is fixed to Commercial) useEffect(() => { - setLoadingSites(true) - setPickerError(null) - fetch('/api/admin/shape-import/browse?level=sites') - .then((r) => r.json()) - .then((d) => { if (d.sites) setSites(d.sites); else setPickerError(d.error ?? 'Failed to load sites') }) - .catch((e) => setPickerError(e.message)) - .finally(() => setLoadingSites(false)) - }, []) - - const handleSiteChange = async (siteId: string) => { - setSelectedSiteId(siteId) - setSelectedDriveId('') - setSelectedFolderId('') - setFolderPath(DEFAULT_FOLDER_PATH) - setDrives([]) - setFolders([]) setLoadingDrives(true) setPickerError(null) - try { - const res = await fetch(`/api/admin/shape-import/browse?level=drives&siteId=${encodeURIComponent(siteId)}`) - const d = await res.json() - if (d.drives) setDrives(d.drives) - else setPickerError(d.error ?? 'Failed to load drives') - } catch (e: any) { setPickerError(e.message) } - finally { setLoadingDrives(false) } - } + fetch('/api/admin/shape-import/browse?level=drives') + .then((r) => r.json()) + .then((d) => { if (d.drives) setDrives(d.drives); else setPickerError(d.error ?? 'Failed to load document libraries') }) + .catch((e) => setPickerError(e.message)) + .finally(() => setLoadingDrives(false)) + }, []) const handleDriveChange = async (driveId: string) => { setSelectedDriveId(driveId) @@ -301,29 +279,8 @@ export function ShapeImportPanel({ initialRuns }: { initialRuns: Run[] }) { )} - {/* Site */} -
- - +
+ Site: seubert365.sharepoint.com/sites/Commercial
{/* Document library (drive) */} @@ -332,7 +289,7 @@ export function ShapeImportPanel({ initialRuns }: { initialRuns: Run[] }) {