From 68e2e78f47b77ff0f65b2977f8c71249b0f2f22d Mon Sep 17 00:00:00 2001 From: Austin Turner Date: Sun, 8 Dec 2024 18:02:42 -0700 Subject: [PATCH] Add User Search Added ability to search for users in a quick-access toolbar icon resolves #1032 --- apps/docs/docs/assets/icons/people.svg | 11 + .../docs/docs/other/other-useful-features.mdx | 13 + apps/docs/docs/other/user-search.png | Bin 0 -> 94030 bytes libs/icon-factory/src/lib/icon-factory.tsx | 2 + .../constants/src/lib/shared-constants.ts | 5 + libs/shared/ui-core/src/app/HeaderNavbar.tsx | 19 +- .../ui-core/src/record/UserSearchPopover.tsx | 268 ++++++++++++++++++ .../shared/ui-core/src/record/record-utils.ts | 67 +++++ .../ui-utils/src/lib/shared-ui-keyboard.ts | 4 + libs/shared/utils/src/lib/regex.ts | 1 + libs/ui/src/lib/form/input/Input.tsx | 16 +- .../src/lib/form/search-input/SearchInput.tsx | 11 +- libs/ui/src/lib/list/List.tsx | 20 +- libs/ui/src/lib/list/ListItem.tsx | 20 +- libs/ui/src/lib/list/ListItemCheckbox.tsx | 21 +- libs/ui/src/lib/widgets/CopyToClipboard.tsx | 5 +- 16 files changed, 451 insertions(+), 32 deletions(-) create mode 100644 apps/docs/docs/assets/icons/people.svg create mode 100644 apps/docs/docs/other/user-search.png create mode 100644 libs/shared/ui-core/src/record/UserSearchPopover.tsx create mode 100644 libs/shared/ui-core/src/record/record-utils.ts diff --git a/apps/docs/docs/assets/icons/people.svg b/apps/docs/docs/assets/icons/people.svg new file mode 100644 index 000000000..e572da302 --- /dev/null +++ b/apps/docs/docs/assets/icons/people.svg @@ -0,0 +1,11 @@ + diff --git a/apps/docs/docs/other/other-useful-features.mdx b/apps/docs/docs/other/other-useful-features.mdx index f9c614798..379a50763 100644 --- a/apps/docs/docs/other/other-useful-features.mdx +++ b/apps/docs/docs/other/other-useful-features.mdx @@ -24,8 +24,21 @@ sidebar_label: Other Useful Features slug: /other-useful-features --- +import PeopleIcon from '../assets/icons/people.svg'; import RecordLookupIcon from '../assets/icons/record_lookup.svg'; +## Searching for Users + +If you need to find a user in your Salesforce org, you can use the user search feature in Jetstream. + +Click the people icon in the top toolbar to open the user search popover. + +Once open, you can search for a user by their name, id, email address, or username. + +You can then view click the user to view their details or click "View in Salesforce" to open the user in Salesforce. + +Search for Users + ## Viewing, Editing, and Cloning records Jetstream provides a few different ways for working with records. diff --git a/apps/docs/docs/other/user-search.png b/apps/docs/docs/other/user-search.png new file mode 100644 index 0000000000000000000000000000000000000000..54e96e13b7b77554ba9b5aeac38c84224c1f7557 GIT binary patch literal 94030 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 = ({ userProfile const rightHandMenuItems = useMemo(() => { return isChromeExtension - ? [, , ] - : [ - -

We have launched our new authentication experience

-

New Features:

-
    -
  • Multi-factor authentication via email or authenticator app
  • -
  • Visibility to all active sessions, with option to revoke sessions
  • -
