@kyverno/backstage-plugin-policy-reporter 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/alpha/plugin.esm.js +5 -12
  3. package/dist/alpha/plugin.esm.js.map +1 -1
  4. package/dist/alpha.d.ts +8 -26
  5. package/dist/api/PolicyReporterClient.esm.js.map +1 -1
  6. package/dist/components/EntityCustomPoliciesContent/EntityCustomPoliciesContent.esm.js +48 -80
  7. package/dist/components/EntityCustomPoliciesContent/EntityCustomPoliciesContent.esm.js.map +1 -1
  8. package/dist/components/EntityCustomPoliciesContent/index.esm.js +5 -1
  9. package/dist/components/EntityCustomPoliciesContent/index.esm.js.map +1 -1
  10. package/dist/components/EntityKyvernoPoliciesContent/EntityKyvernoPoliciesContent.esm.js +48 -80
  11. package/dist/components/EntityKyvernoPoliciesContent/EntityKyvernoPoliciesContent.esm.js.map +1 -1
  12. package/dist/components/EntityKyvernoPoliciesContent/index.esm.js +5 -1
  13. package/dist/components/EntityKyvernoPoliciesContent/index.esm.js.map +1 -1
  14. package/dist/components/MissingEnvironmentsEmptyState/MissingEnvironmentsEmptyState.esm.js +1 -1
  15. package/dist/components/MissingEnvironmentsEmptyState/MissingEnvironmentsEmptyState.esm.js.map +1 -1
  16. package/dist/components/PolicyReportsDrawerComponent/PolicyReportsDrawerComponent.esm.js +1 -1
  17. package/dist/components/PolicyReportsDrawerComponent/PolicyReportsDrawerComponent.esm.js.map +1 -1
  18. package/dist/components/PolicyReportsPage/PolicyReportsPage.esm.js +41 -64
  19. package/dist/components/PolicyReportsPage/PolicyReportsPage.esm.js.map +1 -1
  20. package/dist/components/PolicyReportsPage/index.esm.js +5 -1
  21. package/dist/components/PolicyReportsPage/index.esm.js.map +1 -1
  22. package/dist/components/PolicyReportsTable/PolicyReportsTable.esm.js +85 -111
  23. package/dist/components/PolicyReportsTable/PolicyReportsTable.esm.js.map +1 -1
  24. package/dist/components/SearchField/SearchField.esm.js +33 -0
  25. package/dist/components/SearchField/SearchField.esm.js.map +1 -0
  26. package/dist/components/SelectEnvironment/SelectEnvironment.esm.js +22 -41
  27. package/dist/components/SelectEnvironment/SelectEnvironment.esm.js.map +1 -1
  28. package/dist/components/SelectNamespace/SelectNamespace.esm.js +35 -45
  29. package/dist/components/SelectNamespace/SelectNamespace.esm.js.map +1 -1
  30. package/dist/components/SelectSeverity/SelectSeverity.esm.js +40 -51
  31. package/dist/components/SelectSeverity/SelectSeverity.esm.js.map +1 -1
  32. package/dist/components/SelectStatus/SelectStatus.esm.js +40 -51
  33. package/dist/components/SelectStatus/SelectStatus.esm.js.map +1 -1
  34. package/dist/components/SeverityComponent/SeverityComponent.esm.js +11 -35
  35. package/dist/components/SeverityComponent/SeverityComponent.esm.js.map +1 -1
  36. package/dist/components/StatusComponent/StatusComponent.esm.js.map +1 -1
  37. package/dist/hooks/useEntityEnvironment.esm.js +1 -9
  38. package/dist/hooks/useEntityEnvironment.esm.js.map +1 -1
  39. package/dist/hooks/useEnvironments.esm.js +17 -30
  40. package/dist/hooks/useEnvironments.esm.js.map +1 -1
  41. package/dist/hooks/useNamespaces.esm.js +4 -4
  42. package/dist/hooks/useNamespaces.esm.js.map +1 -1
  43. package/dist/hooks/usePolicyReportsFilters.esm.js +90 -0
  44. package/dist/hooks/usePolicyReportsFilters.esm.js.map +1 -0
  45. package/dist/index.d.ts +1 -1
  46. package/dist/package.json.esm.js +9 -5
  47. package/dist/package.json.esm.js.map +1 -1
  48. package/dist/plugin.esm.js +1 -1
  49. package/dist/plugin.esm.js.map +1 -1
  50. package/dist/routes.esm.js.map +1 -1
  51. package/dist/utils/annotations.esm.js +1 -1
  52. package/dist/utils/annotations.esm.js.map +1 -1
  53. package/package.json +18 -14
  54. package/dist/hooks/usePaginatedPolicies.esm.js +0 -51
  55. package/dist/hooks/usePaginatedPolicies.esm.js.map +0 -1
@@ -0,0 +1,33 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useState, useEffect } from 'react';
3
+ import { useDebounce } from 'react-use';
4
+ import { SearchField as SearchField$1 } from '@backstage/ui';
5
+ import { usePolicyReportsFilters } from '../../hooks/usePolicyReportsFilters.esm.js';
6
+
7
+ const SearchField = () => {
8
+ const { filter, updateFilter } = usePolicyReportsFilters();
9
+ const [inputValue, setInputValue] = useState(filter.search ?? "");
10
+ useEffect(() => {
11
+ setInputValue(filter.search ?? "");
12
+ }, [filter.search]);
13
+ useDebounce(
14
+ () => {
15
+ updateFilter({ search: inputValue || void 0 });
16
+ },
17
+ 300,
18
+ [inputValue]
19
+ );
20
+ return /* @__PURE__ */ jsx(
21
+ SearchField$1,
22
+ {
23
+ "aria-label": "Search",
24
+ label: "Search",
25
+ value: inputValue,
26
+ onChange: setInputValue,
27
+ style: { width: "350px" }
28
+ }
29
+ );
30
+ };
31
+
32
+ export { SearchField };
33
+ //# sourceMappingURL=SearchField.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchField.esm.js","sources":["../../../src/components/SearchField/SearchField.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useDebounce } from 'react-use';\nimport { SearchField as BackstageSearchField } from '@backstage/ui';\nimport { usePolicyReportsFilters } from '../../hooks/usePolicyReportsFilters';\n\nexport const SearchField = () => {\n const { filter, updateFilter } = usePolicyReportsFilters();\n const [inputValue, setInputValue] = useState(filter.search ?? '');\n\n // Sync input value when filter.search changes externally (back/forward nav).\n useEffect(() => {\n setInputValue(filter.search ?? '');\n }, [filter.search]);\n\n useDebounce(\n () => {\n updateFilter({ search: inputValue || undefined });\n },\n 300,\n [inputValue],\n );\n\n return (\n <BackstageSearchField\n aria-label=\"Search\"\n label=\"Search\"\n value={inputValue}\n onChange={setInputValue}\n style={{ width: '350px' }}\n />\n );\n};\n"],"names":["BackstageSearchField"],"mappings":";;;;;;AAKO,MAAM,cAAc,MAAM;AAC/B,EAAA,MAAM,EAAE,MAAA,EAAQ,YAAA,EAAa,GAAI,uBAAA,EAAwB;AACzD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,IAAI,QAAA,CAAS,MAAA,CAAO,UAAU,EAAE,CAAA;AAGhE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,aAAA,CAAc,MAAA,CAAO,UAAU,EAAE,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,MAAA,CAAO,MAAM,CAAC,CAAA;AAElB,EAAA,WAAA;AAAA,IACE,MAAM;AACJ,MAAA,YAAA,CAAa,EAAE,MAAA,EAAQ,UAAA,IAAc,MAAA,EAAW,CAAA;AAAA,IAClD,CAAA;AAAA,IACA,GAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,uBACE,GAAA;AAAA,IAACA,aAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,QAAA;AAAA,MACX,KAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,UAAA;AAAA,MACP,QAAA,EAAU,aAAA;AAAA,MACV,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA;AAAQ;AAAA,GAC1B;AAEJ;;;;"}
@@ -1,46 +1,27 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import MenuItem from '@material-ui/core/MenuItem';
3
- import InputLabel from '@material-ui/core/InputLabel';
4
- import FormControl from '@material-ui/core/FormControl';
5
- import Select from '@material-ui/core/Select';
6
- import { makeStyles } from '@material-ui/core/styles';
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Select } from '@backstage/ui';
3
+ import { usePolicyReportsFilters } from '../../hooks/usePolicyReportsFilters.esm.js';
7
4
 
