@red-hat-developer-hub/backstage-plugin-adoption-insights 0.0.2
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.
- package/CHANGELOG.md +9 -0
- package/README.md +88 -0
- package/app-config.dynamic.yaml +16 -0
- package/dist/api/index.esm.js +106 -0
- package/dist/api/index.esm.js.map +1 -0
- package/dist/components/ActiveUsers/ActiveUsers.esm.js +125 -0
- package/dist/components/ActiveUsers/ActiveUsers.esm.js.map +1 -0
- package/dist/components/ActiveUsers/CustomLegend.esm.js +58 -0
- package/dist/components/ActiveUsers/CustomLegend.esm.js.map +1 -0
- package/dist/components/ActiveUsers/CustomTooltip.esm.js +87 -0
- package/dist/components/ActiveUsers/CustomTooltip.esm.js.map +1 -0
- package/dist/components/ActiveUsers/ExportCSVButton.esm.js +75 -0
- package/dist/components/ActiveUsers/ExportCSVButton.esm.js.map +1 -0
- package/dist/components/ActiveUsers/index.esm.js +6 -0
- package/dist/components/ActiveUsers/index.esm.js.map +1 -0
- package/dist/components/AdoptionInsightsPage/AdoptionInsightsPage.esm.js +29 -0
- package/dist/components/AdoptionInsightsPage/AdoptionInsightsPage.esm.js.map +1 -0
- package/dist/components/AdoptionInsightsPage/index.esm.js +2 -0
- package/dist/components/AdoptionInsightsPage/index.esm.js.map +1 -0
- package/dist/components/CardFooter/TableFooterPagination.esm.js +70 -0
- package/dist/components/CardFooter/TableFooterPagination.esm.js.map +1 -0
- package/dist/components/CardFooter/index.esm.js +6 -0
- package/dist/components/CardFooter/index.esm.js.map +1 -0
- package/dist/components/CardWrapper/CardWrapper.esm.js +42 -0
- package/dist/components/CardWrapper/CardWrapper.esm.js.map +1 -0
- package/dist/components/CardWrapper/index.esm.js +6 -0
- package/dist/components/CardWrapper/index.esm.js.map +1 -0
- package/dist/components/CatalogEntities/CatalogEntities.esm.js +158 -0
- package/dist/components/CatalogEntities/CatalogEntities.esm.js.map +1 -0
- package/dist/components/CatalogEntities/FilterDropdown.esm.js +33 -0
- package/dist/components/CatalogEntities/FilterDropdown.esm.js.map +1 -0
- package/dist/components/CatalogEntities/index.esm.js +6 -0
- package/dist/components/CatalogEntities/index.esm.js.map +1 -0
- package/dist/components/Common/CustomCursor.esm.js +22 -0
- package/dist/components/Common/CustomCursor.esm.js.map +1 -0
- package/dist/components/Common/EmptyChartState.esm.js +9 -0
- package/dist/components/Common/EmptyChartState.esm.js.map +1 -0
- package/dist/components/Common/PermissionRequiredIcon.esm.js +9 -0
- package/dist/components/Common/PermissionRequiredIcon.esm.js.map +1 -0
- package/dist/components/Common/PermissionRequiredState.esm.js +43 -0
- package/dist/components/Common/PermissionRequiredState.esm.js.map +1 -0
- package/dist/components/Header/DateRangeContext.esm.js +34 -0
- package/dist/components/Header/DateRangeContext.esm.js.map +1 -0
- package/dist/components/Header/DateRangePicker.esm.js +160 -0
- package/dist/components/Header/DateRangePicker.esm.js.map +1 -0
- package/dist/components/Header/Header.esm.js +195 -0
- package/dist/components/Header/Header.esm.js.map +1 -0
- package/dist/components/Header/index.esm.js +6 -0
- package/dist/components/Header/index.esm.js.map +1 -0
- package/dist/components/Plugins/Plugins.esm.js +113 -0
- package/dist/components/Plugins/Plugins.esm.js.map +1 -0
- package/dist/components/Plugins/index.esm.js +6 -0
- package/dist/components/Plugins/index.esm.js.map +1 -0
- package/dist/components/Searches/CustomTooltip.esm.js +66 -0
- package/dist/components/Searches/CustomTooltip.esm.js.map +1 -0
- package/dist/components/Searches/Searches.esm.js +106 -0
- package/dist/components/Searches/Searches.esm.js.map +1 -0
- package/dist/components/Searches/index.esm.js +6 -0
- package/dist/components/Searches/index.esm.js.map +1 -0
- package/dist/components/Techdocs/Techdocs.esm.js +129 -0
- package/dist/components/Techdocs/Techdocs.esm.js.map +1 -0
- package/dist/components/Techdocs/index.esm.js +6 -0
- package/dist/components/Techdocs/index.esm.js.map +1 -0
- package/dist/components/Templates/Templates.esm.js +118 -0
- package/dist/components/Templates/Templates.esm.js.map +1 -0
- package/dist/components/Templates/index.esm.js +6 -0
- package/dist/components/Templates/index.esm.js.map +1 -0
- package/dist/components/Users/Info.esm.js +39 -0
- package/dist/components/Users/Info.esm.js.map +1 -0
- package/dist/components/Users/Tooltip.esm.js +48 -0
- package/dist/components/Users/Tooltip.esm.js.map +1 -0
- package/dist/components/Users/Users.esm.js +143 -0
- package/dist/components/Users/Users.esm.js.map +1 -0
- package/dist/components/Users/index.esm.js +6 -0
- package/dist/components/Users/index.esm.js.map +1 -0
- package/dist/hooks/useActiveUsers.esm.js +44 -0
- package/dist/hooks/useActiveUsers.esm.js.map +1 -0
- package/dist/hooks/useAdoptionInsightsEventsReadPermission.esm.js +15 -0
- package/dist/hooks/useAdoptionInsightsEventsReadPermission.esm.js.map +1 -0
- package/dist/hooks/useCatalogEntities.esm.js +45 -0
- package/dist/hooks/useCatalogEntities.esm.js.map +1 -0
- package/dist/hooks/usePlugins.esm.js +44 -0
- package/dist/hooks/usePlugins.esm.js.map +1 -0
- package/dist/hooks/useSearches.esm.js +43 -0
- package/dist/hooks/useSearches.esm.js.map +1 -0
- package/dist/hooks/useTechdocs.esm.js +41 -0
- package/dist/hooks/useTechdocs.esm.js.map +1 -0
- package/dist/hooks/useTemplates.esm.js +43 -0
- package/dist/hooks/useTemplates.esm.js.map +1 -0
- package/dist/hooks/useUsers.esm.js +36 -0
- package/dist/hooks/useUsers.esm.js.map +1 -0
- package/dist/images/permission-required.svg +48 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.esm.js +7 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/plugin.esm.js +34 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/routes.esm.js +8 -0
- package/dist/routes.esm.js.map +1 -0
- package/dist/utils/constants.esm.js +33 -0
- package/dist/utils/constants.esm.js.map +1 -0
- package/dist/utils/utils.esm.js +148 -0
- package/dist/utils/utils.esm.js.map +1 -0
- package/package.json +83 -0
@@ -0,0 +1,160 @@
|
|
1
|
+
import React__default from 'react';
|
2
|
+
import Box from '@mui/material/Box';
|
3
|
+
import Grid from '@mui/material/Grid';
|
4
|
+
import TextField from '@mui/material/TextField';
|
5
|
+
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
|
6
|
+
import { StaticDatePicker } from '@mui/x-date-pickers/StaticDatePicker';
|
7
|
+
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
|
8
|
+
import { PickersDay } from '@mui/x-date-pickers/PickersDay';
|
9
|
+
import { isBefore, isAfter, isSameDay } from 'date-fns';
|
10
|
+
import { DatePicker } from '@mui/x-date-pickers';
|
11
|
+
import Divider from '@mui/material/Divider';
|
12
|
+
import Typography from '@mui/material/Typography';
|
13
|
+
|
14
|
+
const DateRangePicker = ({
|
15
|
+
startDate,
|
16
|
+
setStartDate,
|
17
|
+
endDate,
|
18
|
+
setEndDate
|
19
|
+
}) => {
|
20
|
+
const handleDateChange = React__default.useCallback(
|
21
|
+
(date) => {
|
22
|
+
if (!date) return;
|
23
|
+
if (!startDate || startDate && endDate) {
|
24
|
+
setStartDate(date);
|
25
|
+
setEndDate(null);
|
26
|
+
} else if (isBefore(date, startDate)) {
|
27
|
+
setStartDate(date);
|
28
|
+
} else {
|
29
|
+
setEndDate(date);
|
30
|
+
}
|
31
|
+
},
|
32
|
+
[startDate, endDate, setStartDate, setEndDate]
|
33
|
+
);
|
34
|
+
const handleStartDateChange = React__default.useCallback(
|
35
|
+
(date) => {
|
36
|
+
if (!date) return;
|
37
|
+
if (date) {
|
38
|
+
const year = date.getFullYear();
|
39
|
+
if (year >= 1900 && year <= 2100) {
|
40
|
+
if (endDate && isAfter(date, endDate)) {
|
41
|
+
setEndDate(null);
|
42
|
+
}
|
43
|
+
setStartDate(date);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
},
|
47
|
+
[endDate, setStartDate, setEndDate]
|
48
|
+
);
|
49
|
+
const handleEndDateChange = React__default.useCallback(
|
50
|
+
(date) => {
|
51
|
+
if (!date) return;
|
52
|
+
if (date) {
|
53
|
+
const year = date.getFullYear();
|
54
|
+
if (year >= 1900 && year <= 2100) {
|
55
|
+
if (startDate && isBefore(date, startDate)) {
|
56
|
+
setStartDate(null);
|
57
|
+
}
|
58
|
+
setEndDate(date);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
},
|
62
|
+
[startDate, setStartDate, setEndDate]
|
63
|
+
);
|
64
|
+
const renderDay = (day, _value, pickersDayProps) => {
|
65
|
+
if (!startDate) return /* @__PURE__ */ React__default.createElement(PickersDay, { ...pickersDayProps, disableMargin: true });
|
66
|
+
const isStart = isSameDay(day, startDate);
|
67
|
+
const isEnd = endDate && isSameDay(day, endDate);
|
68
|
+
const inRange = startDate && endDate && isAfter(day, startDate) && isBefore(day, endDate);
|
69
|
+
if (isStart || isEnd) {
|
70
|
+
return /* @__PURE__ */ React__default.createElement(
|
71
|
+
PickersDay,
|
72
|
+
{
|
73
|
+
...pickersDayProps,
|
74
|
+
sx: {
|
75
|
+
backgroundColor: (theme) => theme.palette.primary.main,
|
76
|
+
color: (theme) => theme.palette.primary.contrastText,
|
77
|
+
borderRadius: "50%",
|
78
|
+
margin: 0,
|
79
|
+
"&:focus": {
|
80
|
+
backgroundColor: (theme) => theme.palette.primary.dark
|
81
|
+
}
|
82
|
+
}
|
83
|
+
}
|
84
|
+
);
|
85
|
+
}
|
86
|
+
if (inRange) {
|
87
|
+
return /* @__PURE__ */ React__default.createElement(
|
88
|
+
PickersDay,
|
89
|
+
{
|
90
|
+
...pickersDayProps,
|
91
|
+
sx: {
|
92
|
+
backgroundColor: (theme) => theme.palette.action.hover,
|
93
|
+
borderRadius: 0,
|
94
|
+
margin: 0
|
95
|
+
}
|
96
|
+
}
|
97
|
+
);
|
98
|
+
}
|
99
|
+
return /* @__PURE__ */ React__default.createElement(PickersDay, { ...pickersDayProps, disableMargin: true });
|
100
|
+
};
|
101
|
+
return /* @__PURE__ */ React__default.createElement(LocalizationProvider, { dateAdapter: AdapterDateFns }, /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(Typography, { variant: "h5", p: 2, pb: 0, fontWeight: "400" }, "Date range"), /* @__PURE__ */ React__default.createElement(Divider, { sx: { mt: 2 } }), /* @__PURE__ */ React__default.createElement(
|
102
|
+
Grid,
|
103
|
+
{
|
104
|
+
container: true,
|
105
|
+
justifyContent: "space-between",
|
106
|
+
sx: { width: "100%", margin: "unset" }
|
107
|
+
},
|
108
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 6, sx: { padding: "16px 8px 16px 24px !important" } }, /* @__PURE__ */ React__default.createElement(
|
109
|
+
DatePicker,
|
110
|
+
{
|
111
|
+
label: "Start date",
|
112
|
+
value: startDate,
|
113
|
+
onChange: handleStartDateChange,
|
114
|
+
renderInput: (params) => /* @__PURE__ */ React__default.createElement(
|
115
|
+
TextField,
|
116
|
+
{
|
117
|
+
...params,
|
118
|
+
sx: { width: 172 },
|
119
|
+
autoFocus: Boolean(!startDate)
|
120
|
+
}
|
121
|
+
),
|
122
|
+
maxDate: /* @__PURE__ */ new Date(),
|
123
|
+
views: ["day"]
|
124
|
+
}
|
125
|
+
)),
|
126
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 6, sx: { padding: "16px 24px 16px 8px !important" } }, /* @__PURE__ */ React__default.createElement(
|
127
|
+
DatePicker,
|
128
|
+
{
|
129
|
+
label: "End date",
|
130
|
+
value: endDate,
|
131
|
+
onChange: handleEndDateChange,
|
132
|
+
renderInput: (params) => /* @__PURE__ */ React__default.createElement(
|
133
|
+
TextField,
|
134
|
+
{
|
135
|
+
...params,
|
136
|
+
sx: { width: 172 },
|
137
|
+
focused: Boolean(startDate && !endDate)
|
138
|
+
}
|
139
|
+
),
|
140
|
+
maxDate: /* @__PURE__ */ new Date(),
|
141
|
+
views: ["day"]
|
142
|
+
}
|
143
|
+
))
|
144
|
+
), /* @__PURE__ */ React__default.createElement(
|
145
|
+
StaticDatePicker,
|
146
|
+
{
|
147
|
+
displayStaticWrapperAs: "desktop",
|
148
|
+
showDaysOutsideCurrentMonth: true,
|
149
|
+
maxDate: /* @__PURE__ */ new Date(),
|
150
|
+
views: ["day"],
|
151
|
+
renderInput: (params) => /* @__PURE__ */ React__default.createElement(TextField, { ...params }),
|
152
|
+
onChange: handleDateChange,
|
153
|
+
value: null,
|
154
|
+
renderDay
|
155
|
+
}
|
156
|
+
)));
|
157
|
+
};
|
158
|
+
|
159
|
+
export { DateRangePicker as default };
|
160
|
+
//# sourceMappingURL=DateRangePicker.esm.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DateRangePicker.esm.js","sources":["../../../src/components/Header/DateRangePicker.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-autofocus */\n/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport Box from '@mui/material/Box';\nimport Grid from '@mui/material/Grid';\nimport TextField from '@mui/material/TextField';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { StaticDatePicker } from '@mui/x-date-pickers/StaticDatePicker';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { PickersDay, PickersDayProps } from '@mui/x-date-pickers/PickersDay';\nimport { isAfter, isBefore, isSameDay } from 'date-fns';\nimport { DatePicker } from '@mui/x-date-pickers';\nimport Divider from '@mui/material/Divider';\nimport Typography from '@mui/material/Typography';\n\ninterface DateRangePickerProps {\n startDate: Date | null;\n setStartDate: React.Dispatch<React.SetStateAction<Date | null>>;\n endDate: Date | null;\n setEndDate: React.Dispatch<React.SetStateAction<Date | null>>;\n}\n\nconst DateRangePicker: React.FC<DateRangePickerProps> = ({\n startDate,\n setStartDate,\n endDate,\n setEndDate,\n}) => {\n const handleDateChange = React.useCallback(\n (date: Date | null) => {\n if (!date) return;\n\n if (!startDate || (startDate && endDate)) {\n setStartDate(date);\n setEndDate(null);\n } else if (isBefore(date, startDate)) {\n setStartDate(date);\n } else {\n setEndDate(date);\n }\n },\n [startDate, endDate, setStartDate, setEndDate],\n );\n\n const handleStartDateChange = React.useCallback(\n (date: Date | null) => {\n if (!date) return;\n\n if (date) {\n const year = date.getFullYear();\n if (year >= 1900 && year <= 2100) {\n if (endDate && isAfter(date, endDate)) {\n setEndDate(null);\n }\n setStartDate(date);\n }\n }\n },\n [endDate, setStartDate, setEndDate],\n );\n\n const handleEndDateChange = React.useCallback(\n (date: Date | null) => {\n if (!date) return;\n\n if (date) {\n const year = date.getFullYear();\n if (year >= 1900 && year <= 2100) {\n if (startDate && isBefore(date, startDate)) {\n setStartDate(null);\n }\n setEndDate(date);\n }\n }\n },\n [startDate, setStartDate, setEndDate],\n );\n\n const renderDay = (\n day: Date,\n _value: Date[],\n pickersDayProps: PickersDayProps<Date>,\n ) => {\n if (!startDate) return <PickersDay {...pickersDayProps} disableMargin />;\n\n const isStart = isSameDay(day, startDate);\n const isEnd = endDate && isSameDay(day, endDate);\n const inRange =\n startDate && endDate && isAfter(day, startDate) && isBefore(day, endDate);\n\n if (isStart || isEnd) {\n return (\n <PickersDay\n {...pickersDayProps}\n sx={{\n backgroundColor: theme => theme.palette.primary.main,\n color: theme => theme.palette.primary.contrastText,\n borderRadius: '50%',\n margin: 0,\n '&:focus': {\n backgroundColor: theme => theme.palette.primary.dark,\n },\n }}\n />\n );\n }\n\n if (inRange) {\n return (\n <PickersDay\n {...pickersDayProps}\n sx={{\n backgroundColor: theme => theme.palette.action.hover,\n borderRadius: 0,\n margin: 0,\n }}\n />\n );\n }\n\n return <PickersDay {...pickersDayProps} disableMargin />;\n };\n\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <Box>\n <Typography variant=\"h5\" p={2} pb={0} fontWeight=\"400\">\n Date range\n </Typography>\n <Divider sx={{ mt: 2 }} />\n <Grid\n container\n justifyContent=\"space-between\"\n sx={{ width: '100%', margin: 'unset' }}\n >\n <Grid item xs={6} sx={{ padding: '16px 8px 16px 24px !important' }}>\n <DatePicker\n label=\"Start date\"\n value={startDate}\n onChange={handleStartDateChange}\n renderInput={params => (\n <TextField\n {...params}\n sx={{ width: 172 }}\n autoFocus={Boolean(!startDate)}\n />\n )}\n maxDate={new Date()}\n views={['day']}\n />\n </Grid>\n\n <Grid item xs={6} sx={{ padding: '16px 24px 16px 8px !important' }}>\n <DatePicker\n label=\"End date\"\n value={endDate}\n onChange={handleEndDateChange}\n renderInput={params => (\n <TextField\n {...params}\n sx={{ width: 172 }}\n focused={Boolean(startDate && !endDate)}\n />\n )}\n maxDate={new Date()}\n views={['day']}\n />\n </Grid>\n </Grid>\n\n <StaticDatePicker\n displayStaticWrapperAs=\"desktop\"\n showDaysOutsideCurrentMonth\n maxDate={new Date()}\n views={['day']}\n renderInput={params => <TextField {...params} />}\n onChange={handleDateChange}\n value={null}\n renderDay={renderDay}\n />\n </Box>\n </LocalizationProvider>\n );\n};\n\nexport default DateRangePicker;\n"],"names":["React"],"mappings":"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"}
|
@@ -0,0 +1,195 @@
|
|
1
|
+
import React__default from 'react';
|
2
|
+
import { Header } from '@backstage/core-components';
|
3
|
+
import MenuItem from '@mui/material/MenuItem';
|
4
|
+
import Select from '@mui/material/Select';
|
5
|
+
import Typography from '@mui/material/Typography';
|
6
|
+
import Divider from '@mui/material/Divider';
|
7
|
+
import Popover from '@mui/material/Popover';
|
8
|
+
import Box from '@mui/material/Box';
|
9
|
+
import Button from '@mui/material/Button';
|
10
|
+
import DateRangePicker from './DateRangePicker.esm.js';
|
11
|
+
import { useDateRange } from './DateRangeContext.esm.js';
|
12
|
+
import { DATE_RANGE_OPTIONS } from '../../utils/constants.esm.js';
|
13
|
+
import { subDays, format } from 'date-fns';
|
14
|
+
import { getDateRange } from '../../utils/utils.esm.js';
|
15
|
+
|
16
|
+
const InsightsHeader = ({ title }) => {
|
17
|
+
const [selectedOption, setSelectedOption] = React__default.useState("last-28-days");
|
18
|
+
const [anchorEl, setAnchorEl] = React__default.useState(null);
|
19
|
+
const [startDate, setStartDate] = React__default.useState(null);
|
20
|
+
const [endDate, setEndDate] = React__default.useState(null);
|
21
|
+
const [menuOpen, setMenuOpen] = React__default.useState(false);
|
22
|
+
const {
|
23
|
+
startDateRange,
|
24
|
+
setStartDateRange,
|
25
|
+
endDateRange,
|
26
|
+
setEndDateRange,
|
27
|
+
setIsDefaultDateRange
|
28
|
+
} = useDateRange();
|
29
|
+
React__default.useEffect(() => {
|
30
|
+
const today = /* @__PURE__ */ new Date();
|
31
|
+
setStartDateRange(subDays(today, 27));
|
32
|
+
setEndDateRange(today);
|
33
|
+
}, [setStartDateRange, setEndDateRange]);
|
34
|
+
const handleChange = React__default.useCallback(
|
35
|
+
(event) => {
|
36
|
+
const value = event.target.value;
|
37
|
+
if (!value) return;
|
38
|
+
const { startDate: newStartDate, endDate: newEndDate } = getDateRange(value);
|
39
|
+
if (newStartDate && newEndDate) {
|
40
|
+
setStartDateRange(new Date(newStartDate));
|
41
|
+
setEndDateRange(new Date(newEndDate));
|
42
|
+
setIsDefaultDateRange(false);
|
43
|
+
}
|
44
|
+
setStartDate(null);
|
45
|
+
setEndDate(null);
|
46
|
+
setSelectedOption(value);
|
47
|
+
},
|
48
|
+
[setStartDateRange, setEndDateRange, setIsDefaultDateRange]
|
49
|
+
);
|
50
|
+
const handleDateRangeClick = (event) => {
|
51
|
+
setAnchorEl(event.currentTarget);
|
52
|
+
};
|
53
|
+
const handleClose = React__default.useCallback(() => {
|
54
|
+
setAnchorEl(null);
|
55
|
+
}, []);
|
56
|
+
const handleDateRange = React__default.useCallback(() => {
|
57
|
+
if (startDate && endDate) {
|
58
|
+
setStartDateRange(startDate);
|
59
|
+
setEndDateRange(endDate);
|
60
|
+
setIsDefaultDateRange(false);
|
61
|
+
setSelectedOption("dateRange");
|
62
|
+
handleClose();
|
63
|
+
setMenuOpen(false);
|
64
|
+
}
|
65
|
+
}, [
|
66
|
+
startDate,
|
67
|
+
endDate,
|
68
|
+
setStartDateRange,
|
69
|
+
setEndDateRange,
|
70
|
+
handleClose,
|
71
|
+
setIsDefaultDateRange
|
72
|
+
]);
|
73
|
+
const getLabel = React__default.useMemo(() => {
|
74
|
+
return (value) => {
|
75
|
+
if (value === "dateRange" && startDateRange && endDateRange)
|
76
|
+
return `${format(startDateRange, "PP")} - ${format(
|
77
|
+
endDateRange,
|
78
|
+
"PP"
|
79
|
+
)}`;
|
80
|
+
const option = DATE_RANGE_OPTIONS.find((opt) => opt.value === value);
|
81
|
+
return option ? option.label : "Last 28 days";
|
82
|
+
};
|
83
|
+
}, [startDateRange, endDateRange]);
|
84
|
+
return /* @__PURE__ */ React__default.createElement(
|
85
|
+
Header,
|
86
|
+
{
|
87
|
+
title: /* @__PURE__ */ React__default.createElement(
|
88
|
+
Typography,
|
89
|
+
{
|
90
|
+
variant: "h3",
|
91
|
+
color: "textPrimary",
|
92
|
+
sx: { fontWeight: "bold" }
|
93
|
+
},
|
94
|
+
title
|
95
|
+
),
|
96
|
+
style: { background: "none" }
|
97
|
+
},
|
98
|
+
/* @__PURE__ */ React__default.createElement(
|
99
|
+
Select,
|
100
|
+
{
|
101
|
+
displayEmpty: true,
|
102
|
+
open: menuOpen,
|
103
|
+
onOpen: () => setMenuOpen(true),
|
104
|
+
onClose: () => setMenuOpen(false),
|
105
|
+
value: selectedOption,
|
106
|
+
onChange: handleChange,
|
107
|
+
renderValue: (selected) => getLabel(selected),
|
108
|
+
sx: {
|
109
|
+
minWidth: 190,
|
110
|
+
marginRight: "10px"
|
111
|
+
},
|
112
|
+
MenuProps: {
|
113
|
+
PaperProps: {
|
114
|
+
sx: {
|
115
|
+
minWidth: 190,
|
116
|
+
boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.2)",
|
117
|
+
border: (theme) => `1px solid ${theme.palette.grey[300]}`,
|
118
|
+
overflow: "hidden"
|
119
|
+
},
|
120
|
+
disableScrollLock: true
|
121
|
+
},
|
122
|
+
MenuListProps: {
|
123
|
+
autoFocusItem: false,
|
124
|
+
sx: { display: "block", flexDirection: "column" }
|
125
|
+
}
|
126
|
+
}
|
127
|
+
},
|
128
|
+
DATE_RANGE_OPTIONS.map((option) => /* @__PURE__ */ React__default.createElement(
|
129
|
+
MenuItem,
|
130
|
+
{
|
131
|
+
key: option.value,
|
132
|
+
value: option.value,
|
133
|
+
sx: { height: "52px" }
|
134
|
+
},
|
135
|
+
option.label
|
136
|
+
)),
|
137
|
+
/* @__PURE__ */ React__default.createElement(Divider, null),
|
138
|
+
/* @__PURE__ */ React__default.createElement(
|
139
|
+
MenuItem,
|
140
|
+
{
|
141
|
+
sx: { height: "52px" },
|
142
|
+
onMouseDown: (event) => {
|
143
|
+
event.preventDefault();
|
144
|
+
handleDateRangeClick(event);
|
145
|
+
}
|
146
|
+
},
|
147
|
+
"Date range..."
|
148
|
+
)
|
149
|
+
),
|
150
|
+
/* @__PURE__ */ React__default.createElement(
|
151
|
+
Popover,
|
152
|
+
{
|
153
|
+
open: Boolean(anchorEl),
|
154
|
+
anchorEl,
|
155
|
+
onClose: handleClose,
|
156
|
+
anchorOrigin: { vertical: "top", horizontal: "left" },
|
157
|
+
transformOrigin: { vertical: "top", horizontal: "right" },
|
158
|
+
slotProps: {
|
159
|
+
paper: {
|
160
|
+
sx: { boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.2)" }
|
161
|
+
}
|
162
|
+
}
|
163
|
+
},
|
164
|
+
/* @__PURE__ */ React__default.createElement(
|
165
|
+
DateRangePicker,
|
166
|
+
{
|
167
|
+
startDate,
|
168
|
+
setStartDate,
|
169
|
+
endDate,
|
170
|
+
setEndDate
|
171
|
+
}
|
172
|
+
),
|
173
|
+
/* @__PURE__ */ React__default.createElement(Box, { sx: { display: "flex", justifyContent: "flex-end", gap: 1, m: 2 } }, /* @__PURE__ */ React__default.createElement(
|
174
|
+
Button,
|
175
|
+
{
|
176
|
+
onClick: handleClose,
|
177
|
+
color: "primary",
|
178
|
+
sx: { textTransform: "none" }
|
179
|
+
},
|
180
|
+
"Cancel"
|
181
|
+
), /* @__PURE__ */ React__default.createElement(
|
182
|
+
Button,
|
183
|
+
{
|
184
|
+
onClick: handleDateRange,
|
185
|
+
color: "primary",
|
186
|
+
disabled: !(startDate && endDate)
|
187
|
+
},
|
188
|
+
"OK"
|
189
|
+
))
|
190
|
+
)
|
191
|
+
);
|
192
|
+
};
|
193
|
+
|
194
|
+
export { InsightsHeader as default };
|
195
|
+
//# sourceMappingURL=Header.esm.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Header.esm.js","sources":["../../../src/components/Header/Header.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Header } from '@backstage/core-components';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select, { SelectChangeEvent } from '@mui/material/Select';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport Popover from '@mui/material/Popover';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\n\nimport DateRangePicker from './DateRangePicker';\nimport { useDateRange } from './DateRangeContext';\nimport { DATE_RANGE_OPTIONS } from '../../utils/constants';\nimport { format, subDays } from 'date-fns';\nimport { getDateRange } from '../../utils/utils';\n\ninterface InsightsHeaderProps extends React.HTMLProps<HTMLDivElement> {\n title: string;\n}\n\nconst InsightsHeader: React.FC<InsightsHeaderProps> = ({ title }) => {\n const [selectedOption, setSelectedOption] =\n React.useState<string>('last-28-days');\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const [startDate, setStartDate] = React.useState<Date | null>(null);\n const [endDate, setEndDate] = React.useState<Date | null>(null);\n const [menuOpen, setMenuOpen] = React.useState(false);\n\n const {\n startDateRange,\n setStartDateRange,\n endDateRange,\n setEndDateRange,\n setIsDefaultDateRange,\n } = useDateRange();\n\n React.useEffect(() => {\n const today = new Date();\n setStartDateRange(subDays(today, 27));\n setEndDateRange(today);\n }, [setStartDateRange, setEndDateRange]);\n\n const handleChange = React.useCallback(\n (event: SelectChangeEvent<string>) => {\n const value = event.target.value;\n if (!value) return;\n\n const { startDate: newStartDate, endDate: newEndDate } =\n getDateRange(value);\n if (newStartDate && newEndDate) {\n setStartDateRange(new Date(newStartDate));\n setEndDateRange(new Date(newEndDate));\n setIsDefaultDateRange(false);\n }\n setStartDate(null);\n setEndDate(null);\n\n setSelectedOption(value);\n },\n [setStartDateRange, setEndDateRange, setIsDefaultDateRange],\n );\n\n const handleDateRangeClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = React.useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleDateRange = React.useCallback(() => {\n if (startDate && endDate) {\n setStartDateRange(startDate);\n setEndDateRange(endDate);\n setIsDefaultDateRange(false);\n setSelectedOption('dateRange');\n handleClose();\n setMenuOpen(false);\n }\n }, [\n startDate,\n endDate,\n setStartDateRange,\n setEndDateRange,\n handleClose,\n setIsDefaultDateRange,\n ]);\n\n const getLabel = React.useMemo(() => {\n return (value: string) => {\n if (value === 'dateRange' && startDateRange && endDateRange)\n return `${format(startDateRange, 'PP')} - ${format(\n endDateRange,\n 'PP',\n )}`;\n\n const option = DATE_RANGE_OPTIONS.find(opt => opt.value === value);\n return option ? option.label : 'Last 28 days';\n };\n }, [startDateRange, endDateRange]);\n\n return (\n <Header\n title={\n <Typography\n variant=\"h3\"\n color=\"textPrimary\"\n sx={{ fontWeight: 'bold' }}\n >\n {title}\n </Typography>\n }\n style={{ background: 'none' }}\n >\n <Select\n displayEmpty\n open={menuOpen}\n onOpen={() => setMenuOpen(true)}\n onClose={() => setMenuOpen(false)}\n value={selectedOption}\n onChange={handleChange}\n renderValue={(selected: string) => getLabel(selected)}\n sx={{\n minWidth: 190,\n marginRight: '10px',\n }}\n MenuProps={{\n PaperProps: {\n sx: {\n minWidth: 190,\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.2)',\n border: theme => `1px solid ${theme.palette.grey[300]}`,\n overflow: 'hidden',\n },\n disableScrollLock: true,\n },\n MenuListProps: {\n autoFocusItem: false,\n sx: { display: 'block', flexDirection: 'column' },\n },\n }}\n >\n {DATE_RANGE_OPTIONS.map(option => (\n <MenuItem\n key={option.value}\n value={option.value}\n sx={{ height: '52px' }}\n >\n {option.label}\n </MenuItem>\n ))}\n <Divider />\n <MenuItem\n sx={{ height: '52px' }}\n onMouseDown={event => {\n event.preventDefault();\n handleDateRangeClick(event);\n }}\n >\n Date range...\n </MenuItem>\n </Select>\n\n <Popover\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'top', horizontal: 'left' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: {\n sx: { boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.2)' },\n },\n }}\n >\n <DateRangePicker\n startDate={startDate}\n setStartDate={setStartDate}\n endDate={endDate}\n setEndDate={setEndDate}\n />\n\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', gap: 1, m: 2 }}>\n <Button\n onClick={handleClose}\n color=\"primary\"\n sx={{ textTransform: 'none' }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleDateRange}\n color=\"primary\"\n disabled={!(startDate && endDate)}\n >\n OK\n </Button>\n </Box>\n </Popover>\n </Header>\n );\n};\n\nexport default InsightsHeader;\n"],"names":["React"],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
@@ -0,0 +1,113 @@
|
|
1
|
+
import React__default from 'react';
|
2
|
+
import Table from '@mui/material/Table';
|
3
|
+
import TableBody from '@mui/material/TableBody';
|
4
|
+
import TableCell from '@mui/material/TableCell';
|
5
|
+
import TableFooter from '@mui/material/TableFooter';
|
6
|
+
import TableHead from '@mui/material/TableHead';
|
7
|
+
import TableRow from '@mui/material/TableRow';
|
8
|
+
import CircularProgress from '@mui/material/CircularProgress';
|
9
|
+
import TrendingUpIcon from '@mui/icons-material/TrendingUp';
|
10
|
+
import TrendingDownIcon from '@mui/icons-material/TrendingDown';
|
11
|
+
import Typography from '@mui/material/Typography';
|
12
|
+
import Box from '@mui/material/Box';
|
13
|
+
import CardWrapper from '../CardWrapper/CardWrapper.esm.js';
|
14
|
+
import { PLUGINS_TABLE_HEADERS } from '../../utils/constants.esm.js';
|
15
|
+
import { usePlugins } from '../../hooks/usePlugins.esm.js';
|
16
|
+
import TableFooterPagination from '../CardFooter/TableFooterPagination.esm.js';
|
17
|
+
import { ResponsiveContainer, LineChart, Line } from 'recharts';
|
18
|
+
import EmptyChartState from '../Common/EmptyChartState.esm.js';
|
19
|
+
import { useDateRange } from '../Header/DateRangeContext.esm.js';
|
20
|
+
|
21
|
+
const Plugins = () => {
|
22
|
+
const [page, setPage] = React__default.useState(0);
|
23
|
+
const [limit] = React__default.useState(20);
|
24
|
+
const [rowsPerPage, setRowsPerPage] = React__default.useState(3);
|
25
|
+
const { isDefaultDateRange } = useDateRange();
|
26
|
+
const { plugins, loading } = usePlugins({ limit });
|
27
|
+
const handleChangePage = React__default.useCallback(
|
28
|
+
(_event, newPage) => {
|
29
|
+
setPage(newPage);
|
30
|
+
},
|
31
|
+
[]
|
32
|
+
);
|
33
|
+
const handleChangeRowsPerPage = React__default.useCallback(
|
34
|
+
(event) => {
|
35
|
+
setRowsPerPage(+event.target.value);
|
36
|
+
setPage(0);
|
37
|
+
},
|
38
|
+
[]
|
39
|
+
);
|
40
|
+
const visiblePlugins = React__default.useMemo(() => {
|
41
|
+
return plugins.data?.slice(
|
42
|
+
page * rowsPerPage,
|
43
|
+
page * rowsPerPage + rowsPerPage
|
44
|
+
);
|
45
|
+
}, [plugins, page, rowsPerPage]);
|
46
|
+
if (!visiblePlugins || visiblePlugins?.length === 0) {
|
47
|
+
return /* @__PURE__ */ React__default.createElement(CardWrapper, { title: "Top plugins" }, /* @__PURE__ */ React__default.createElement(
|
48
|
+
Box,
|
49
|
+
{
|
50
|
+
display: "flex",
|
51
|
+
justifyContent: "center",
|
52
|
+
alignItems: "center",
|
53
|
+
height: 200
|
54
|
+
},
|
55
|
+
/* @__PURE__ */ React__default.createElement(EmptyChartState, null)
|
56
|
+
));
|
57
|
+
}
|
58
|
+
return /* @__PURE__ */ React__default.createElement(CardWrapper, { title: `Top ${rowsPerPage} plugins` }, /* @__PURE__ */ React__default.createElement(Table, { "aria-labelledby": "Catalog entities", sx: { width: "100%" } }, /* @__PURE__ */ React__default.createElement(TableHead, null, /* @__PURE__ */ React__default.createElement(TableRow, null, PLUGINS_TABLE_HEADERS.map((header) => {
|
59
|
+
if (isDefaultDateRange && header.id === "percent") return null;
|
60
|
+
return /* @__PURE__ */ React__default.createElement(
|
61
|
+
TableCell,
|
62
|
+
{
|
63
|
+
key: header.id,
|
64
|
+
align: "left",
|
65
|
+
sx: {
|
66
|
+
borderBottom: (theme) => `1px solid ${theme.palette.grey[300]}`
|
67
|
+
}
|
68
|
+
},
|
69
|
+
header.title
|
70
|
+
);
|
71
|
+
}))), /* @__PURE__ */ React__default.createElement(TableBody, null, loading ? /* @__PURE__ */ React__default.createElement(TableRow, null, /* @__PURE__ */ React__default.createElement(TableCell, { colSpan: PLUGINS_TABLE_HEADERS.length, align: "center" }, /* @__PURE__ */ React__default.createElement(CircularProgress, null))) : visiblePlugins?.map((plugin) => /* @__PURE__ */ React__default.createElement(
|
72
|
+
TableRow,
|
73
|
+
{
|
74
|
+
key: plugin.plugin_id,
|
75
|
+
sx: {
|
76
|
+
"&:nth-of-type(odd)": { backgroundColor: "inherit" },
|
77
|
+
borderBottom: (theme) => `1px solid ${theme.palette.grey[300]}`
|
78
|
+
}
|
79
|
+
},
|
80
|
+
/* @__PURE__ */ React__default.createElement(TableCell, { sx: isDefaultDateRange ? {} : { width: "20%" } }, plugin.plugin_id ?? "--"),
|
81
|
+
/* @__PURE__ */ React__default.createElement(TableCell, { sx: { width: "40%" } }, plugin.trend?.length > 0 ? /* @__PURE__ */ React__default.createElement(ResponsiveContainer, { width: 250, height: 50 }, /* @__PURE__ */ React__default.createElement(LineChart, { data: plugin.trend }, /* @__PURE__ */ React__default.createElement(
|
82
|
+
Line,
|
83
|
+
{
|
84
|
+
type: "monotone",
|
85
|
+
dataKey: "count",
|
86
|
+
stroke: "#9370DB",
|
87
|
+
strokeWidth: 2,
|
88
|
+
dot: false
|
89
|
+
}
|
90
|
+
))) : "--"),
|
91
|
+
!isDefaultDateRange && /* @__PURE__ */ React__default.createElement(TableCell, { sx: isDefaultDateRange ? {} : { width: "20%" } }, /* @__PURE__ */ React__default.createElement(Box, { sx: { display: "flex", alignItems: "center", gap: 1 } }, Math.round(Number(plugin.trend_percentage)) < 0 ? /* @__PURE__ */ React__default.createElement(TrendingDownIcon, { sx: { color: "red" } }) : /* @__PURE__ */ React__default.createElement(TrendingUpIcon, { sx: { color: "green" } }), /* @__PURE__ */ React__default.createElement(Typography, { variant: "body2" }, Math.abs(Math.round(Number(plugin.trend_percentage))), "%"))),
|
92
|
+
/* @__PURE__ */ React__default.createElement(TableCell, { sx: isDefaultDateRange ? {} : { width: "20%" } }, Number(plugin.visit_count).toLocaleString() ?? "--")
|
93
|
+
))), /* @__PURE__ */ React__default.createElement(TableFooter, null, /* @__PURE__ */ React__default.createElement(TableRow, null, /* @__PURE__ */ React__default.createElement(
|
94
|
+
TableCell,
|
95
|
+
{
|
96
|
+
colSpan: PLUGINS_TABLE_HEADERS.length,
|
97
|
+
sx: { padding: 0 }
|
98
|
+
},
|
99
|
+
/* @__PURE__ */ React__default.createElement(
|
100
|
+
TableFooterPagination,
|
101
|
+
{
|
102
|
+
count: plugins.data?.length,
|
103
|
+
rowsPerPage,
|
104
|
+
page,
|
105
|
+
handleChangePage,
|
106
|
+
handleChangeRowsPerPage
|
107
|
+
}
|
108
|
+
)
|
109
|
+
)))));
|
110
|
+
};
|
111
|
+
|
112
|
+
export { Plugins as default };
|
113
|
+
//# sourceMappingURL=Plugins.esm.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Plugins.esm.js","sources":["../../../src/components/Plugins/Plugins.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableFooter from '@mui/material/TableFooter';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport TrendingDownIcon from '@mui/icons-material/TrendingDown';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\n\nimport CardWrapper from '../CardWrapper';\nimport { PLUGINS_TABLE_HEADERS } from '../../utils/constants';\nimport { usePlugins } from '../../hooks/usePlugins';\nimport TableFooterPagination from '../CardFooter';\nimport { Line, LineChart, ResponsiveContainer } from 'recharts';\nimport EmptyChartState from '../Common/EmptyChartState';\nimport { useDateRange } from '../Header/DateRangeContext';\n\nconst Plugins = () => {\n const [page, setPage] = React.useState(0);\n const [limit] = React.useState(20);\n const [rowsPerPage, setRowsPerPage] = React.useState(3);\n\n const { isDefaultDateRange } = useDateRange();\n const { plugins, loading } = usePlugins({ limit });\n\n const handleChangePage = React.useCallback(\n (_event: unknown, newPage: number) => {\n setPage(newPage);\n },\n [],\n );\n\n const handleChangeRowsPerPage = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setRowsPerPage(+event.target.value);\n setPage(0);\n },\n [],\n );\n\n const visiblePlugins = React.useMemo(() => {\n return plugins.data?.slice(\n page * rowsPerPage,\n page * rowsPerPage + rowsPerPage,\n );\n }, [plugins, page, rowsPerPage]);\n\n if (!visiblePlugins || visiblePlugins?.length === 0) {\n return (\n <CardWrapper title=\"Top plugins\">\n <Box\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height={200}\n >\n <EmptyChartState />\n </Box>\n </CardWrapper>\n );\n }\n\n return (\n <CardWrapper title={`Top ${rowsPerPage} plugins`}>\n <Table aria-labelledby=\"Catalog entities\" sx={{ width: '100%' }}>\n <TableHead>\n <TableRow>\n {PLUGINS_TABLE_HEADERS.map(header => {\n if (isDefaultDateRange && header.id === 'percent') return null;\n return (\n <TableCell\n key={header.id}\n align=\"left\"\n sx={{\n borderBottom: theme =>\n `1px solid ${theme.palette.grey[300]}`,\n }}\n >\n {header.title}\n </TableCell>\n );\n })}\n </TableRow>\n </TableHead>\n <TableBody>\n {loading ? (\n <TableRow>\n <TableCell colSpan={PLUGINS_TABLE_HEADERS.length} align=\"center\">\n <CircularProgress />\n </TableCell>\n </TableRow>\n ) : (\n visiblePlugins?.map(plugin => (\n <TableRow\n key={plugin.plugin_id}\n sx={{\n '&:nth-of-type(odd)': { backgroundColor: 'inherit' },\n borderBottom: theme => `1px solid ${theme.palette.grey[300]}`,\n }}\n >\n <TableCell sx={isDefaultDateRange ? {} : { width: '20%' }}>\n {plugin.plugin_id ?? '--'}\n </TableCell>\n <TableCell sx={{ width: '40%' }}>\n {plugin.trend?.length > 0 ? (\n <ResponsiveContainer width={250} height={50}>\n <LineChart data={plugin.trend}>\n <Line\n type=\"monotone\"\n dataKey=\"count\"\n stroke=\"#9370DB\"\n strokeWidth={2}\n dot={false}\n />\n </LineChart>\n </ResponsiveContainer>\n ) : (\n '--'\n )}\n </TableCell>\n {!isDefaultDateRange && (\n <TableCell sx={isDefaultDateRange ? {} : { width: '20%' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {Math.round(Number(plugin.trend_percentage)) < 0 ? (\n <TrendingDownIcon sx={{ color: 'red' }} />\n ) : (\n <TrendingUpIcon sx={{ color: 'green' }} />\n )}\n <Typography variant=\"body2\">\n {Math.abs(Math.round(Number(plugin.trend_percentage)))}%\n </Typography>\n </Box>\n </TableCell>\n )}\n <TableCell sx={isDefaultDateRange ? {} : { width: '20%' }}>\n {Number(plugin.visit_count).toLocaleString() ?? '--'}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n <TableFooter>\n <TableRow>\n <TableCell\n colSpan={PLUGINS_TABLE_HEADERS.length}\n sx={{ padding: 0 }}\n >\n <TableFooterPagination\n count={plugins.data?.length}\n rowsPerPage={rowsPerPage}\n page={page}\n handleChangePage={handleChangePage}\n handleChangeRowsPerPage={handleChangeRowsPerPage}\n />\n </TableCell>\n </TableRow>\n </TableFooter>\n </Table>\n </CardWrapper>\n );\n};\n\nexport default Plugins;\n"],"names":["React"],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import React__default from 'react';
|
2
|
+
import Paper from '@mui/material/Paper';
|
3
|
+
import Typography from '@mui/material/Typography';
|
4
|
+
import Box from '@mui/material/Box';
|
5
|
+
import { useTheme } from '@mui/material/styles';
|
6
|
+
import { format } from 'date-fns';
|
7
|
+
|
8
|
+
const CustomTooltip = ({
|
9
|
+
active,
|
10
|
+
payload,
|
11
|
+
label,
|
12
|
+
grouping
|
13
|
+
}) => {
|
14
|
+
const theme = useTheme();
|
15
|
+
if (active && payload?.length) {
|
16
|
+
const date = label ? new Date(label) : /* @__PURE__ */ new Date();
|
17
|
+
return /* @__PURE__ */ React__default.createElement(
|
18
|
+
Paper,
|
19
|
+
{
|
20
|
+
elevation: 1,
|
21
|
+
sx: {
|
22
|
+
padding: "12px 16px",
|
23
|
+
boxShadow: 4,
|
24
|
+
borderRadius: 2
|
25
|
+
}
|
26
|
+
},
|
27
|
+
/* @__PURE__ */ React__default.createElement(
|
28
|
+
Typography,
|
29
|
+
{
|
30
|
+
sx: {
|
31
|
+
fontSize: "0.875rem",
|
32
|
+
fontWeight: 500,
|
33
|
+
marginBottom: "12px"
|
34
|
+
}
|
35
|
+
},
|
36
|
+
grouping === "hourly" ? format(date, "MMMM dd, yyyy hh:mm a") : format(date, "MMMM, dd yyyy")
|
37
|
+
),
|
38
|
+
/* @__PURE__ */ React__default.createElement(Box, { mr: 3 }, /* @__PURE__ */ React__default.createElement(
|
39
|
+
Typography,
|
40
|
+
{
|
41
|
+
sx: {
|
42
|
+
fontSize: "0.875rem",
|
43
|
+
fontWeight: 500,
|
44
|
+
color: theme.palette.text.secondary
|
45
|
+
}
|
46
|
+
},
|
47
|
+
"Number of searches"
|
48
|
+
), /* @__PURE__ */ React__default.createElement(
|
49
|
+
Typography,
|
50
|
+
{
|
51
|
+
sx: {
|
52
|
+
fontSize: "2.5rem",
|
53
|
+
fontWeight: 500,
|
54
|
+
color: "#009596",
|
55
|
+
lineHeight: 1.2
|
56
|
+
}
|
57
|
+
},
|
58
|
+
payload[0]?.value
|
59
|
+
))
|
60
|
+
);
|
61
|
+
}
|
62
|
+
return null;
|
63
|
+
};
|
64
|
+
|
65
|
+
export { CustomTooltip as default };
|
66
|
+
//# sourceMappingURL=CustomTooltip.esm.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CustomTooltip.esm.js","sources":["../../../src/components/Searches/CustomTooltip.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { useTheme } from '@mui/material/styles';\nimport { format } from 'date-fns';\n\nconst CustomTooltip = ({\n active,\n payload,\n label,\n grouping,\n}: {\n active?: boolean;\n payload?: any[];\n label?: string;\n grouping?: string;\n}) => {\n const theme = useTheme();\n\n if (active && payload?.length) {\n const date = label ? new Date(label) : new Date();\n return (\n <Paper\n elevation={1}\n sx={{\n padding: '12px 16px',\n boxShadow: 4,\n borderRadius: 2,\n }}\n >\n <Typography\n sx={{\n fontSize: '0.875rem',\n fontWeight: 500,\n marginBottom: '12px',\n }}\n >\n {grouping === 'hourly'\n ? format(date, 'MMMM dd, yyyy hh:mm a')\n : format(date, 'MMMM, dd yyyy')}\n </Typography>\n\n <Box mr={3}>\n <Typography\n sx={{\n fontSize: '0.875rem',\n fontWeight: 500,\n color: theme.palette.text.secondary,\n }}\n >\n Number of searches\n </Typography>\n <Typography\n sx={{\n fontSize: '2.5rem',\n fontWeight: 500,\n color: '#009596',\n lineHeight: 1.2,\n }}\n >\n {payload[0]?.value}\n </Typography>\n </Box>\n </Paper>\n );\n }\n return null;\n};\n\nexport default CustomTooltip;\n"],"names":["React"],"mappings":";;;;;;;AAuBA,MAAM,gBAAgB,CAAC;AAAA,EACrB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAKM,KAAA;AACJ,EAAA,MAAM,QAAQ,QAAS,EAAA;AAEvB,EAAI,IAAA,MAAA,IAAU,SAAS,MAAQ,EAAA;AAC7B,IAAA,MAAM,OAAO,KAAQ,GAAA,IAAI,KAAK,KAAK,CAAA,uBAAQ,IAAK,EAAA;AAChD,IACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,CAAA;AAAA,QACX,EAAI,EAAA;AAAA,UACF,OAAS,EAAA,WAAA;AAAA,UACT,SAAW,EAAA,CAAA;AAAA,UACX,YAAc,EAAA;AAAA;AAChB,OAAA;AAAA,sBAEAA,cAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,EAAI,EAAA;AAAA,YACF,QAAU,EAAA,UAAA;AAAA,YACV,UAAY,EAAA,GAAA;AAAA,YACZ,YAAc,EAAA;AAAA;AAChB,SAAA;AAAA,QAEC,QAAA,KAAa,WACV,MAAO,CAAA,IAAA,EAAM,uBAAuB,CACpC,GAAA,MAAA,CAAO,MAAM,eAAe;AAAA,OAClC;AAAA,sBAEAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,CACP,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,EAAI,EAAA;AAAA,YACF,QAAU,EAAA,UAAA;AAAA,YACV,UAAY,EAAA,GAAA;AAAA,YACZ,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA;AAAA;AAC5B,SAAA;AAAA,QACD;AAAA,OAGD,kBAAAA,cAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,EAAI,EAAA;AAAA,YACF,QAAU,EAAA,QAAA;AAAA,YACV,UAAY,EAAA,GAAA;AAAA,YACZ,KAAO,EAAA,SAAA;AAAA,YACP,UAAY,EAAA;AAAA;AACd,SAAA;AAAA,QAEC,OAAA,CAAQ,CAAC,CAAG,EAAA;AAAA,OAEjB;AAAA,KACF;AAAA;AAGJ,EAAO,OAAA,IAAA;AACT;;;;"}
|