import { Box, Button, Icon, Throbber } from '@rocket.chat/fuselage';
import { useSafely } from '@rocket.chat/fuselage-hooks';
import React, { useCallback, useState, memo } from 'react';
import { useTranslation } from '../../contexts/TranslationContext';
import { appButtonProps, appStatusSpanProps, handleAPIError, warnStatusChange } from './helpers';
import { Apps } from '../../../app/apps/client/orchestrator';
import { IframeModal } from './IframeModal';
import { CloudLoginModal } from './CloudLoginModal';
import { useSetModal } from '../../contexts/ModalContext';
import { useMethod } from '../../contexts/ServerContext';
const installApp = async ({ id, name, version }) => {
try {
const { status } = await Apps.installApp(id, version);
warnStatusChange(name, status);
} catch (error) {
handleAPIError(error);
}
};
const actions = {
purchase: installApp,
install: installApp,
update: async ({ id, name, version }) => {
try {
const { status } = await Apps.updateApp(id, version);
warnStatusChange(name, status);
} catch (error) {
handleAPIError(error);
}
},
};
const AppStatus = memo(({ app, showStatus = true, ...props }) => {
const t = useTranslation();
const [loading, setLoading] = useSafely(useState());
const setModal = useSetModal();
const button = appButtonProps(app);
const status = !button && appStatusSpanProps(app);
const action = button?.action || '';
const confirmAction = useCallback(() => {
setModal(null);
actions[action](app).then(() => {
setLoading(false);
});
}, [setModal, action, app, setLoading]);
const cancelAction = useCallback(() => {
setLoading(false);
setModal(null);
}, [setLoading, setModal]);
const checkUserLoggedIn = useMethod('cloud:checkUserLoggedIn');
const handleClick = useCallback(async (e) => {
e.preventDefault();
e.stopPropagation();
setLoading(true);
const isLoggedIn = await checkUserLoggedIn();
if (!isLoggedIn) {
setLoading(false);
setModal();
return;
}
if (action === 'purchase') {
try {
const data = await Apps.buildExternalUrl(app.id, app.purchaseType, false);
setModal();
} catch (error) {
handleAPIError(error);
}
return;
}
confirmAction();
}, [setLoading, checkUserLoggedIn, action, confirmAction, setModal, app.id, app.purchaseType, cancelAction]);
return
{button && }
{status &&
{t(status.label)}
}
;
});
export default AppStatus;