8
- const useStyles = makeStyles({
9
- formControl: {
10
- margin: 8,
11
- minWidth: 150
12
- },
13
- hideDropdownArrow: {
14
- "& .MuiSelect-icon-196.Mui-disabled": {
15
- display: "none"
16
- }
17
- }
18
- });
19
- const SelectEnvironment = ({
20
- environments,
21
- currentEnvironment,
22
- setCurrentEnvironment
23
- }) => {
24
- const classes = useStyles();
25
- const handleChange = (event) => {
26
- setCurrentEnvironment(environments[Number(event.target.value)]);
5
+ const SelectEnvironment = ({ environments }) => {
6
+ const { environment, setEnvironment } = usePolicyReportsFilters();
7
+ const options = environments.map((env) => ({
8
+ value: env.entityRef,
9
+ label: env.name
10
+ }));
11
+ const handleChange = (key) => {
12
+ if (key === null || Array.isArray(key)) return;
13
+ setEnvironment(key);
27
14
  };
28
- const isSingleEnvironment = environments.length === 1;
29
- return /* @__PURE__ */ jsxs(FormControl, { className: classes.formControl, children: [
30
- /* @__PURE__ */ jsx(InputLabel, { id: "select-environment-label", children: "Environment" }),
31
- /* @__PURE__ */ jsx(
32
- Select,
33
- {
34
- labelId: "select-environment-label",
35
- id: "select-environment",
36
- value: String(currentEnvironment.id),
37
- onChange: handleChange,
38
- disabled: isSingleEnvironment,
39
- className: isSingleEnvironment ? classes.hideDropdownArrow : "",
40
- children: environments.map((env) => /* @__PURE__ */ jsx(MenuItem, { value: env.id, children: env.name }, env.name))
41
- }
42
- )
43
- ] });
15
+ return /* @__PURE__ */ jsx(
16
+ Select,
17
+ {
18
+ label: "Environment",
19
+ selectionMode: "single",
20
+ options,
21
+ value: environment,
22
+ onChange: handleChange
23
+ }
24
+ );
44
25
  };
45
26
 
46
27
  export { SelectEnvironment };
@@ -1 +1 @@
1
- {"version":3,"file":"SelectEnvironment.esm.js","sources":["../../../src/components/SelectEnvironment/SelectEnvironment.tsx"],"sourcesContent":["import MenuItem from '@material-ui/core/MenuItem';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport { Environment } from '@kyverno/backstage-plugin-policy-reporter-common';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles({\n formControl: {\n margin: 8,\n minWidth: 150,\n },\n hideDropdownArrow: {\n '& .MuiSelect-icon-196.Mui-disabled': {\n display: 'none',\n },\n },\n});\n\ntype SelectEnvironmentProps = {\n environments: Environment[];\n currentEnvironment: Environment;\n setCurrentEnvironment: (environment: Environment) => void;\n};\n\nexport const SelectEnvironment = ({\n environments,\n currentEnvironment,\n setCurrentEnvironment,\n}: SelectEnvironmentProps) => {\n const classes = useStyles();\n\n const handleChange = (event: any) => {\n setCurrentEnvironment(environments[Number(event.target.value)]);\n };\n\n // Check if there is more then 1 environment\n const isSingleEnvironment = environments.length === 1;\n\n return (\n <FormControl className={classes.formControl}>\n <InputLabel id=\"select-environment-label\">Environment</InputLabel>\n <Select\n labelId=\"select-environment-label\"\n id=\"select-environment\"\n value={String(currentEnvironment.id)}\n onChange={handleChange}\n disabled={isSingleEnvironment}\n className={isSingleEnvironment ? classes.hideDropdownArrow : ''}\n >\n {environments.map(env => (\n <MenuItem key={env.name} value={env.id}>\n {env.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAOA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,WAAa,EAAA;AAAA,IACX,MAAQ,EAAA,CAAA;AAAA,IACR,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,iBAAmB,EAAA;AAAA,IACjB,oCAAsC,EAAA;AAAA,MACpC,OAAS,EAAA;AAAA;AACX;AAEJ,CAAC,CAAA;AAQM,MAAM,oBAAoB,CAAC;AAAA,EAChC,YAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAA8B,KAAA;AAC5B,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAM,MAAA,YAAA,GAAe,CAAC,KAAe,KAAA;AACnC,IAAA,qBAAA,CAAsB,aAAa,MAAO,CAAA,KAAA,CAAM,MAAO,CAAA,KAAK,CAAC,CAAC,CAAA;AAAA,GAChE;AAGA,EAAM,MAAA,mBAAA,GAAsB,aAAa,MAAW,KAAA,CAAA;AAEpD,EAAA,uBACG,IAAA,CAAA,WAAA,EAAA,EAAY,SAAW,EAAA,OAAA,CAAQ,WAC9B,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,UAAA,EAAA,EAAW,EAAG,EAAA,0BAAA,EAA2B,QAAW,EAAA,aAAA,EAAA,CAAA;AAAA,oBACrD,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,0BAAA;AAAA,QACR,EAAG,EAAA,oBAAA;AAAA,QACH,KAAA,EAAO,MAAO,CAAA,kBAAA,CAAmB,EAAE,CAAA;AAAA,QACnC,QAAU,EAAA,YAAA;AAAA,QACV,QAAU,EAAA,mBAAA;AAAA,QACV,SAAA,EAAW,mBAAsB,GAAA,OAAA,CAAQ,iBAAoB,GAAA,EAAA;AAAA,QAE5D,QAAa,EAAA,YAAA,CAAA,GAAA,CAAI,CAChB,GAAA,qBAAA,GAAA,CAAC,QAAwB,EAAA,EAAA,KAAA,EAAO,GAAI,CAAA,EAAA,EACjC,QAAI,EAAA,GAAA,CAAA,IAAA,EAAA,EADQ,GAAI,CAAA,IAEnB,CACD;AAAA;AAAA;AACH,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"SelectEnvironment.esm.js","sources":["../../../src/components/SelectEnvironment/SelectEnvironment.tsx"],"sourcesContent":["import { Select } from '@backstage/ui';\nimport { Environment } from '@kyverno/backstage-plugin-policy-reporter-common';\nimport { Key } from 'react';\nimport { usePolicyReportsFilters } from '../../hooks/usePolicyReportsFilters';\n\ntype SelectEnvironmentProps = {\n environments: Environment[];\n};\n\nexport const SelectEnvironment = ({ environments }: SelectEnvironmentProps) => {\n const { environment, setEnvironment } = usePolicyReportsFilters();\n\n const options = environments.map(env => ({\n value: env.entityRef,\n label: env.name,\n }));\n\n const handleChange = (key: Key | Key[] | null) => {\n if (key === null || Array.isArray(key)) return;\n setEnvironment(key as string);\n };\n\n return (\n <Select\n label=\"Environment\"\n selectionMode=\"single\"\n options={options}\n value={environment}\n onChange={handleChange}\n />\n );\n};\n"],"names":[],"mappings":";;;;AASO,MAAM,iBAAA,GAAoB,CAAC,EAAE,YAAA,EAAa,KAA8B;AAC7E,EAAA,MAAM,EAAE,WAAA,EAAa,cAAA,EAAe,GAAI,uBAAA,EAAwB;AAEhE,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,GAAA,CAAI,CAAA,GAAA,MAAQ;AAAA,IACvC,OAAO,GAAA,CAAI,SAAA;AAAA,IACX,OAAO,GAAA,CAAI;AAAA,GACb,CAAE,CAAA;AAEF,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAA4B;AAChD,IAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACxC,IAAA,cAAA,CAAe,GAAa,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,aAAA;AAAA,MACN,aAAA,EAAc,QAAA;AAAA,MACd,OAAA;AAAA,MACA,KAAA,EAAO,WAAA;AAAA,MACP,QAAA,EAAU;AAAA;AAAA,GACZ;AAEJ;;;;"}
@@ -1,50 +1,40 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import MenuItem from '@material-ui/core/MenuItem';
3
- import InputLabel from '@material-ui/core/InputLabel';
4
- import FormControl from '@material-ui/core/FormControl';
5
- import Select from '@material-ui/core/Select';
6
- import { makeStyles } from '@material-ui/core/styles';
7
- import { Checkbox, ListItemText } from '@material-ui/core';
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Select } from '@backstage/ui';
3
+ import { usePolicyReportsFilters } from '../../hooks/usePolicyReportsFilters.esm.js';
4
+ import { useNamespaces } from '../../hooks/useNamespaces.esm.js';
8
5
 
9
- const useStyles = makeStyles({
10
- formControl: {
11
- margin: 8,
12
- minWidth: 150
13
- }
14
- });
15
- const SelectNamespace = ({
16
- currentNamespaces,
17
- setNamespaces,
18
- availableNamespaces
19
- }) => {
20
- const classes = useStyles();
21
- const handleChange = (event) => {
22
- setNamespaces(event.target.value);
6
+ const SelectNamespace = () => {
7
+ const { filter, updateFilter, environment } = usePolicyReportsFilters();
8
+ const { namespaces: availableNamespaces } = useNamespaces(environment);
9
+ const options = availableNamespaces.map((ns) => ({ value: ns, label: ns }));
10
+ const handleChange = (key) => {
11
+ if (key === null) {
12
+ updateFilter({ namespaces: [] });
13
+ return;
14
+ }
15
+ if (!Array.isArray(key)) {
16
+ updateFilter({
17
+ namespaces: availableNamespaces.includes(key) ? [key] : []
18
+ });
19
+ return;
20
+ }
21
+ const filtered = key.filter(
22
+ (item) => availableNamespaces.includes(item)
23
+ );
24
+ updateFilter({ namespaces: filtered });
23
25
  };
24
- return /* @__PURE__ */ jsxs(FormControl, { className: classes.formControl, children: [
25
- /* @__PURE__ */ jsx(InputLabel, { id: "select-namespace-label", shrink: true, children: "Namespaces" }),
26
- /* @__PURE__ */ jsx(
27
- Select,
28
- {
29
- labelId: "select-namespace-label",
30
- id: "select-namespace",
31
- multiple: true,
32
- displayEmpty: true,
33
- value: currentNamespaces,
34
- renderValue: (selected) => {
35
- if (selected.length === 0) {
36
- return "All";
37
- }
38
- return selected.join(", ");
39
- },
40
- onChange: handleChange,
41
- children: availableNamespaces.map((namespace) => /* @__PURE__ */ jsxs(MenuItem, { value: namespace, children: [
42
- /* @__PURE__ */ jsx(Checkbox, { checked: currentNamespaces.includes(namespace) }),
43
- /* @__PURE__ */ jsx(ListItemText, { primary: namespace })
44
- ] }, namespace))
45
- }
46
- )
47
- ] });
26
+ return /* @__PURE__ */ jsx(
27
+ Select,
28
+ {
29
+ label: "Namespace",
30
+ selectionMode: "multiple",
31
+ options,
32
+ value: filter.namespaces ?? [],
33
+ onChange: handleChange,
34
+ placeholder: "All",
35
+ style: { width: 200 }
36
+ }
37
+ );
48
38
  };
49
39
 
50
40
  export { SelectNamespace };
@@ -1 +1 @@
1
- {"version":3,"file":"SelectNamespace.esm.js","sources":["../../../src/components/SelectNamespace/SelectNamespace.tsx"],"sourcesContent":["import MenuItem from '@material-ui/core/MenuItem';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Checkbox, ListItemText } from '@material-ui/core';\n\nconst useStyles = makeStyles({\n formControl: {\n margin: 8,\n minWidth: 150,\n },\n});\n\nexport type SelectNamespaceProps = {\n currentNamespaces: string[];\n setNamespaces: (namespaces: string[]) => void;\n availableNamespaces: string[];\n};\n\nexport const SelectNamespace = ({\n currentNamespaces,\n setNamespaces,\n availableNamespaces,\n}: SelectNamespaceProps) => {\n const classes = useStyles();\n\n const handleChange = (event: any) => {\n setNamespaces(event.target.value);\n };\n\n return (\n <FormControl className={classes.formControl}>\n <InputLabel id=\"select-namespace-label\" shrink>\n Namespaces\n </InputLabel>\n <Select\n labelId=\"select-namespace-label\"\n id=\"select-namespace\"\n multiple\n displayEmpty\n value={currentNamespaces}\n renderValue={selected => {\n if ((selected as string[]).length === 0) {\n return 'All';\n }\n\n return (selected as string[]).join(', ');\n }}\n onChange={handleChange}\n >\n {availableNamespaces.map(namespace => (\n <MenuItem key={namespace} value={namespace}>\n <Checkbox checked={currentNamespaces.includes(namespace)} />\n <ListItemText primary={namespace} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAOA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,WAAa,EAAA;AAAA,IACX,MAAQ,EAAA,CAAA;AAAA,IACR,QAAU,EAAA;AAAA;AAEd,CAAC,CAAA;AAQM,MAAM,kBAAkB,CAAC;AAAA,EAC9B,iBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAA4B,KAAA;AAC1B,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAM,MAAA,YAAA,GAAe,CAAC,KAAe,KAAA;AACnC,IAAc,aAAA,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,GAClC;AAEA,EAAA,uBACG,IAAA,CAAA,WAAA,EAAA,EAAY,SAAW,EAAA,OAAA,CAAQ,WAC9B,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,EAAA,EAAG,wBAAyB,EAAA,MAAA,EAAM,MAAC,QAE/C,EAAA,YAAA,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,wBAAA;AAAA,QACR,EAAG,EAAA,kBAAA;AAAA,QACH,QAAQ,EAAA,IAAA;AAAA,QACR,YAAY,EAAA,IAAA;AAAA,QACZ,KAAO,EAAA,iBAAA;AAAA,QACP,aAAa,CAAY,QAAA,KAAA;AACvB,UAAK,IAAA,QAAA,CAAsB,WAAW,CAAG,EAAA;AACvC,YAAO,OAAA,KAAA;AAAA;AAGT,UAAQ,OAAA,QAAA,CAAsB,KAAK,IAAI,CAAA;AAAA,SACzC;AAAA,QACA,QAAU,EAAA,YAAA;AAAA,QAET,8BAAoB,GAAI,CAAA,CAAA,SAAA,qBACtB,IAAA,CAAA,QAAA,EAAA,EAAyB,OAAO,SAC/B,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAS,EAAA,EAAA,OAAA,EAAS,iBAAkB,CAAA,QAAA,CAAS,SAAS,CAAG,EAAA,CAAA;AAAA,0BAC1D,GAAA,CAAC,YAAa,EAAA,EAAA,OAAA,EAAS,SAAW,EAAA;AAAA,SAAA,EAAA,EAFrB,SAGf,CACD;AAAA;AAAA;AACH,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"SelectNamespace.esm.js","sources":["../../../src/components/SelectNamespace/SelectNamespace.tsx"],"sourcesContent":["import { Select } from '@backstage/ui';\nimport { Key } from 'react';\nimport { usePolicyReportsFilters } from '../../hooks/usePolicyReportsFilters';\nimport { useNamespaces } from '../../hooks/useNamespaces';\n\nexport const SelectNamespace = () => {\n const { filter, updateFilter, environment } = usePolicyReportsFilters();\n const { namespaces: availableNamespaces } = useNamespaces(environment);\n\n const options = availableNamespaces.map(ns => ({ value: ns, label: ns }));\n\n const handleChange = (key: Key | Key[] | null) => {\n if (key === null) {\n updateFilter({ namespaces: [] });\n return;\n }\n\n if (!Array.isArray(key)) {\n updateFilter({\n namespaces: availableNamespaces.includes(key as string)\n ? [key as string]\n : [],\n });\n return;\n }\n\n const filtered = key.filter((item): item is string =>\n availableNamespaces.includes(item as string),\n );\n updateFilter({ namespaces: filtered });\n };\n\n return (\n <Select\n label=\"Namespace\"\n selectionMode=\"multiple\"\n options={options}\n value={filter.namespaces ?? []}\n onChange={handleChange}\n placeholder=\"All\"\n style={{ width: 200 }}\n />\n );\n};\n"],"names":[],"mappings":";;;;;AAKO,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,EAAE,MAAA,EAAQ,YAAA,EAAc,WAAA,KAAgB,uBAAA,EAAwB;AACtE,EAAA,MAAM,EAAE,UAAA,EAAY,mBAAA,EAAoB,GAAI,cAAc,WAAW,CAAA;AAErE,EAAA,MAAM,OAAA,GAAU,oBAAoB,GAAA,CAAI,CAAA,EAAA,MAAO,EAAE,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG,CAAE,CAAA;AAExE,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAA4B;AAChD,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,YAAA,CAAa,EAAE,UAAA,EAAY,EAAC,EAAG,CAAA;AAC/B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACvB,MAAA,YAAA,CAAa;AAAA,QACX,UAAA,EAAY,oBAAoB,QAAA,CAAS,GAAa,IAClD,CAAC,GAAa,IACd;AAAC,OACN,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,GAAA,CAAI,MAAA;AAAA,MAAO,CAAC,IAAA,KAC3B,mBAAA,CAAoB,QAAA,CAAS,IAAc;AAAA,KAC7C;AACA,IAAA,YAAA,CAAa,EAAE,UAAA,EAAY,QAAA,EAAU,CAAA;AAAA,EACvC,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,WAAA;AAAA,MACN,aAAA,EAAc,UAAA;AAAA,MACd,OAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,UAAA,IAAc,EAAC;AAAA,MAC7B,QAAA,EAAU,YAAA;AAAA,MACV,WAAA,EAAY,KAAA;AAAA,MACZ,KAAA,EAAO,EAAE,KAAA,EAAO,GAAA;AAAI;AAAA,GACtB;AAEJ;;;;"}
@@ -1,57 +1,46 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import MenuItem from '@material-ui/core/MenuItem';
3
- import InputLabel from '@material-ui/core/InputLabel';
4
- import FormControl from '@material-ui/core/FormControl';
5
- import Select from '@material-ui/core/Select';
6
- import { makeStyles } from '@material-ui/core/styles';
7
- import { Checkbox, ListItemText } from '@material-ui/core';
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Select } from '@backstage/ui';
3
+ import { usePolicyReportsFilters } from '../../hooks/usePolicyReportsFilters.esm.js';
8
4
 
9
- const SEVERITY_VALUES = [
10
- "unknown",
11
- "low",
12
- "medium",
13
- "high",
14
- "critical",
15
- "info"
5
+ const SEVERITY_OPTIONS = [
6
+ { value: "unknown", label: "Unknown" },
7
+ { value: "low", label: "Low" },
8
+ { value: "medium", label: "Medium" },
9
+ { value: "high", label: "High" },
10
+ { value: "critical", label: "Critical" },
11
+ { value: "info", label: "Info" }
16
12
  ];
17
- const useStyles = makeStyles({
18
- formControl: {
19
- margin: 8,
20
- minWidth: 150
21
- }
22
- });
23
- const SelectSeverity = ({
24
- currentSeverity,
25
- setSeverity
26
- }) => {
27
- const classes = useStyles();
28
- const handleChange = (event) => {
29
- setSeverity(event.target.value);
13
+ const validSeverities = SEVERITY_OPTIONS.map((option) => option.value);
14
+ const SelectSeverity = () => {
15
+ const { filter, updateFilter } = usePolicyReportsFilters();
16
+ const handleChange = (key) => {
17
+ if (key === null) {
18
+ updateFilter({ severities: [] });
19
+ return;
20
+ }
21
+ if (!Array.isArray(key)) {
22
+ updateFilter({
23
+ severities: validSeverities.includes(key) ? [key] : []
24
+ });
25
+ return;
26
+ }
27
+ const filteredSeverities = key.filter(
28
+ (item) => validSeverities.includes(item)
29
+ );
30
+ updateFilter({ severities: filteredSeverities });
30
31
  };
31
- return /* @__PURE__ */ jsxs(FormControl, { className: classes.formControl, children: [
32
- /* @__PURE__ */ jsx(InputLabel, { id: "select-severity-label", shrink: true, children: "Severity" }),
33
- /* @__PURE__ */ jsx(
34
- Select,
35
- {
36
- labelId: "select-severity-label",
37
- id: "select-severity",
38
- multiple: true,
39
- displayEmpty: true,
40
- value: currentSeverity,
41
- renderValue: (selected) => {
42
- if (selected.length === 0) {
43
- return "All";
44
- }
45
- return selected.join(", ");
46
- },
47
- onChange: handleChange,
48
- children: SEVERITY_VALUES.map((severity) => /* @__PURE__ */ jsxs(MenuItem, { value: severity, children: [
49
- /* @__PURE__ */ jsx(Checkbox, { checked: currentSeverity.includes(severity) }),
50
- /* @__PURE__ */ jsx(ListItemText, { primary: severity })
51
- ] }, severity))
52
- }
53
- )
54
- ] });
32
+ return /* @__PURE__ */ jsx(
33
+ Select,
34
+ {
35
+ label: "Severity",
36
+ selectionMode: "multiple",
37
+ options: SEVERITY_OPTIONS,
38
+ value: filter.severities ?? [],
39
+ onChange: handleChange,
40
+ placeholder: "All",
41
+ style: { width: 200 }
42
+ }
43
+ );
55
44
  };
56
45
 
57
46
  export { SelectSeverity };
@@ -1 +1 @@
1
- {"version":3,"file":"SelectSeverity.esm.js","sources":["../../../src/components/SelectSeverity/SelectSeverity.tsx"],"sourcesContent":["import MenuItem from '@material-ui/core/MenuItem';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport { Severity } from '@kyverno/backstage-plugin-policy-reporter-common';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Checkbox, ListItemText } from '@material-ui/core';\n\n// This could be moved into the common package if needed in multiple places\nconst SEVERITY_VALUES: Severity[] = [\n 'unknown',\n 'low',\n 'medium',\n 'high',\n 'critical',\n 'info',\n];\n\nconst useStyles = makeStyles({\n formControl: {\n margin: 8,\n minWidth: 150,\n },\n});\n\nexport type SelectSeverityProps = {\n currentSeverity: Severity[];\n setSeverity: (Status: Severity[]) => void;\n};\n\nexport const SelectSeverity = ({\n currentSeverity: currentSeverity,\n setSeverity: setSeverity,\n}: SelectSeverityProps) => {\n const classes = useStyles();\n\n const handleChange = (event: React.ChangeEvent<{ value: unknown }>) => {\n setSeverity(event.target.value as Severity[]);\n };\n\n return (\n <FormControl className={classes.formControl}>\n <InputLabel id=\"select-severity-label\" shrink>\n Severity\n </InputLabel>\n <Select\n labelId=\"select-severity-label\"\n id=\"select-severity\"\n multiple\n displayEmpty\n value={currentSeverity}\n renderValue={selected => {\n if ((selected as Severity[]).length === 0) {\n return 'All';\n }\n\n return (selected as Severity[]).join(', ');\n }}\n onChange={handleChange}\n >\n {SEVERITY_VALUES.map(severity => (\n <MenuItem key={severity} value={severity}>\n <Checkbox checked={currentSeverity.includes(severity)} />\n <ListItemText primary={severity} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AASA,MAAM,eAA8B,GAAA;AAAA,EAClC,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA;AAEA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,WAAa,EAAA;AAAA,IACX,MAAQ,EAAA,CAAA;AAAA,IACR,QAAU,EAAA;AAAA;AAEd,CAAC,CAAA;AAOM,MAAM,iBAAiB,CAAC;AAAA,EAC7B,eAAA;AAAA,EACA;AACF,CAA2B,KAAA;AACzB,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAM,MAAA,YAAA,GAAe,CAAC,KAAiD,KAAA;AACrE,IAAY,WAAA,CAAA,KAAA,CAAM,OAAO,KAAmB,CAAA;AAAA,GAC9C;AAEA,EAAA,uBACG,IAAA,CAAA,WAAA,EAAA,EAAY,SAAW,EAAA,OAAA,CAAQ,WAC9B,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,EAAA,EAAG,uBAAwB,EAAA,MAAA,EAAM,MAAC,QAE9C,EAAA,UAAA,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,uBAAA;AAAA,QACR,EAAG,EAAA,iBAAA;AAAA,QACH,QAAQ,EAAA,IAAA;AAAA,QACR,YAAY,EAAA,IAAA;AAAA,QACZ,KAAO,EAAA,eAAA;AAAA,QACP,aAAa,CAAY,QAAA,KAAA;AACvB,UAAK,IAAA,QAAA,CAAwB,WAAW,CAAG,EAAA;AACzC,YAAO,OAAA,KAAA;AAAA;AAGT,UAAQ,OAAA,QAAA,CAAwB,KAAK,IAAI,CAAA;AAAA,SAC3C;AAAA,QACA,QAAU,EAAA,YAAA;AAAA,QAET,0BAAgB,GAAI,CAAA,CAAA,QAAA,qBAClB,IAAA,CAAA,QAAA,EAAA,EAAwB,OAAO,QAC9B,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAS,EAAA,EAAA,OAAA,EAAS,eAAgB,CAAA,QAAA,CAAS,QAAQ,CAAG,EAAA,CAAA;AAAA,0BACvD,GAAA,CAAC,YAAa,EAAA,EAAA,OAAA,EAAS,QAAU,EAAA;AAAA,SAAA,EAAA,EAFpB,QAGf,CACD;AAAA;AAAA;AACH,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"SelectSeverity.esm.js","sources":["../../../src/components/SelectSeverity/SelectSeverity.tsx"],"sourcesContent":["import { Select } from '@backstage/ui';\nimport { Severity } from '@kyverno/backstage-plugin-policy-reporter-common';\nimport { Key } from 'react';\nimport { usePolicyReportsFilters } from '../../hooks/usePolicyReportsFilters';\n\nconst SEVERITY_OPTIONS: { value: Severity; label: string }[] = [\n { value: 'unknown', label: 'Unknown' },\n { value: 'low', label: 'Low' },\n { value: 'medium', label: 'Medium' },\n { value: 'high', label: 'High' },\n { value: 'critical', label: 'Critical' },\n { value: 'info', label: 'Info' },\n];\n\nconst validSeverities = SEVERITY_OPTIONS.map(option => option.value);\n\nexport const SelectSeverity = () => {\n const { filter, updateFilter } = usePolicyReportsFilters();\n\n const handleChange = (key: Key | Key[] | null) => {\n if (key === null) {\n updateFilter({ severities: [] });\n return;\n }\n\n if (!Array.isArray(key)) {\n updateFilter({\n severities: validSeverities.includes(key as Severity)\n ? [key as Severity]\n : [],\n });\n return;\n }\n\n const filteredSeverities = key.filter((item): item is Severity =>\n validSeverities.includes(item as Severity),\n );\n updateFilter({ severities: filteredSeverities });\n };\n\n return (\n <Select\n label=\"Severity\"\n selectionMode=\"multiple\"\n options={SEVERITY_OPTIONS}\n value={filter.severities ?? []}\n onChange={handleChange}\n placeholder=\"All\"\n style={{ width: 200 }}\n />\n );\n};\n"],"names":[],"mappings":";;;;AAKA,MAAM,gBAAA,GAAyD;AAAA,EAC7D,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,EACrC,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAAA,EACvC,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA;AAC1B,CAAA;AAEA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,GAAA,CAAI,CAAA,MAAA,KAAU,OAAO,KAAK,CAAA;AAE5D,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,EAAE,MAAA,EAAQ,YAAA,EAAa,GAAI,uBAAA,EAAwB;AAEzD,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAA4B;AAChD,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,YAAA,CAAa,EAAE,UAAA,EAAY,EAAC,EAAG,CAAA;AAC/B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACvB,MAAA,YAAA,CAAa;AAAA,QACX,UAAA,EAAY,gBAAgB,QAAA,CAAS,GAAe,IAChD,CAAC,GAAe,IAChB;AAAC,OACN,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,qBAAqB,GAAA,CAAI,MAAA;AAAA,MAAO,CAAC,IAAA,KACrC,eAAA,CAAgB,QAAA,CAAS,IAAgB;AAAA,KAC3C;AACA,IAAA,YAAA,CAAa,EAAE,UAAA,EAAY,kBAAA,EAAoB,CAAA;AAAA,EACjD,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,UAAA;AAAA,MACN,aAAA,EAAc,UAAA;AAAA,MACd,OAAA,EAAS,gBAAA;AAAA,MACT,KAAA,EAAO,MAAA,CAAO,UAAA,IAAc,EAAC;AAAA,MAC7B,QAAA,EAAU,YAAA;AAAA,MACV,WAAA,EAAY,KAAA;AAAA,MACZ,KAAA,EAAO,EAAE,KAAA,EAAO,GAAA;AAAI;AAAA,GACtB;AAEJ;;;;"}
@@ -1,57 +1,46 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import MenuItem from '@material-ui/core/MenuItem';
3
- import InputLabel from '@material-ui/core/InputLabel';
4
- import FormControl from '@material-ui/core/FormControl';
5
- import Select from '@material-ui/core/Select';
6
- import { makeStyles } from '@material-ui/core/styles';
7
- import { Checkbox, ListItemText } from '@material-ui/core';
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Select } from '@backstage/ui';
3
+ import { usePolicyReportsFilters } from '../../hooks/usePolicyReportsFilters.esm.js';
8
4
 
9
- const STATUS_VALUES = [
10
- "fail",
11
- "skip",
12
- "pass",
13
- "warn",
14
- "error",
15
- "summary"
5
+ const STATUS_OPTIONS = [
6
+ { value: "fail", label: "Fail" },
7
+ { value: "skip", label: "Skip" },
8
+ { value: "pass", label: "Pass" },
9
+ { value: "warn", label: "Warn" },
10
+ { value: "error", label: "Error" },
11
+ { value: "summary", label: "Summary" }
16
12
  ];
17
- const useStyles = makeStyles({
18
- formControl: {
19
- margin: 8,
20
- minWidth: 150
21
- }
22
- });
23
- const SelectStatus = ({
24
- currentStatus,
25
- setStatus
26
- }) => {
27
- const classes = useStyles();
28
- const handleChange = (event) => {
29
- setStatus(event.target.value);
13
+ const validStatuses = STATUS_OPTIONS.map((option) => option.value);
14
+ const SelectStatus = () => {
15
+ const { filter, updateFilter } = usePolicyReportsFilters();
16
+ const handleChange = (key) => {
17
+ if (key === null) {
18
+ updateFilter({ status: [] });
19
+ return;
20
+ }
21
+ if (!Array.isArray(key)) {
22
+ updateFilter({
23
+ status: validStatuses.includes(key) ? [key] : []
24
+ });
25
+ return;
26
+ }
27
+ const filteredStatuses = key.filter(
28
+ (item) => validStatuses.includes(item)
29
+ );
30
+ updateFilter({ status: filteredStatuses });
30
31
  };
31
- return /* @__PURE__ */ jsxs(FormControl, { className: classes.formControl, children: [
32
- /* @__PURE__ */ jsx(InputLabel, { id: "select-status-label", shrink: true, children: "Status" }),
33
- /* @__PURE__ */ jsx(
34
- Select,
35
- {
36
- labelId: "select-status-label",
37
- id: "select-status",
38
- multiple: true,
39
- displayEmpty: true,
40
- value: currentStatus,
41
- renderValue: (selected) => {
42
- if (selected.length === 0) {
43
- return "All";
44
- }
45
- return selected.join(", ");
46
- },
47
- onChange: handleChange,
48
- children: STATUS_VALUES.map((status) => /* @__PURE__ */ jsxs(MenuItem, { value: status, children: [
49
- /* @__PURE__ */ jsx(Checkbox, { checked: currentStatus.includes(status) }),
50
- /* @__PURE__ */ jsx(ListItemText, { primary: status })
51
- ] }, status))
52
- }
53
- )
54
- ] });
32
+ return /* @__PURE__ */ jsx(
33
+ Select,
34
+ {
35
+ label: "Status",
36
+ selectionMode: "multiple",
37
+ options: STATUS_OPTIONS,
38
+ value: filter.status ?? [],
39
+ onChange: handleChange,
40
+ placeholder: "All",
41
+ style: { width: 200 }
42
+ }
43
+ );
55
44
  };
56
45
 
57
46
  export { SelectStatus };
@@ -1 +1 @@
1
- {"version":3,"file":"SelectStatus.esm.js","sources":["../../../src/components/SelectStatus/SelectStatus.tsx"],"sourcesContent":["import MenuItem from '@material-ui/core/MenuItem';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport { Status } from '@kyverno/backstage-plugin-policy-reporter-common';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Checkbox, ListItemText } from '@material-ui/core';\n\n// This could be moved into the common package if needed in multiple places\nconst STATUS_VALUES: Status[] = [\n 'fail',\n 'skip',\n 'pass',\n 'warn',\n 'error',\n 'summary',\n];\n\nconst useStyles = makeStyles({\n formControl: {\n margin: 8,\n minWidth: 150,\n },\n});\n\nexport type SelectStatusProps = {\n currentStatus: Status[];\n setStatus: (Status: Status[]) => void;\n};\n\nexport const SelectStatus = ({\n currentStatus,\n setStatus,\n}: SelectStatusProps) => {\n const classes = useStyles();\n\n const handleChange = (event: React.ChangeEvent<{ value: unknown }>) => {\n setStatus(event.target.value as Status[]);\n };\n\n return (\n <FormControl className={classes.formControl}>\n <InputLabel id=\"select-status-label\" shrink>\n Status\n </InputLabel>\n <Select\n labelId=\"select-status-label\"\n id=\"select-status\"\n multiple\n displayEmpty\n value={currentStatus}\n renderValue={selected => {\n if ((selected as Status[]).length === 0) {\n return 'All';\n }\n\n return (selected as Status[]).join(', ');\n }}\n onChange={handleChange}\n >\n {STATUS_VALUES.map(status => (\n <MenuItem key={status} value={status}>\n <Checkbox checked={currentStatus.includes(status)} />\n <ListItemText primary={status} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AASA,MAAM,aAA0B,GAAA;AAAA,EAC9B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAEA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,WAAa,EAAA;AAAA,IACX,MAAQ,EAAA,CAAA;AAAA,IACR,QAAU,EAAA;AAAA;AAEd,CAAC,CAAA;AAOM,MAAM,eAAe,CAAC;AAAA,EAC3B,aAAA;AAAA,EACA;AACF,CAAyB,KAAA;AACvB,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAM,MAAA,YAAA,GAAe,CAAC,KAAiD,KAAA;AACrE,IAAU,SAAA,CAAA,KAAA,CAAM,OAAO,KAAiB,CAAA;AAAA,GAC1C;AAEA,EAAA,uBACG,IAAA,CAAA,WAAA,EAAA,EAAY,SAAW,EAAA,OAAA,CAAQ,WAC9B,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,EAAA,EAAG,qBAAsB,EAAA,MAAA,EAAM,MAAC,QAE5C,EAAA,QAAA,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,qBAAA;AAAA,QACR,EAAG,EAAA,eAAA;AAAA,QACH,QAAQ,EAAA,IAAA;AAAA,QACR,YAAY,EAAA,IAAA;AAAA,QACZ,KAAO,EAAA,aAAA;AAAA,QACP,aAAa,CAAY,QAAA,KAAA;AACvB,UAAK,IAAA,QAAA,CAAsB,WAAW,CAAG,EAAA;AACvC,YAAO,OAAA,KAAA;AAAA;AAGT,UAAQ,OAAA,QAAA,CAAsB,KAAK,IAAI,CAAA;AAAA,SACzC;AAAA,QACA,QAAU,EAAA,YAAA;AAAA,QAET,wBAAc,GAAI,CAAA,CAAA,MAAA,qBAChB,IAAA,CAAA,QAAA,EAAA,EAAsB,OAAO,MAC5B,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAS,EAAA,EAAA,OAAA,EAAS,aAAc,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA,CAAA;AAAA,0BACnD,GAAA,CAAC,YAAa,EAAA,EAAA,OAAA,EAAS,MAAQ,EAAA;AAAA,SAAA,EAAA,EAFlB,MAGf,CACD;AAAA;AAAA;AACH,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"SelectStatus.esm.js","sources":["../../../src/components/SelectStatus/SelectStatus.tsx"],"sourcesContent":["import { Status } from '@kyverno/backstage-plugin-policy-reporter-common';\nimport { Select } from '@backstage/ui';\nimport { Key } from 'react';\nimport { usePolicyReportsFilters } from '../../hooks/usePolicyReportsFilters';\n\nconst STATUS_OPTIONS: { value: Status; label: string }[] = [\n { value: 'fail', label: 'Fail' },\n { value: 'skip', label: 'Skip' },\n { value: 'pass', label: 'Pass' },\n { value: 'warn', label: 'Warn' },\n { value: 'error', label: 'Error' },\n { value: 'summary', label: 'Summary' },\n];\n\nconst validStatuses = STATUS_OPTIONS.map(option => option.value);\n\nexport const SelectStatus = () => {\n const { filter, updateFilter } = usePolicyReportsFilters();\n\n const handleChange = (key: Key | Key[] | null) => {\n if (key === null) {\n updateFilter({ status: [] });\n return;\n }\n\n if (!Array.isArray(key)) {\n updateFilter({\n status: validStatuses.includes(key as Status) ? [key as Status] : [],\n });\n return;\n }\n\n const filteredStatuses = key.filter((item): item is Status =>\n validStatuses.includes(item as Status),\n );\n updateFilter({ status: filteredStatuses });\n };\n\n return (\n <Select\n label=\"Status\"\n selectionMode=\"multiple\"\n options={STATUS_OPTIONS}\n value={filter.status ?? []}\n onChange={handleChange}\n placeholder=\"All\"\n style={{ width: 200 }}\n />\n );\n};\n"],"names":[],"mappings":";;;;AAKA,MAAM,cAAA,GAAqD;AAAA,EACzD,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,EACjC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA;AAC7B,CAAA;AAEA,MAAM,aAAA,GAAgB,cAAA,CAAe,GAAA,CAAI,CAAA,MAAA,KAAU,OAAO,KAAK,CAAA;AAExD,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM,EAAE,MAAA,EAAQ,YAAA,EAAa,GAAI,uBAAA,EAAwB;AAEzD,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAA4B;AAChD,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,YAAA,CAAa,EAAE,MAAA,EAAQ,EAAC,EAAG,CAAA;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACvB,MAAA,YAAA,CAAa;AAAA,QACX,MAAA,EAAQ,cAAc,QAAA,CAAS,GAAa,IAAI,CAAC,GAAa,IAAI;AAAC,OACpE,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,mBAAmB,GAAA,CAAI,MAAA;AAAA,MAAO,CAAC,IAAA,KACnC,aAAA,CAAc,QAAA,CAAS,IAAc;AAAA,KACvC;AACA,IAAA,YAAA,CAAa,EAAE,MAAA,EAAQ,gBAAA,EAAkB,CAAA;AAAA,EAC3C,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,aAAA,EAAc,UAAA;AAAA,MACd,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,MAAA,CAAO,MAAA,IAAU,EAAC;AAAA,MACzB,QAAA,EAAU,YAAA;AAAA,MACV,WAAA,EAAY,KAAA;AAAA,MACZ,KAAA,EAAO,EAAE,KAAA,EAAO,GAAA;AAAI;AAAA,GACtB;AAEJ;;;;"}
@@ -1,41 +1,17 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import Chip from '@material-ui/core/Chip';
3
- import makeStyles from '@material-ui/core/styles/makeStyles';
2
+ import { Badge } from '@backstage/ui';
4
3
 
5
- const useStyles = makeStyles((theme) => ({
6
- error: {
7
- backgroundColor: theme.palette.error.main,
8
- color: theme.palette.error.contrastText
9
- },
10
- success: {
11
- backgroundColor: theme.palette.success.main,
12
- color: theme.palette.success.contrastText
13
- },
14
- warning: {
15
- backgroundColor: theme.palette.warning.main,
16
- color: theme.palette.warning.contrastText
17
- },
18
- info: {
19
- backgroundColor: theme.palette.info.main,
20
- color: theme.palette.info.contrastText
21
- }
22
- }));
4
+ const severityStyles = {
5
+ high: { backgroundColor: "var(--bui-bg-danger)" },
6
+ critical: { backgroundColor: "var(--bui-bg-danger)" },
7
+ medium: { backgroundColor: "var(--bui-bg-warning)" },
8
+ low: { backgroundColor: "var(--bui-bg-success)" },
9
+ info: { backgroundColor: "var(--bui-bg-info)" },
10
+ unknown: {}
11
+ };
23
12
  const SeverityComponent = ({ severity }) => {
24
- const classes = useStyles();
25
- switch (severity) {
26
- case "high":
27
- return /* @__PURE__ */ jsx(Chip, { label: severity, className: classes.error });
28
- case "low":
29
- return /* @__PURE__ */ jsx(Chip, { label: severity, className: classes.success });
30
- case "medium":
31
- return /* @__PURE__ */ jsx(Chip, { label: severity, className: classes.warning });
32
- case "info":
33
- return /* @__PURE__ */ jsx(Chip, { label: severity, className: classes.info });
34
- case "critical":
35
- return /* @__PURE__ */ jsx(Chip, { label: severity, className: classes.error });
36
- default:
37
- return null;
38
- }
13
+ if (!severity) return null;
14
+ return /* @__PURE__ */ jsx(Badge, { style: severityStyles[severity], children: severity });
39
15
  };
40
16
 
41
17
  export { SeverityComponent };
@@ -1 +1 @@
1
- {"version":3,"file":"SeverityComponent.esm.js","sources":["../../../src/components/SeverityComponent/SeverityComponent.tsx"],"sourcesContent":["import Chip from '@material-ui/core/Chip';\nimport { Severity } from '@kyverno/backstage-plugin-policy-reporter-common';\nimport makeStyles from '@material-ui/core/styles/makeStyles';\n\nconst useStyles = makeStyles((theme: any) => ({\n error: {\n backgroundColor: theme.palette.error.main,\n color: theme.palette.error.contrastText,\n },\n success: {\n backgroundColor: theme.palette.success.main,\n color: theme.palette.success.contrastText,\n },\n warning: {\n backgroundColor: theme.palette.warning.main,\n color: theme.palette.warning.contrastText,\n },\n info: {\n backgroundColor: theme.palette.info.main,\n color: theme.palette.info.contrastText,\n },\n}));\n\ntype SeverityComponentProps = {\n severity: Severity | null;\n};\n\nexport const SeverityComponent = ({ severity }: SeverityComponentProps) => {\n const classes = useStyles();\n switch (severity) {\n case 'high':\n return <Chip label={severity} className={classes.error} />;\n case 'low':\n return <Chip label={severity} className={classes.success} />;\n case 'medium':\n return <Chip label={severity} className={classes.warning} />;\n case 'info':\n return <Chip label={severity} className={classes.info} />;\n case 'critical':\n return <Chip label={severity} className={classes.error} />;\n default:\n return null;\n }\n};\n"],"names":[],"mappings":";;;;AAIA,MAAM,SAAA,GAAY,UAAW,CAAA,CAAC,KAAgB,MAAA;AAAA,EAC5C,KAAO,EAAA;AAAA,IACL,eAAA,EAAiB,KAAM,CAAA,OAAA,CAAQ,KAAM,CAAA,IAAA;AAAA,IACrC,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,KAAM,CAAA;AAAA,GAC7B;AAAA,EACA,OAAS,EAAA;AAAA,IACP,eAAA,EAAiB,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA;AAAA,IACvC,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA;AAAA,GAC/B;AAAA,EACA,OAAS,EAAA;AAAA,IACP,eAAA,EAAiB,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA;AAAA,IACvC,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA;AAAA,GAC/B;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,eAAA,EAAiB,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,IAAA;AAAA,IACpC,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA;AAAA;AAE9B,CAAE,CAAA,CAAA;AAMK,MAAM,iBAAoB,GAAA,CAAC,EAAE,QAAA,EAAuC,KAAA;AACzE,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,QAAQ,QAAU;AAAA,IAChB,KAAK,MAAA;AACH,MAAA,2BAAQ,IAAK,EAAA,EAAA,KAAA,EAAO,QAAU,EAAA,SAAA,EAAW,QAAQ,KAAO,EAAA,CAAA;AAAA,IAC1D,KAAK,KAAA;AACH,MAAA,2BAAQ,IAAK,EAAA,EAAA,KAAA,EAAO,QAAU,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,IAC5D,KAAK,QAAA;AACH,MAAA,2BAAQ,IAAK,EAAA,EAAA,KAAA,EAAO,QAAU,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,IAC5D,KAAK,MAAA;AACH,MAAA,2BAAQ,IAAK,EAAA,EAAA,KAAA,EAAO,QAAU,EAAA,SAAA,EAAW,QAAQ,IAAM,EAAA,CAAA;AAAA,IACzD,KAAK,UAAA;AACH,MAAA,2BAAQ,IAAK,EAAA,EAAA,KAAA,EAAO,QAAU,EAAA,SAAA,EAAW,QAAQ,KAAO,EAAA,CAAA;AAAA,IAC1D;AACE,MAAO,OAAA,IAAA;AAAA;AAEb;;;;"}
1
+ {"version":3,"file":"SeverityComponent.esm.js","sources":["../../../src/components/SeverityComponent/SeverityComponent.tsx"],"sourcesContent":["import { Badge } from '@backstage/ui';\nimport { Severity } from '@kyverno/backstage-plugin-policy-reporter-common';\n\ntype SeverityComponentProps = {\n severity: Severity | null;\n};\n\nconst severityStyles: Record<string, React.CSSProperties> = {\n high: { backgroundColor: 'var(--bui-bg-danger)' },\n critical: { backgroundColor: 'var(--bui-bg-danger)' },\n medium: { backgroundColor: 'var(--bui-bg-warning)' },\n low: { backgroundColor: 'var(--bui-bg-success)' },\n info: { backgroundColor: 'var(--bui-bg-info)' },\n unknown: {},\n};\n\nexport const SeverityComponent = ({ severity }: SeverityComponentProps) => {\n if (!severity) return null;\n return <Badge style={severityStyles[severity]}>{severity}</Badge>;\n};\n"],"names":[],"mappings":";;;AAOA,MAAM,cAAA,GAAsD;AAAA,EAC1D,IAAA,EAAM,EAAE,eAAA,EAAiB,sBAAA,EAAuB;AAAA,EAChD,QAAA,EAAU,EAAE,eAAA,EAAiB,sBAAA,EAAuB;AAAA,EACpD,MAAA,EAAQ,EAAE,eAAA,EAAiB,uBAAA,EAAwB;AAAA,EACnD,GAAA,EAAK,EAAE,eAAA,EAAiB,uBAAA,EAAwB;AAAA,EAChD,IAAA,EAAM,EAAE,eAAA,EAAiB,oBAAA,EAAqB;AAAA,EAC9C,SAAS;AACX,CAAA;AAEO,MAAM,iBAAA,GAAoB,CAAC,EAAE,QAAA,EAAS,KAA8B;AACzE,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,2BAAQ,KAAA,EAAA,EAAM,KAAA,EAAO,cAAA,CAAe,QAAQ,GAAI,QAAA,EAAA,QAAA,EAAS,CAAA;AAC3D;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"StatusComponent.esm.js","sources":["../../../src/components/StatusComponent/StatusComponent.tsx"],"sourcesContent":["import {\n StatusAborted,\n StatusError,\n StatusOK,\n StatusWarning,\n} from '@backstage/core-components';\nimport type { Status } from '@kyverno/backstage-plugin-policy-reporter-common';\n\ntype StatusComponentProps = {\n status: Status;\n};\n\nexport const StatusComponent = ({ status }: StatusComponentProps) => {\n switch (status) {\n case 'pass':\n return <StatusOK>PASS</StatusOK>;\n case 'error':\n return <StatusError>ERROR</StatusError>;\n case 'fail':\n return <StatusError>FAIL</StatusError>;\n case 'skip':\n return <StatusAborted>SKIP</StatusAborted>;\n case 'warn':\n return <StatusWarning>WARN</StatusWarning>;\n default:\n return null;\n }\n};\n"],"names":[],"mappings":";;;AAYO,MAAM,eAAkB,GAAA,CAAC,EAAE,MAAA,EAAmC,KAAA;AACnE,EAAA,QAAQ,MAAQ;AAAA,IACd,KAAK,MAAA;AACH,MAAO,uBAAA,GAAA,CAAC,YAAS,QAAI,EAAA,MAAA,EAAA,CAAA;AAAA,IACvB,KAAK,OAAA;AACH,MAAO,uBAAA,GAAA,CAAC,eAAY,QAAK,EAAA,OAAA,EAAA,CAAA;AAAA,IAC3B,KAAK,MAAA;AACH,MAAO,uBAAA,GAAA,CAAC,eAAY,QAAI,EAAA,MAAA,EAAA,CAAA;AAAA,IAC1B,KAAK,MAAA;AACH,MAAO,uBAAA,GAAA,CAAC,iBAAc,QAAI,EAAA,MAAA,EAAA,CAAA;AAAA,IAC5B,KAAK,MAAA;AACH,MAAO,uBAAA,GAAA,CAAC,iBAAc,QAAI,EAAA,MAAA,EAAA,CAAA;AAAA,IAC5B;AACE,MAAO,OAAA,IAAA;AAAA;AAEb;;;;"}
1
+ {"version":3,"file":"StatusComponent.esm.js","sources":["../../../src/components/StatusComponent/StatusComponent.tsx"],"sourcesContent":["import {\n StatusAborted,\n StatusError,\n StatusOK,\n StatusWarning,\n} from '@backstage/core-components';\nimport type { Status } from '@kyverno/backstage-plugin-policy-reporter-common';\n\ntype StatusComponentProps = {\n status: Status;\n};\n\nexport const StatusComponent = ({ status }: StatusComponentProps) => {\n switch (status) {\n case 'pass':\n return <StatusOK>PASS</StatusOK>;\n case 'error':\n return <StatusError>ERROR</StatusError>;\n case 'fail':\n return <StatusError>FAIL</StatusError>;\n case 'skip':\n return <StatusAborted>SKIP</StatusAborted>;\n case 'warn':\n return <StatusWarning>WARN</StatusWarning>;\n default:\n return null;\n }\n};\n"],"names":[],"mappings":";;;AAYO,MAAM,eAAA,GAAkB,CAAC,EAAE,MAAA,EAAO,KAA4B;AACnE,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,YAAS,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,IACvB,KAAK,OAAA;AACH,MAAA,uBAAO,GAAA,CAAC,eAAY,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,IAC3B,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,eAAY,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,IAC1B,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,iBAAc,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,IAC5B,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,iBAAc,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,IAC5B;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;;;;"}
@@ -1,11 +1,9 @@
1
- import { useState } from 'react';
2
1
  import { useAsync } from 'react-use';
3
2
  import { catalogApiRef, CATALOG_FILTER_EXISTS } from '@backstage/plugin-catalog-react';
4
3
  import { useApi } from '@backstage/core-plugin-api';
5
4
 
6
5
  const useEntityEnvironment = (entity, annotationsState) => {
7
6
  const catalogApi = useApi(catalogApiRef);
8
- const [currentEnvironment, setCurrentEnvironment] = useState(void 0);
9
7
  const { value: environments, loading: environmentsLoading } = useAsync(async () => {
10
8
  if (!annotationsState) return void 0;
11
9
  const dependencies = entity.spec?.dependsOn;
@@ -29,15 +27,9 @@ const useEntityEnvironment = (entity, annotationsState) => {
29
27
  });
30
28
  }
31
29
  });
32
- setCurrentEnvironment(environmentList[0]);
33
30
  return environmentList;
34
31
  }, [entity]);
35
- return {
36
- environments,
37
- environmentsLoading,
38
- currentEnvironment,
39
- setCurrentEnvironment
40
- };
32
+ return { environments, environmentsLoading };
41
33
  };
42
34
 
43
35
  export { useEntityEnvironment };