-
, - , - , - , - , - ]; + ? [, , , ] + : [, , , , ]; }, [isChromeExtension, userProfile]); return ( diff --git a/libs/shared/ui-core/src/record/UserSearchPopover.tsx b/libs/shared/ui-core/src/record/UserSearchPopover.tsx new file mode 100644 index 000000000..59a319222 --- /dev/null +++ b/libs/shared/ui-core/src/record/UserSearchPopover.tsx @@ -0,0 +1,268 @@ +import { css } from '@emotion/react'; +import { logger } from '@jetstream/shared/client-logger'; +import { ANALYTICS_KEYS } from '@jetstream/shared/constants'; +import { query } from '@jetstream/shared/data'; +import { hasModifierKey, isUKey, useDebounce, useGlobalEventHandler } from '@jetstream/shared/ui-utils'; +import { CloneEditView, QueryResults, SalesforceOrgUi } from '@jetstream/types'; +import { + CopyToClipboard, + getModifierKey, + Grid, + Icon, + KeyboardShortcut, + List, + Popover, + PopoverRef, + SalesforceLogin, + ScopedNotification, + SearchInput, +} from '@jetstream/ui'; +import { Fragment, FunctionComponent, useCallback, useEffect, useRef, useState } from 'react'; +import { useRecoilState, useRecoilValue } from 'recoil'; +import { useAmplitude } from '../analytics'; +import { applicationCookieState, selectedOrgState, selectSkipFrontdoorAuth } from '../state-management/app-state'; +import { getSearchUserSoql } from './record-utils'; +import { ViewEditCloneRecord } from './ViewEditCloneRecord'; + +interface User { + Id: string; + Name: string; + Alias: string; + CreatedDate: string; + Email: string; + IsActive: boolean; + Profile: { + Id: string; + Name: string; + }; + Username: string; + UserRole?: { + Id: string; + Name: string; + }; + UserType: + | 'Standard' + | 'PowerPartner' + | 'PowerCustomerSuccess' + | 'CustomerSuccess' + | 'Guest' + | 'CspLitePortal' + | 'CsnOnly' + | 'SelfService'; +} + +export const UserSearchPopover: FunctionComponent = () => { + const currentSearchRef = useRef(0); + const popoverRef = useRef(null); + const [isOpen, setIsOpen] = useState(false); + const [{ defaultApiVersion, serverUrl }] = useRecoilState(applicationCookieState); + const skipFrontDoorAuth = useRecoilValue(selectSkipFrontdoorAuth); + const selectedOrg = useRecoilValue(selectedOrgState); + const { trackEvent } = useAmplitude(); + + const [loading, setLoading] = useState(false); + const [errorMessage, setErrorMessage] = useState(null); + + const [selectedUser, setSelectedUser] = useState(null); + const [usersResults, setUsersResults] = useState>(); + + const [searchTerm, setSearchTerm] = useState(''); + const searchTermDebounced = useDebounce(searchTerm, 500); + + useEffect(() => { + if (!isOpen) { + return; + } + setLoading(true); + const currentSearchValue = currentSearchRef.current; + trackEvent(ANALYTICS_KEYS.user_search_did_search); + query(selectedOrg, getSearchUserSoql(searchTermDebounced)) + .then((users) => { + if (currentSearchRef.current === currentSearchValue) { + setUsersResults(users); + setLoading(false); + } + }) + .catch((ex) => { + setErrorMessage('An error occurred while fetching users'); + logger.warn('[ERROR] Could not fetch users', ex); + }); + return () => { + currentSearchRef.current = currentSearchRef.current + 1; + }; + }, [isOpen, searchTermDebounced, selectedOrg, trackEvent]); + + const [action, setAction] = useState('view'); + + const onKeydown = useCallback((event: KeyboardEvent) => { + if (hasModifierKey(event as any) && isUKey(event as any)) { + event.stopPropagation(); + event.preventDefault(); + popoverRef.current?.open(); + } + }, []); + + useGlobalEventHandler('keydown', onKeydown); + + function onActionChange(action: CloneEditView) { + setAction(action); + } + + function onModalClose() { + setSelectedUser(null); + setAction('view'); + } + + if (!selectedOrg || !!selectedOrg.connectionError) { + return null; + } + + return ( + + {selectedUser && ( + + )} + { + setIsOpen(isOpen); + isOpen && trackEvent(ANALYTICS_KEYS.user_search_opened); + }} + header={ +
+

Search Users

+ +
+ } + content={ +
+ {errorMessage && ( +
+ + {errorMessage} + +
+ )} + + setSearchTerm(value.trim())} + /> + + {!!usersResults && !usersResults?.queryResults.records?.length && ( +

No Results

+ )} + {!!usersResults?.queryResults.records?.length && ( + +

+ Users +

+ item.Id === searchTerm} + onSelected={(key: string) => { + const user = usersResults?.queryResults.records.find(({ Id }) => Id === key); + if (user) { + setSelectedUser(user); + trackEvent(ANALYTICS_KEYS.user_search_view_user); + } + }} + getContent={(user: User) => ({ + key: user.Id, + id: user.Id, + heading: getListItemContent({ user, onCopy: (type) => trackEvent(ANALYTICS_KEYS.user_search_copy_item, { type }) }), + children: ( + + event.stopPropagation()} + > + View in Salesforce + + + ), + })} + searchTerm={searchTerm} + /> +
+ )} +
+ } + buttonProps={{ + className: + 'slds-button slds-button_icon slds-button_icon-container slds-button_icon-small slds-global-actions__help slds-global-actions__item-action cursor-pointer', + title: 'View Record Details - ctrl/command + k', + disabled: !selectedOrg || !!selectedOrg.connectionError, + }} + > + +
+
+ ); +}; + +function getListItemContent({ user, onCopy }: { user: User; onCopy: (type: string) => void }) { + const { Alias, Email, Id, IsActive, Name, Profile, Username, UserType, UserRole } = user; + return ( +
+

+ {Name} ({Alias}) +

+

+ + Email: + {' '} + onCopy('email')} /> + {Email} +

+

+ + Username: + {' '} + onCopy('username')} /> + {Username} +

