import * as React from 'react';
import { useObservableSuspense } from 'observable-hooks';
import Dialog from '@wcpos/components/src/dialog';
import Modal from '@wcpos/components/src/modal';
import Pill from '@wcpos/components/src/pill';
import useSnackbar from '@wcpos/components/src/snackbar';
import StoreSelect from './store-select';
import { useAppState } from '../../../contexts/app-state';
import { useT } from '../../../contexts/translations';
interface Props {
site: import('@wcpos/database').SiteDocument;
wpUser: import('@wcpos/database').WPCredentialsDocument;
}
const WpUser = ({ site, wpUser }: Props) => {
const { login } = useAppState();
const [deleteDialogOpened, setDeleteDialogOpened] = React.useState(false);
const [storeSelectModalOpened, setStoreSelectModalOpened] = React.useState(false);
const addSnackbar = useSnackbar();
const stores = useObservableSuspense(wpUser.populateResource('stores'));
const t = useT();
/**
*
*/
const handleLogin = React.useCallback(
async (storeID) => {
login({
siteID: site.uuid,
wpCredentialsID: wpUser.uuid,
storeID,
});
},
[login, site.uuid, wpUser.uuid]
);
/**
*
*/
const handleStoreSelect = React.useCallback(async () => {
if (stores.length === 1) {
// simple login
return handleLogin(stores[0].localID);
} else if (stores.length > 1) {
// show store select modal
setStoreSelectModalOpened(true);
} else {
addSnackbar({
message: t('No stores found for this user', { _tags: 'core' }),
});
}
}, [addSnackbar, handleLogin, stores, t]);
/**
* Remove user
*/
const handleRemoveWpUser = React.useCallback(async () => {
try {
await wpUser.remove();
await site.incrementalUpdate({
$pullAll: {
wp_credentials: [wpUser.uuid],
},
});
} catch (err) {
throw err;
}
}, [wpUser, site]);
/**
*
*/
return (
<>
setDeleteDialogOpened(true)}>
{wpUser.display_name ? wpUser.display_name : 'No name?'}
setStoreSelectModalOpened(false)}
opened={storeSelectModalOpened}
>
>
);
};
export default WpUser;