diff --git a/web/src/layout/common/badges/ValuesSchema.tsx b/web/src/layout/common/badges/ValuesSchema.tsx
new file mode 100644
index 000000000..3a743bb08
--- /dev/null
+++ b/web/src/layout/common/badges/ValuesSchema.tsx
@@ -0,0 +1,42 @@
+import { isNull, isUndefined } from 'lodash';
+import { CgListTree } from 'react-icons/cg';
+
+import Badge from './Badge';
+
+interface Props {
+ hasValuesSchema: boolean;
+ className?: string;
+ dropdownAlignment?: 'start' | 'end';
+ noDropdown?: boolean;
+ smallSize?: boolean;
+}
+
+const ValuesSchemaBadge = (props: Props) => {
+ const hasValuesSchema =
+ !isNull(props.hasValuesSchema) && !isUndefined(props.hasValuesSchema) && props.hasValuesSchema;
+
+ return (
+
}
+ active={hasValuesSchema}
+ className={props.className}
+ dropdownAlignment={props.dropdownAlignment}
+ noDropdown={props.noDropdown}
+ smallSize={props.smallSize}
+ popoverContent={
+ <>
+
Values schema
+
+
+ This chart {hasValuesSchema ? 'provides' : 'does not provide'} a{' '}
+ values schema.
+
+ >
+ }
+ />
+ );
+};
+
+export default ValuesSchemaBadge;
diff --git a/web/src/layout/package/__snapshots__/index.test.tsx.snap b/web/src/layout/package/__snapshots__/index.test.tsx.snap
index 59f468bd4..d65b6a07d 100644
--- a/web/src/layout/package/__snapshots__/index.test.tsx.snap
+++ b/web/src/layout/package/__snapshots__/index.test.tsx.snap
@@ -499,6 +499,163 @@ exports[`Package index creates snapshot 1`] = `
+
diff --git a/web/src/layout/package/index.tsx b/web/src/layout/package/index.tsx
index 3c9af7596..1a7b6f2d4 100644
--- a/web/src/layout/package/index.tsx
+++ b/web/src/layout/package/index.tsx
@@ -44,6 +44,7 @@ import CNCF from '../common/badges/CNCF';
import Deprecated from '../common/badges/Deprecated';
import Official from '../common/badges/Official';
import Signed from '../common/badges/Signed';
+import ValuesSchemaBagde from '../common/badges/ValuesSchema';
import VerifiedPublisher from '../common/badges/VerifiedPublisher';
import BlockCodeButtons from '../common/BlockCodeButtons';
import ContentDefaultModal from '../common/ContentDefaultModal';
@@ -931,6 +932,13 @@ const PackageView = () => {
{detail.deprecated &&
}
{(detail.cncf || detail.repository.cncf) &&
}
+ {detail.repository.kind === RepositoryKind.Helm && (
+
+ )}
-
+
diff --git a/widget/src/layout/Group.tsx b/widget/src/layout/Group.tsx
index b89377ce8..a8848b975 100644
--- a/widget/src/layout/Group.tsx
+++ b/widget/src/layout/Group.tsx
@@ -3,7 +3,7 @@ import { Fragment, useEffect, useState } from 'react';
import styled from 'styled-components';
import API from '../api';
-import { PackageSummary } from '../types';
+import { PackageSummary, RepositoryKind } from '../types';
import Loading from './common/Loading';
import Widget from './Widget';
@@ -52,7 +52,11 @@ const hasBadges = (packages: PackageSummary[] | null): boolean => {
if (packages) {
return some(
packages,
- (pkg: PackageSummary) => pkg.official || pkg.repository.official || pkg.repository.verifiedPublisher
+ (pkg: PackageSummary) =>
+ pkg.official ||
+ pkg.repository.official ||
+ pkg.repository.verifiedPublisher ||
+ (pkg.repository.kind === RepositoryKind.Helm && pkg.hasValuesSchema)
);
}
diff --git a/widget/src/layout/Widget.tsx b/widget/src/layout/Widget.tsx
index 4636b7b55..8f4e07af2 100644
--- a/widget/src/layout/Widget.tsx
+++ b/widget/src/layout/Widget.tsx
@@ -466,12 +466,17 @@ export default function Widget(props: Props) {
{(packageSummary.official ||
packageSummary.repository.official ||
- packageSummary.repository.verifiedPublisher) && (
+ packageSummary.repository.verifiedPublisher ||
+ (packageSummary.repository.kind === RepositoryKind.Helm && packageSummary.hasValuesSchema)) && (
{packageSummary.deprecated && }
{(packageSummary.cncf || packageSummary.repository.cncf) && }
+ {packageSummary.repository.kind === RepositoryKind.Helm && packageSummary.hasValuesSchema && (
+
+ )}
+
{packageSummary.signed && }
{packageSummary.repository.verifiedPublisher && }
diff --git a/widget/src/layout/__snapshots__/Group.test.tsx.snap b/widget/src/layout/__snapshots__/Group.test.tsx.snap
index 9910d657d..fcac5c802 100644
--- a/widget/src/layout/__snapshots__/Group.test.tsx.snap
+++ b/widget/src/layout/__snapshots__/Group.test.tsx.snap
@@ -159,7 +159,7 @@ exports[`Group creates snapshot 1`] = `
class="sc-ikkxIA bGCYMV"
>
{
render(
);
expect(screen.getByTitle('official')).toBeInTheDocument();
});
+
+ it('renders valuesSchema', () => {
+ render(
);
+ expect(screen.getByTitle('valuesSchema')).toBeInTheDocument();
+ });
});
diff --git a/widget/src/layout/common/Label.tsx b/widget/src/layout/common/Label.tsx
index a45ba2ef5..e9345a1e0 100644
--- a/widget/src/layout/common/Label.tsx
+++ b/widget/src/layout/common/Label.tsx
@@ -23,6 +23,10 @@ const LabelWrapper = styled('div')`
background-color: #645cbb;
}
+ &.valuesSchema {
+ background-color: #fca311;
+ }
+
&.cncf {
background-color: transparent;
diff --git a/widget/src/layout/common/SVGIcons.tsx b/widget/src/layout/common/SVGIcons.tsx
index 742bffa13..6d9c81537 100644
--- a/widget/src/layout/common/SVGIcons.tsx
+++ b/widget/src/layout/common/SVGIcons.tsx
@@ -168,6 +168,20 @@ const SVGIcons = (props: Props) => (
);
+ case 'valuesSchema':
+ return (
+
+ );
+
case 'cncf':
return (