+ {Profile?.Name && ( +

+ Profile: + {Profile.Name} +

+ )} + {UserRole?.Name && ( +

+ Role: + {UserRole.Name} +

+ )} + {!IsActive &&

Inactive

} +

+ onCopy('id')} /> + {Id} +

+ {UserType !== 'Standard' &&

{UserType}

} +
+ ); +} diff --git a/libs/shared/ui-core/src/record/record-utils.ts b/libs/shared/ui-core/src/record/record-utils.ts new file mode 100644 index 000000000..4ad3efa8a --- /dev/null +++ b/libs/shared/ui-core/src/record/record-utils.ts @@ -0,0 +1,67 @@ +import { REGEX } from '@jetstream/shared/utils'; +import { composeQuery, getField, WhereClause } from '@jetstreamapp/soql-parser-js'; + +export function getSearchUserSoql(value: string) { + let whereClause: WhereClause = { + left: { + field: 'Name', + operator: 'LIKE', + value: `%${value}%`, + literalType: 'STRING', + }, + operator: 'OR', + right: { + left: { + field: 'Email', + operator: 'LIKE', + value: `%${value}%`, + literalType: 'STRING', + }, + operator: 'OR', + right: { + left: { + field: 'Username', + operator: 'LIKE', + value: `%${value}%`, + literalType: 'STRING', + }, + }, + }, + }; + + if (REGEX.SFDC_ID.test(value)) { + whereClause = { + left: { + field: 'Id', + operator: '=', + value, + literalType: 'STRING', + }, + operator: 'OR', + right: whereClause, + }; + } + + const soql = composeQuery({ + fields: [ + getField('Id'), + getField('Name'), + getField('Alias'), + getField('FORMAT(CreatedDate)'), + getField('Email'), + getField('IsActive'), + getField('Profile.Id'), + getField('Profile.Name'), + getField('Username'), + getField('UserRole.Id'), + getField('UserRole.Name'), + getField('UserType'), + ], + sObject: 'User', + where: value ? whereClause : undefined, + orderBy: [{ field: 'Name' }], + limit: 50, + }); + + return soql; +} diff --git a/libs/shared/ui-utils/src/lib/shared-ui-keyboard.ts b/libs/shared/ui-utils/src/lib/shared-ui-keyboard.ts index 9239334cd..1f813d35f 100644 --- a/libs/shared/ui-utils/src/lib/shared-ui-keyboard.ts +++ b/libs/shared/ui-utils/src/lib/shared-ui-keyboard.ts @@ -134,6 +134,10 @@ export function isMKey(event: KeyboardEvent): boolean { return event.key === 'm' || event.key === 'M' || event.keyCode === 77; } +export function isUKey(event: KeyboardEvent): boolean { + return event.key === 'u' || event.key === 'U' || event.code === 'KeyU'; +} + export function isVKey(event: KeyboardEvent): boolean { return event.key === 'v' || event.code === 'KeyV' || event.keyCode === 86; } diff --git a/libs/shared/utils/src/lib/regex.ts b/libs/shared/utils/src/lib/regex.ts index f3a6a107e..d5c1a2800 100644 --- a/libs/shared/utils/src/lib/regex.ts +++ b/libs/shared/utils/src/lib/regex.ts @@ -28,4 +28,5 @@ export const REGEX = { ENDS_WITH_NON_ALPHANUMERIC: /[^0-9a-zA-Z]+$/, CONSECUTIVE_UNDERSCORES: /_+/g, STARTS_WITH_NUMBER: /^[0-9]/, + SFDC_ID: /^([0-9a-zA-Z]{16}|[0-9a-zA-Z]{18})$/, }; diff --git a/libs/ui/src/lib/form/input/Input.tsx b/libs/ui/src/lib/form/input/Input.tsx index 3f60c732c..ec201d817 100644 --- a/libs/ui/src/lib/form/input/Input.tsx +++ b/libs/ui/src/lib/form/input/Input.tsx @@ -5,6 +5,7 @@ import classNames from 'classnames'; import { Fragment, FunctionComponent, MouseEvent } from 'react'; import HelpText from '../../widgets/HelpText'; import Icon from '../../widgets/Icon'; +import Spinner from '../../widgets/Spinner'; export interface InputProps { id?: string; @@ -26,6 +27,7 @@ export interface InputProps { leftAddon?: React.ReactNode | string; rightAddon?: React.ReactNode | string; clearButton?: boolean; + loading?: boolean; onClear?: (ev?: MouseEvent) => void; children?: React.ReactNode; } @@ -48,6 +50,7 @@ export const Input: FunctionComponent = ({ iconRight, iconRightType, clearButton = false, + loading, onClear, // Addons - these cannot be used with icon in same location leftAddon, @@ -83,6 +86,7 @@ export const Input: FunctionComponent = ({ 'slds-input-has-icon_right': !leftAddon && !iconLeft && (iconRight || clearButton), 'slds-input-has-icon_left-right': (!leftAddon && !rightAddon && iconLeft && iconRight) || (iconLeft && clearButton), 'slds-input-has-fixed-addon': leftAddon || rightAddon, + 'slds-input-has-icon_group-right': loading, }, formControlClassName )} @@ -106,8 +110,18 @@ export const Input: FunctionComponent = ({ {leftAddon && {leftAddon}} {/* Input field must be passed through */} {children} + {loading && ( +
+ + {clearButton && ( + + )} +
+ )} {rightAddon && {rightAddon}} - {!rightAddon && clearButton && ( + {!rightAddon && clearButton && !loading && ( diff --git a/libs/ui/src/lib/form/search-input/SearchInput.tsx b/libs/ui/src/lib/form/search-input/SearchInput.tsx index 620650fba..06336298d 100644 --- a/libs/ui/src/lib/form/search-input/SearchInput.tsx +++ b/libs/ui/src/lib/form/search-input/SearchInput.tsx @@ -16,6 +16,7 @@ export interface SearchInputProps { */ value?: string; disabled?: boolean; + loading?: boolean; onChange: (value: string) => void; onArrowKeyUpDown?: (direction: UpDown) => void; children?: React.ReactNode; @@ -28,6 +29,7 @@ export const SearchInput: FunctionComponent = ({ autoFocus, value: incomingValue = '', disabled, + loading, onChange, onArrowKeyUpDown, children, @@ -68,7 +70,14 @@ export const SearchInput: FunctionComponent = ({ } return ( - setValue('')}> + setValue('')} + > [] | RefObject[]; export interface ListProps { + className?: string; items: any[]; isMultiSelect?: boolean; autoScrollToFocus?: boolean; @@ -34,8 +36,9 @@ export interface ListProps { key: string; id?: string; testId?: string; - heading?: Maybe; + heading?: Maybe; subheading?: Maybe; + children?: ReactNode; }; onSelected: (key: string) => void; } @@ -43,6 +46,7 @@ export interface ListProps { export const List = forwardRef( ( { + className, items, autoScrollToFocus = false, useCheckbox = false, @@ -172,12 +176,12 @@ export const List = forwardRef( ref={ref} role="listbox" aria-multiselectable={isMultiSelect} - className="slds-has-dividers_bottom-space" + className={classNames('slds-has-dividers_bottom-space', className)} tabIndex={0} onKeyDown={handleKeyDown} > {items.map((item, i) => { - const { key, id, testId, heading, subheading } = getContent(item); + const { key, id, testId, heading, subheading, children } = getContent(item); return useCheckbox ? ( } @@ -192,7 +196,9 @@ export const List = forwardRef( highlightText={highlightText} disabled={disabled} onSelected={() => handleSelect(key, i)} - /> + > + {children} + ) : ( ( highlightText={highlightText} disabled={disabled} onSelected={() => handleSelect(key, i)} - /> + > + {children} + ); })} diff --git a/libs/ui/src/lib/list/ListItem.tsx b/libs/ui/src/lib/list/ListItem.tsx index ec5c2acb0..b591a77a4 100644 --- a/libs/ui/src/lib/list/ListItem.tsx +++ b/libs/ui/src/lib/list/ListItem.tsx @@ -2,13 +2,13 @@ import { css } from '@emotion/react'; import { Maybe } from '@jetstream/types'; import classNames from 'classnames'; import isString from 'lodash/isString'; -import { memo, RefObject } from 'react'; +import { memo, ReactNode, RefObject } from 'react'; import { useHighlightedText } from '../hooks/useHighlightedText'; export interface ListItemProps { liRef?: RefObject; testId?: Maybe; - heading?: Maybe; + heading?: Maybe; subheading?: Maybe; isActive?: boolean; subheadingPlaceholder?: boolean; @@ -16,10 +16,23 @@ export interface ListItemProps { highlightText?: boolean; disabled?: boolean; onSelected: () => void; + children?: ReactNode; } export const ListItem = memo( - ({ liRef, testId, heading = '', subheading, isActive, subheadingPlaceholder, searchTerm, highlightText, disabled, onSelected }) => { + ({ + liRef, + testId, + heading = '', + subheading, + isActive, + subheadingPlaceholder, + searchTerm, + highlightText, + disabled, + onSelected, + children, + }) => { const highlightedHeading = useHighlightedText(heading, searchTerm, { ignoreHighlight: !highlightText }); const highlightedSubHeading = useHighlightedText(subheading, searchTerm, { ignoreHighlight: !highlightText, @@ -57,6 +70,7 @@ export const ListItem = memo( `} > )} + {children} ); } diff --git a/libs/ui/src/lib/list/ListItemCheckbox.tsx b/libs/ui/src/lib/list/ListItemCheckbox.tsx index 72a7e865a..2b9b5defe 100644 --- a/libs/ui/src/lib/list/ListItemCheckbox.tsx +++ b/libs/ui/src/lib/list/ListItemCheckbox.tsx @@ -2,7 +2,7 @@ import { css } from '@emotion/react'; import { Maybe } from '@jetstream/types'; import classNames from 'classnames'; import isString from 'lodash/isString'; -import { memo, MouseEvent, RefObject } from 'react'; +import { memo, MouseEvent, ReactNode, RefObject } from 'react'; import Checkbox from '../form/checkbox/Checkbox'; import { useHighlightedText } from '../hooks/useHighlightedText'; @@ -10,7 +10,7 @@ export interface ListItemCheckboxProps { id: string; testId?: string; inputRef?: RefObject; - heading?: Maybe; + heading?: Maybe; subheading?: Maybe; isActive?: boolean; subheadingPlaceholder?: boolean; @@ -18,10 +18,24 @@ export interface ListItemCheckboxProps { highlightText?: boolean; disabled?: boolean; onSelected: () => void; + children?: ReactNode; } export const ListItemCheckbox = memo( - ({ id, testId, inputRef, heading, subheading, isActive, subheadingPlaceholder, searchTerm, highlightText, disabled, onSelected }) => { + ({ + id, + testId, + inputRef, + heading, + subheading, + isActive, + subheadingPlaceholder, + searchTerm, + highlightText, + disabled, + onSelected, + children, + }) => { const highlightedHeading = useHighlightedText(heading, searchTerm, { className: 'slds-truncate', ignoreHighlight: !highlightText }); const highlightedSubHeading = useHighlightedText(subheading, searchTerm, { ignoreHighlight: !highlightText, @@ -63,6 +77,7 @@ export const ListItemCheckbox = memo( )} + {children} ); } diff --git a/libs/ui/src/lib/widgets/CopyToClipboard.tsx b/libs/ui/src/lib/widgets/CopyToClipboard.tsx index 3cea8f58b..823d52308 100644 --- a/libs/ui/src/lib/widgets/CopyToClipboard.tsx +++ b/libs/ui/src/lib/widgets/CopyToClipboard.tsx @@ -39,7 +39,8 @@ export const CopyToClipboard: FunctionComponent = ({ }); const [currentIcon, setCurrentIcon] = useState(icon); - function handleCopy() { + function handleCopy(event: React.MouseEvent) { + event.stopPropagation(); setClipboard(); } @@ -63,7 +64,7 @@ export const CopyToClipboard: FunctionComponent = ({ className )} disabled={disabled || (!skipTransitionIcon && isCopied)} - onClick={() => handleCopy()} + onClick={handleCopy} >