From 02dda6d0fe393f9d3406ebe8a0656debb3fb1446 Mon Sep 17 00:00:00 2001 From: Aman Harwara Date: Tue, 8 Aug 2023 22:15:58 +0530 Subject: [PATCH] chore: invites ui improvements --- .../Vaults/Invites/ContactInviteModal.tsx | 54 ++++++++++--------- .../Panes/Vaults/Invites/InviteItem.tsx | 32 +++++------ .../Panes/Vaults/Vaults/VaultItem.tsx | 36 ++++++------- .../Vaults/VaultModal/EditVaultModal.tsx | 4 +- .../Vaults/VaultModal/VaultModalInvites.tsx | 31 ++++++----- .../Components/UIElements/CheckmarkCircle.tsx | 17 +++--- 6 files changed, 93 insertions(+), 81 deletions(-) diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/ContactInviteModal.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/ContactInviteModal.tsx index 59bbe0200..a7b645a1e 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/ContactInviteModal.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/ContactInviteModal.tsx @@ -1,7 +1,13 @@ import { FunctionComponent, useCallback, useEffect, useMemo, useState } from 'react' import Modal, { ModalAction } from '@/Components/Modal/Modal' import { useApplication } from '@/Components/ApplicationProvider' -import { SharedVaultListingInterface, TrustedContactInterface, SharedVaultUserPermission } from '@standardnotes/snjs' +import { + SharedVaultListingInterface, + TrustedContactInterface, + SharedVaultUserPermission, + classNames, +} from '@standardnotes/snjs' +import Spinner from '@/Components/Spinner/Spinner' type Props = { vault: SharedVaultListingInterface @@ -12,15 +18,18 @@ const ContactInviteModal: FunctionComponent = ({ vault, onCloseDialog }) const application = useApplication() const [selectedContacts, setSelectedContacts] = useState([]) + const [isLoadingContacts, setIsLoadingContacts] = useState(false) const [contacts, setContacts] = useState([]) useEffect(() => { const loadContacts = async () => { + setIsLoadingContacts(true) const contacts = await application.vaultInvites.getInvitableContactsForSharedVault(vault) setContacts(contacts) + setIsLoadingContacts(false) } void loadContacts() - }, [application.vaultInvites, vault]) + }, [application.vaultInvites, contacts.length, vault]) const handleDialogClose = useCallback(() => { onCloseDialog() @@ -71,28 +80,25 @@ const ContactInviteModal: FunctionComponent = ({ vault, onCloseDialog }) return ( -
-
-
- {contacts.map((contact) => { - return ( -
toggleContact(contact)}> -
- toggleContact(contact)} - /> -
-
- {contact.name} - {contact.contactUuid} -
-
- ) - })} -
-
+
+ {isLoadingContacts ? ( + + ) : ( + contacts.map((contact) => { + return ( + + ) + }) + )}
) diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/InviteItem.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/InviteItem.tsx index e1fdd1104..482c33b05 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/InviteItem.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/InviteItem.tsx @@ -37,34 +37,36 @@ const InviteItem = ({ inviteRecord }: Props) => { -
- -
- Vault Name: {inviteData.metadata.name} - - Vault Description: {inviteData.metadata.description} - +
+ +
+
Vault Name: {inviteData.metadata.name}
+ {inviteData.metadata.description && ( +
+ Vault Description: {inviteData.metadata.description} +
+ )} {trustedContact ? ( -
+
Trusted Sender: {trustedContact.name} - +
) : ( - - Sender CollaborationID: {collaborationId} - +
+ Sender CollaborationID: {collaborationId} +
)} -
+
{isTrusted ? ( -
)}
diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultItem.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultItem.tsx index ae9b5b187..964dc5cc6 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultItem.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultItem.tsx @@ -116,26 +116,22 @@ const VaultItem = ({ vault }: Props) => { )} Vault ID: {vault.systemIdentifier} -
-
-
-
- {vault.isSharedVaultListing() ? ( -
+
+
diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultModal/EditVaultModal.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultModal/EditVaultModal.tsx index 0b7534a75..4f9a7d612 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultModal/EditVaultModal.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultModal/EditVaultModal.tsx @@ -287,7 +287,9 @@ const EditVaultModal: FunctionComponent = ({ onCloseDialog, existingVault )} - {existingVault && } + {existingVault && invites.length > 0 && ( + + )} { const contact = application.contacts.findContactForInvite(invite) return ( -
- +
+
- - {contact?.name || invite.user_uuid} - - {contact && Trusted} - {!contact && ( -
- Untrusted -
- )} +
+ {contact?.name || invite.user_uuid} + {contact ? ( +
+ + Trusted +
+ ) : ( +
+ + Untrusted +
+ )} +
{isAdmin && ( -
-
+
diff --git a/packages/web/src/javascripts/Components/UIElements/CheckmarkCircle.tsx b/packages/web/src/javascripts/Components/UIElements/CheckmarkCircle.tsx index 5ec2a134c..fae6631ed 100644 --- a/packages/web/src/javascripts/Components/UIElements/CheckmarkCircle.tsx +++ b/packages/web/src/javascripts/Components/UIElements/CheckmarkCircle.tsx @@ -1,13 +1,16 @@ import Icon from '@/Components/Icon/Icon' +import { classNames } from '@standardnotes/snjs' -export const CheckmarkCircle = () => { +export const CheckmarkCircle = ({ className }: { className?: string }) => { return ( - + +
) }