import { useCallback, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import getMeta from '@/utils/meta' import { getJSON, postJSON } from '@/infrastructure/fetch-json' import useAsync from '@/shared/hooks/use-async' import { debugConsole } from '@/utils/debugging' import OLButton from '@/shared/components/ol/ol-button' import { OLModal, OLModalBody, OLModalFooter, OLModalHeader, OLModalTitle, } from '@/shared/components/ol/ol-modal' import Notification from '@/shared/components/notification' import GitLabLogo from '@/shared/svgs/gitlab-logo' export const GitLabSyncWidget = function GitLabSyncWidget() { const { t } = useTranslation() const { appName } = getMeta('ol-ExposedSettings') const { isLoading: isCheckingConn, isError: isErrorConnCheck, runAsync: runAsyncConnCheck, data: isConnected, setData: setConnState, } = useAsync() const { isLoading: isUnlinking, isError: isErrorUnlink, runAsync: runAsyncUnlink, } = useAsync() const [showUnlinkModal, setShowUnlinkModal] = useState(false) const handleConnCheck = useCallback(() => { runAsyncConnCheck(getJSON('/user/gitlab-sync/status')).catch(err => debugConsole.error(err?.data?.message || err?.message || err), ) }, [runAsyncConnCheck]) useEffect(() => { handleConnCheck() }, [handleConnCheck]) const handleUnlink = useCallback(() => { runAsyncUnlink(postJSON('/user/gitlab-sync/unlink')) .then(() => setConnState(false)) .catch(err => debugConsole.error(err?.data?.message || err?.message || err)) .finally(() => setShowUnlinkModal(false)) }, [runAsyncUnlink]) if (isCheckingConn) { return (

GitLab

{t('loading')}…

) } return ( <>

GitLab

{t('gitlab_sync_description', { appName })}

{isErrorConnCheck && ( )} {isErrorUnlink && ( )}
{isConnected ? ( setShowUnlinkModal(true)} disabled={isUnlinking} > {isUnlinking ? t('unlinking') : t('unlink')} ) : isErrorConnCheck ? ( {t('reconnect')} ) : ( {t('link')} )}
setShowUnlinkModal(false)} backdrop="static" > {t('unlink_provider_account_title', { provider: 'GitLab', })}

{t('unlink_gitlab_warning', { provider: 'GitLab', })}

setShowUnlinkModal(false)} > {t('cancel')} {isUnlinking ? t('unlinking') : t('unlink')}
) }