Adds a "Git Sync" section in the Integrations rail panel that lets project owners configure an HTTPS remote URL (with embedded auth token) and force-push all project files as a single commit. Backend: - GitSyncHandler: assembles project docs + binary files into a temp dir, runs git init/commit/push --force, then cleans up - GitSyncController: GET/POST /project/:id/git-sync (configure), POST /project/:id/git-sync/push (trigger) - Project model: gitRemote field - Dockerfile: ensures git is present at runtime - Env flag: OVERLEAF_ENABLE_GIT_SYNC=true (set in k8s manifest) Frontend: - GitSyncWidget: URL input + Save + Push Now buttons, success/error feedback - Integrations panel: shows widget when gitSyncEnabled - Rail: shows Integrations tab when gitSyncEnabled (was only gitBridgeEnabled) - i18n: en + fr translations Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
28 lines
927 B
TypeScript
28 lines
927 B
TypeScript
import { ElementType } from 'react'
|
|
import importOverleafModules from '../../../macros/import-overleaf-module.macro'
|
|
import { useTranslation } from 'react-i18next'
|
|
import RailPanelHeader from '@/features/ide-react/components/rail/rail-panel-header'
|
|
import getMeta from '@/utils/meta'
|
|
import GitSyncWidget from './git-sync-widget'
|
|
|
|
const integrationPanelComponents = importOverleafModules(
|
|
'integrationPanelComponents'
|
|
) as { import: { default: ElementType }; path: string }[]
|
|
|
|
export default function IntegrationsPanel() {
|
|
const { t } = useTranslation()
|
|
const gitSyncEnabled = getMeta('ol-gitSyncEnabled')
|
|
|
|
return (
|
|
<div className="integrations-panel">
|
|
<RailPanelHeader title={t('integrations')} />
|
|
{gitSyncEnabled && <GitSyncWidget />}
|
|
{integrationPanelComponents.map(
|
|
({ import: { default: Component }, path }) => (
|
|
<Component key={path} />
|
|
)
|
|
)}
|
|
</div>
|
|
)
|
|
}
|