import * as React from 'react'; import get from 'lodash/get'; import Avatar from '@wcpos/components/src/avatar'; import Box from '@wcpos/components/src/box'; import Dialog from '@wcpos/components/src/dialog'; import ErrorBoundary from '@wcpos/components/src/error-boundary'; import Icon from '@wcpos/components/src/icon'; import Suspense from '@wcpos/components/src/suspense'; import Text from '@wcpos/components/src/text'; import useHttpClient from '@wcpos/hooks/src/use-http-client'; import { WPUsers } from './wp-users'; import { useT } from '../../../contexts/translations'; import { useVersionCheck } from '../../../hooks/use-version-check'; interface Props { user: import('@wcpos/database').UserDocument; site: import('@wcpos/database').SiteDocument; idx: number; } /** * */ function getUrlWithoutProtocol(url: string) { return url?.replace(/^.*:\/{2,}|\s|\/+$/g, '') || ''; } /** * */ export const Site = ({ user, site, idx }: Props) => { const [deleteDialogOpened, setDeleteDialogOpened] = React.useState(false); const t = useT(); const { wcposVersionPass } = useVersionCheck({ site }); const http = useHttpClient(); /** * A bit of a hack to get the latest site info */ React.useEffect(() => { const fetchSiteInfo = async () => { const response = await http.get(site.wp_api_url, { params: { wcpos: 1 } }); const data = get(response, 'data', {}); site.incrementalPatch({ wp_version: data?.wp_version, wc_version: data?.wc_version, wcpos_version: data?.wcpos_version, wcpos_pro_version: data?.wcpos_pro_version, license: data?.license || {}, }); }; fetchSiteInfo(); }, []); /** * Remove site */ const handleRemoveSite = React.useCallback(async () => { try { const latest = site.getLatest(); await latest.remove(); await user.incrementalUpdate({ $pullAll: { sites: [latest.uuid], }, }); } catch (err) { throw err; } }, [site, user]); return ( <> {site.name} {site.url} {wcposVersionPass ? ( ) : ( {t('Please update your WooCommerce POS plugin')} )} setDeleteDialogOpened(true)} /> setDeleteDialogOpened(false)} > {t('Remove store and associated users?', { _tags: 'core' })} ); };