react-icons/fa#FaCaretRight TypeScript Examples
The following examples show how to use
react-icons/fa#FaCaretRight.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: LayoutMain.tsx From nextclade with MIT License | 6 votes |
export function LayoutMain({ children }: PropsWithChildren<HTMLProps<HTMLDivElement>>) {
const { t } = useTranslation()
const router = useRouter()
const goToResults = useCallback(() => router.push('/results'), [router])
const hasRan = useRecoilValue(hasRanAtom)
return (
<Container>
<Header>
<NavigationBar />
</Header>
<ButtonToResults hidden={!hasRan} color="secondary" onClick={goToResults}>
{t('To Results')}
<FaCaretRight />
</ButtonToResults>
<MainContent>{children}</MainContent>
<Footer>
<FooterContent />
</Footer>
</Container>
)
}
Example #2
Source File: Pagination.tsx From hub with Apache License 2.0 | 5 votes |
Pagination = (props: Props) => {
const [totalPages, setTotalPages] = useState(Math.ceil(props.total / props.limit));
const [active, setActive] = useState<number>(props.active);
useEffect(() => {
setTotalPages(Math.ceil(props.total / props.limit));
}, [props.total, props.limit]);
useEffect(() => {
setActive(props.active);
}, [props.active]);
if (totalPages <= 1) return null;
const visiblePages = getPaginationOptions(active, totalPages);
return (
<nav role="navigation" aria-label="pagination">
<ul className={`pagination justify-content-center ${styles.pagination} ${props.className}`}>
<li className={classnames('page-item', { disabled: active === 1 })}>
<PaginationBtn
pageNumber={active - 1}
disabled={active === 1}
content={
<>
<span className="d-none d-sm-block">Previous</span>
<span className={`d-block d-sm-none ${styles.btnIcon}`}>
<FaCaretLeft />
</span>
</>
}
active={active}
onChange={props.onChange}
/>
</li>
{visiblePages.map((value: number | string, index: number) => {
if (isNumber(value)) {
return (
<li
key={`pag_${index}`}
className={classnames('page-item', { [`active text-light ${styles.active}`]: active === value })}
>
<PaginationBtn pageNumber={value} disabled={false} active={active} onChange={props.onChange} />
</li>
);
} else {
return (
<li className="page-item disabled" key={`pag_${index}`}>
<span className="page-link">{value}</span>
</li>
);
}
})}
<li className={classnames('page-item', { disabled: active === totalPages })}>
<PaginationBtn
pageNumber={active + 1}
disabled={active === totalPages}
content={
<>
<span className="d-none d-sm-block">Next</span>
<span className={`d-block d-sm-none ${styles.btnIcon}`}>
<FaCaretRight />
</span>
</>
}
active={active}
onChange={props.onChange}
/>
</li>
</ul>
</nav>
);
}
Example #3
Source File: Cell.tsx From hub with Apache License 2.0 | 4 votes |
SecurityCell = (props: Props) => {
const ref = useRef<HTMLTableRowElement>(null);
const getMainReference = (): JSX.Element | null => {
if (isUndefined(props.vulnerability.References) || props.vulnerability.References.length === 0) {
return null;
}
let reference = props.vulnerability.References.find((ref: string) =>
ref.includes(props.vulnerability.VulnerabilityID)
);
if (isUndefined(reference)) {
reference = props.vulnerability.References[0];
}
return (
<ExternalLink
href={reference}
className={`ms-2 text-dark position-relative ${styles.link}`}
label={`Link to ${props.vulnerability.VulnerabilityID} vulnerability`}
>
<small>
<FaLink />
</small>
</ExternalLink>
);
};
const severity: VulnerabilitySeverity = props.vulnerability.Severity.toLowerCase() as VulnerabilitySeverity;
useEffect(() => {
// Scrolls content into view when a vulnerability is expanded
if (props.isExpanded && ref && ref.current) {
ref.current.scrollIntoView({ block: 'start', inline: 'nearest', behavior: 'smooth' });
}
}, [props.isExpanded]);
return (
<>
<tr
data-testid="vulnerabilityCell"
className={styles.clickableCell}
onClick={() => props.setVisibleVulnerability(!props.isExpanded ? props.name : undefined)}
ref={ref}
>
<td className="align-middle text-primary">{props.isExpanded ? <FaCaretDown /> : <FaCaretRight />}</td>
<td className="align-middle text-nowrap pe-3">
{props.vulnerability.VulnerabilityID}
{getMainReference()}
</td>
<td className="align-middle text-nowrap text-uppercase pe-3">
<div className="d-flex flex-row align-items-center">
<span
data-testid="severityBadge"
className={`badge p-2 me-2 ${styles.badge}`}
style={{
backgroundColor: SEVERITY_RATING[severity]!.color,
}}
>
{' '}
</span>
<small>{props.vulnerability.Severity}</small>
</div>
</td>
<td className="align-middle text-nowrap pe-3 w-25">
<div className={`d-table w-100 ${styles.wrapperCell}`}>
<div className="text-truncate">{props.vulnerability.PkgName}</div>
</div>
</td>
<td className="align-middle text-nowrap pe-3 w-25">
<div className={`d-table w-100 ${styles.wrapperCell}`}>
<div className="text-truncate">{props.vulnerability.InstalledVersion}</div>
</div>
</td>
<td className="align-middle text-nowrap pe-3 w-25" data-testid="fixedVersionCell">
{props.vulnerability.FixedVersion ? (
<div className={`d-table w-100 ${styles.wrapperCell}`}>
<div className="text-truncate">{JSON.parse(`"${props.vulnerability.FixedVersion}"`)}</div>
</div>
) : (
<span className="text-muted">-</span>
)}
</td>
</tr>
{props.isExpanded && (
<tr data-testid="vulnerabilityDetail" className={styles.noClickableCell}>
<td colSpan={6}>
<div className="m-3">
{isUndefined(props.vulnerability.title) && isUndefined(props.vulnerability.Description) ? (
<div className="fst-italic">Any information about this vulnerability</div>
) : (
<>
<div className="h6">{props.vulnerability.Title}</div>
{props.vulnerability.Description && (
<p className="text-muted mb-1">{props.vulnerability.Description}</p>
)}
<div className="d-flex flex-column text-end">
{!isUndefined(props.vulnerability.LastModifiedDate) &&
!isFuture(props.vulnerability.LastModifiedDate, false) && (
<small className="fst-italic">
Updated {moment(props.vulnerability.LastModifiedDate).fromNow()}
</small>
)}
</div>
{props.vulnerability.CVSS && (
<CVSSVector
source={props.vulnerability.SeveritySource}
severity={severity}
CVSS={props.vulnerability.CVSS || {}}
/>
)}
</>
)}
</div>
</td>
</tr>
)}
</>
);
}
Example #4
Source File: Table.tsx From hub with Apache License 2.0 | 4 votes |
SecurityTable = (props: Props) => {
const [visibleVulnerability, setVisibleVulnerability] = useState<string | undefined>();
const getEmptyMessage = (): JSX.Element => <span className="fst-italic text-muted">No vulnerabilities found</span>;
const getTargetName = (target: string): string => {
return getTextBetweenParenthesis(target) || target;
};
const isActiveImage = isNull(props.visibleTarget) ? props.visibleImage === props.image : false;
return (
<div className="my-1">
<ImageBtn
image={props.image}
isActive={isActiveImage}
onClick={() => {
if (!isActiveImage) {
props.setVisibleImage(props.image);
props.setVisibleTarget(null);
props.setExpandedTarget(null);
}
}}
/>
<div data-testid="securityReportInfo">
{isNull(props.reports) ? (
<div className="ms-4 mb-4">{getEmptyMessage()}</div>
) : (
<>
{props.reports.map((item: SecurityReportResult, index: number) => {
const targetImageName = `${props.image}_${item.Target}`;
const { list, summary } = formatSecurityReport(item.Vulnerabilities);
const visibleVulnerabilities = slice(list, 0, MAX_VULNERABILITY_NUMBER);
const isActive = !isNull(props.visibleTarget)
? targetImageName === `${props.visibleImage}_${props.visibleTarget}`
: false;
const isExpanded = props.expandedTarget === targetImageName;
const isLastTarget = props.lastReport && index === props.reports.length - 1;
return (
<Fragment key={`table_${targetImageName}`}>
<div
className="ms-4"
style={{
minHeight: isLastTarget && !isUndefined(props.contentHeight) ? props.contentHeight + 40 : 'auto',
}}
>
<TargetImageBtn
isActive={isActive}
isExpanded={isExpanded}
expandedTarget={props.expandedTarget}
onClick={() => {
props.setVisibleImage(props.image);
props.setVisibleTarget(item.Target);
props.setExpandedTarget(null);
}}
hasOnlyOneTarget={props.hasOnlyOneTarget}
>
<div className="d-flex flex-row align-items-center mb-2">
{isExpanded ? <FaCaretDown /> : <FaCaretRight />}
<div
data-testid="targetTitle"
className={`${styles.tableTitle} fw-bold me-3 ms-1 text-truncate`}
>
<span className="text-uppercase text-muted me-2">Target:</span>
<span className="fw-bold">{getTargetName(item.Target)}</span>
</div>
<div className={`${styles.tableTitle} d-flex flex-row align-items-center fw-bold text-nowrap`}>
<span className="text-uppercase text-muted">Rating:</span>
<SecurityRating
summary={summary}
className={`ms-2 ${styles.securityRatingBadge}`}
onlyBadge
/>
</div>
{visibleVulnerabilities.length > 0 && (
<button
className={`btn badge bg-secondary ms-3 ${styles.badge}`}
onClick={() => props.setExpandedTarget(isExpanded ? null : targetImageName)}
aria-label={`${isExpanded ? 'Close' : 'Open'} target image vulnerabilities`}
>
{isExpanded ? 'Hide' : 'Show'} vulnerabilities
</button>
)}
</div>
</TargetImageBtn>
{isExpanded && (
<div className="w-100 overflow-auto mb-2">
<table className={`table table-sm table-hover ${styles.table}`}>
<thead>
<tr className="text-uppercase text-muted">
<th scope="col" className={`border-top-0 ${styles.fitCell}`} />
<th scope="col" className="border-top-0">
ID
</th>
<th scope="col" className="border-top-0">
Severity
</th>
<th scope="col" className="border-top-0">
Package
</th>
<th scope="col" className="border-top-0">
Version
</th>
<th scope="col" className="border-top-0 text-nowrap">
Fixed in
</th>
</tr>
</thead>
<tbody className="bg-white">
{visibleVulnerabilities.map((item: Vulnerability, index: number) => {
const vulnerabilityName = `${item.VulnerabilityID}_${index}`;
return (
<SecurityCell
name={vulnerabilityName}
vulnerability={item}
key={`cell_${item.PkgName}_${item.VulnerabilityID}`}
isExpanded={visibleVulnerability === vulnerabilityName}
setVisibleVulnerability={setVisibleVulnerability}
/>
);
})}
{list.length > visibleVulnerabilities.length && (
<tr>
<td colSpan={6} className="align-middle text-end pt-3">
<span className="text-muted fst-italic">
Displaying only the first {MAX_VULNERABILITY_NUMBER} entries
</span>
</td>
</tr>
)}
</tbody>
</table>
</div>
)}
</div>
</Fragment>
);
})}
</>
)}
</div>
</div>
);
}