@popmenu/dashboard 0.44.0 → 0.46.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.
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
import { MenuProps } from '@material-ui/core';
|
|
3
|
+
export interface LeaderboardFilterOptionProps {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
export interface LeaderboardFilterProps extends MenuProps {
|
|
8
|
+
onChange: (event: any) => void;
|
|
9
|
+
options: LeaderboardFilterOptionProps[];
|
|
10
|
+
text: string;
|
|
11
|
+
}
|
|
2
12
|
export interface LeaderboardListItemProps {
|
|
3
13
|
/** The icon to be displayed. Should be an icon component from popmenu/web-icons */
|
|
4
14
|
Icon?: string | React.FC<React.SVGProps<SVGSVGElement>>;
|
|
@@ -23,8 +33,12 @@ export interface LeaderboardProps {
|
|
|
23
33
|
data: LeaderboardListItemProps[];
|
|
24
34
|
/** Component to display when no data is present */
|
|
25
35
|
EmptyState: React.ReactNode;
|
|
36
|
+
/** Optional props for filter after the title/subtitle */
|
|
37
|
+
filterProps: LeaderboardFilterProps;
|
|
26
38
|
/** Optional link at bottom to redirect to another page. Intended as a link to more data within the leaderboard. */
|
|
27
39
|
moreLink?: {
|
|
40
|
+
/** Will display regardless of overflow */
|
|
41
|
+
show?: boolean;
|
|
28
42
|
/** Path to route to. */
|
|
29
43
|
to: string;
|
|
30
44
|
/** Text the link will have. */
|
|
@@ -36,6 +50,7 @@ export interface LeaderboardProps {
|
|
|
36
50
|
title: string;
|
|
37
51
|
}
|
|
38
52
|
export interface MoreLinkProps {
|
|
53
|
+
show?: boolean;
|
|
39
54
|
text: string;
|
|
40
55
|
to: string;
|
|
41
56
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { LeaderboardProps, LeaderboardListItemProps, MoreLinkProps } from './LeaderboardProps';
|
|
1
|
+
import { LeaderboardProps, LeaderboardListItemProps, LeaderboardFilterProps, MoreLinkProps } from './LeaderboardProps';
|
|
2
2
|
export declare const useLeaderboardStyles: (props: LeaderboardProps) => import("@material-ui/styles").ClassNameMap<string>;
|
|
3
3
|
export declare const useLeaderboardListItemStyles: (props: LeaderboardListItemProps) => import("@material-ui/styles").ClassNameMap<string>;
|
|
4
|
+
export declare const useLeaderboardFilterStyles: (props: LeaderboardFilterProps) => import("@material-ui/styles").ClassNameMap<string>;
|
|
4
5
|
export declare const useMoreLinkStyles: (props: MoreLinkProps) => import("@material-ui/styles").ClassNameMap<string>;
|
package/build/index.es.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import React__default, { createElement, forwardRef } from 'react';
|
|
2
|
+
import React__default, { createElement, forwardRef, useState } from 'react';
|
|
3
|
+
import { makeStyles, Typography as Typography$1, Link as Link$1, Paper as Paper$1, Box, Menu, MenuItem, Card as Card$1, CardActionArea, CardContent as CardContent$1 } from '@material-ui/core';
|
|
3
4
|
import '@material-ui/lab/Alert';
|
|
4
|
-
import { makeStyles, Typography as Typography$1, Link as Link$1, Paper as Paper$1, Box, Card as Card$1, CardActionArea, CardContent as CardContent$1 } from '@material-ui/core';
|
|
5
5
|
import '@material-ui/core/AppBar';
|
|
6
6
|
import MuiAvatar from '@material-ui/core/Avatar';
|
|
7
7
|
import { makeStyles as makeStyles$1, useTheme } from '@material-ui/core/styles';
|
|
@@ -124,19 +124,19 @@ function __rest(s, e) {
|
|
|
124
124
|
return t;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
var _path$
|
|
127
|
+
var _path$D;
|
|
128
128
|
|
|
129
|
-
function _extends$
|
|
129
|
+
function _extends$1u() { _extends$1u = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1u.apply(this, arguments); }
|
|
130
130
|
|
|
131
131
|
function SvgUser(props) {
|
|
132
|
-
return /*#__PURE__*/React.createElement("svg", _extends$
|
|
132
|
+
return /*#__PURE__*/React.createElement("svg", _extends$1u({
|
|
133
133
|
viewBox: "0 0 16 16",
|
|
134
134
|
fill: "none",
|
|
135
135
|
strokeLinecap: "round",
|
|
136
136
|
strokeLinejoin: "round",
|
|
137
137
|
width: "1em",
|
|
138
138
|
height: "1em"
|
|
139
|
-
}, props), _path$
|
|
139
|
+
}, props), _path$D || (_path$D = /*#__PURE__*/React.createElement("path", {
|
|
140
140
|
d: "M13.333 14v-1.333A2.667 2.667 0 0010.667 10H5.333a2.667 2.667 0 00-2.666 2.667V14M8 7.333A2.667 2.667 0 108 2a2.667 2.667 0 000 5.333z",
|
|
141
141
|
stroke: "currentColor"
|
|
142
142
|
})));
|
|
@@ -779,6 +779,66 @@ makeStyles(function (theme) { return ({
|
|
|
779
779
|
},
|
|
780
780
|
}); });
|
|
781
781
|
|
|
782
|
+
var _path$15;
|
|
783
|
+
|
|
784
|
+
function _extends$2s() { _extends$2s = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2s.apply(this, arguments); }
|
|
785
|
+
|
|
786
|
+
function SvgChevronDown(props) {
|
|
787
|
+
return /*#__PURE__*/React.createElement("svg", _extends$2s({
|
|
788
|
+
viewBox: "0 0 16 16",
|
|
789
|
+
fill: "none",
|
|
790
|
+
strokeLinecap: "round",
|
|
791
|
+
strokeLinejoin: "round",
|
|
792
|
+
width: "1em",
|
|
793
|
+
height: "1em"
|
|
794
|
+
}, props), _path$15 || (_path$15 = /*#__PURE__*/React.createElement("path", {
|
|
795
|
+
d: "M4 6l4 4 4-4",
|
|
796
|
+
stroke: "currentColor"
|
|
797
|
+
})));
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
var _g$T;
|
|
801
|
+
|
|
802
|
+
function _extends$1w() { _extends$1w = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1w.apply(this, arguments); }
|
|
803
|
+
|
|
804
|
+
function SvgTrend(props) {
|
|
805
|
+
return /*#__PURE__*/React.createElement("svg", _extends$1w({
|
|
806
|
+
viewBox: "0 0 16 16",
|
|
807
|
+
fill: "none",
|
|
808
|
+
strokeLinecap: "round",
|
|
809
|
+
strokeLinejoin: "round",
|
|
810
|
+
width: "1em",
|
|
811
|
+
height: "1em"
|
|
812
|
+
}, props), _g$T || (_g$T = /*#__PURE__*/React.createElement("g", {
|
|
813
|
+
stroke: "currentColor"
|
|
814
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
815
|
+
d: "M15.333 4L9 10.333 5.667 7l-5 5"
|
|
816
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
817
|
+
d: "M11.333 4h4v4"
|
|
818
|
+
}))));
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
var _g$S;
|
|
822
|
+
|
|
823
|
+
function _extends$1v() { _extends$1v = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1v.apply(this, arguments); }
|
|
824
|
+
|
|
825
|
+
function SvgTrendDown(props) {
|
|
826
|
+
return /*#__PURE__*/React.createElement("svg", _extends$1v({
|
|
827
|
+
viewBox: "0 0 16 16",
|
|
828
|
+
fill: "none",
|
|
829
|
+
strokeLinecap: "round",
|
|
830
|
+
strokeLinejoin: "round",
|
|
831
|
+
width: "1em",
|
|
832
|
+
height: "1em"
|
|
833
|
+
}, props), _g$S || (_g$S = /*#__PURE__*/React.createElement("g", {
|
|
834
|
+
stroke: "currentColor"
|
|
835
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
836
|
+
d: "M15.333 12L9 5.667 5.667 9l-5-5"
|
|
837
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
838
|
+
d: "M11.333 12h4V8"
|
|
839
|
+
}))));
|
|
840
|
+
}
|
|
841
|
+
|
|
782
842
|
var useLeaderboardStyles = makeStyles(function (theme) { return ({
|
|
783
843
|
root: {
|
|
784
844
|
'& >:nth-child(even) > li': {
|
|
@@ -792,6 +852,17 @@ var useLeaderboardListItemStyles = makeStyles(function (theme) { return ({
|
|
|
792
852
|
textDecoration: 'none',
|
|
793
853
|
},
|
|
794
854
|
}); });
|
|
855
|
+
var useLeaderboardFilterStyles = makeStyles(function (theme) { return ({
|
|
856
|
+
filterWrapper: {
|
|
857
|
+
alignItems: 'center',
|
|
858
|
+
cursor: 'pointer',
|
|
859
|
+
display: 'flex',
|
|
860
|
+
},
|
|
861
|
+
text: {
|
|
862
|
+
fontSize: '12px',
|
|
863
|
+
paddingRight: theme.spacing(1),
|
|
864
|
+
},
|
|
865
|
+
}); });
|
|
795
866
|
var useMoreLinkStyles = makeStyles(function (theme) { return ({
|
|
796
867
|
link: {
|
|
797
868
|
color: theme.palette.info.main,
|
|
@@ -800,16 +871,17 @@ var useMoreLinkStyles = makeStyles(function (theme) { return ({
|
|
|
800
871
|
}); });
|
|
801
872
|
|
|
802
873
|
var Leaderboard = function (props) {
|
|
803
|
-
var data = props.data, EmptyState = props.EmptyState, title = props.title, moreLink = props.moreLink, subtitle = props.subtitle;
|
|
874
|
+
var data = props.data, EmptyState = props.EmptyState, filterProps = props.filterProps, title = props.title, moreLink = props.moreLink, subtitle = props.subtitle;
|
|
804
875
|
var classes = useLeaderboardStyles(props);
|
|
805
876
|
var isEmpty = data.length === 0;
|
|
806
877
|
var slicedData = data.slice(0, 5);
|
|
807
878
|
var isOverflow = data.length > 5;
|
|
808
|
-
var showMoreButton = !isEmpty && isOverflow;
|
|
879
|
+
var showMoreButton = !isEmpty && ((moreLink === null || moreLink === void 0 ? void 0 : moreLink.show) || isOverflow);
|
|
809
880
|
return (React__default.createElement(Box, { display: "flex", flexDirection: "column" },
|
|
810
881
|
React__default.createElement(Box, { alignItems: "left" },
|
|
811
|
-
React__default.createElement(Typography, { variant: "
|
|
812
|
-
React__default.createElement(Typography, {
|
|
882
|
+
React__default.createElement(Typography, { variant: "h5" }, title),
|
|
883
|
+
React__default.createElement(Typography, { className: classes.text }, subtitle),
|
|
884
|
+
filterProps && React__default.createElement(LeaderboardFilter, __assign$1({}, filterProps))),
|
|
813
885
|
!isEmpty ? (React__default.createElement(List, { classes: classes }, slicedData.map(function (itemProps, index) { return (React__default.createElement(LeaderboardListItem, __assign$1({ key: "tile-list-item-" + index }, itemProps))); }))) : (EmptyState),
|
|
814
886
|
moreLink && showMoreButton && React__default.createElement(MoreLink, { text: moreLink.text, to: moreLink.to })));
|
|
815
887
|
};
|
|
@@ -824,6 +896,38 @@ var LeaderboardListItem = function (props) {
|
|
|
824
896
|
React__default.createElement(Avatar, __assign$1({}, image), ItemIcon && React__default.createElement(Icon, { icon: ItemIcon })))),
|
|
825
897
|
React__default.createElement(ListItemText, { primary: title, secondary: subtitle }))));
|
|
826
898
|
};
|
|
899
|
+
var LeaderboardFilter = function (props) {
|
|
900
|
+
var onChange = props.onChange, options = props.options, text = props.text;
|
|
901
|
+
var classes = useLeaderboardFilterStyles(props);
|
|
902
|
+
var _a = useState(false), open = _a[0], setOpen = _a[1];
|
|
903
|
+
var _b = useState(null), menuAnchor = _b[0], setMenuAnchor = _b[1];
|
|
904
|
+
var _c = useState(null), selection = _c[0], setSelection = _c[1];
|
|
905
|
+
var handleOpen = function (event) {
|
|
906
|
+
setMenuAnchor(event.currentTarget);
|
|
907
|
+
setOpen(true);
|
|
908
|
+
};
|
|
909
|
+
var handleClose = function () {
|
|
910
|
+
setMenuAnchor(null);
|
|
911
|
+
setOpen(false);
|
|
912
|
+
};
|
|
913
|
+
var handleSelection = function (label, value) {
|
|
914
|
+
if (typeof onChange === 'function') {
|
|
915
|
+
onChange(value);
|
|
916
|
+
}
|
|
917
|
+
setSelection(label);
|
|
918
|
+
handleClose();
|
|
919
|
+
};
|
|
920
|
+
if (options.length < 1)
|
|
921
|
+
return null;
|
|
922
|
+
return (React__default.createElement(React__default.Fragment, null,
|
|
923
|
+
React__default.createElement(Box, { className: classes.filterWrapper, pt: 1, onClick: handleOpen },
|
|
924
|
+
React__default.createElement(Typography, { className: classes.text }, selection || text),
|
|
925
|
+
React__default.createElement(Icon, { icon: SvgChevronDown })),
|
|
926
|
+
React__default.createElement(Menu, { anchorEl: menuAnchor, onClose: handleClose, open: open }, options.map(function (_a) {
|
|
927
|
+
var label = _a.label, value = _a.value;
|
|
928
|
+
return (React__default.createElement(MenuItem, { key: value, onClick: function () { return handleSelection(label, value); } }, label));
|
|
929
|
+
}))));
|
|
930
|
+
};
|
|
827
931
|
var MoreLink = function (props) {
|
|
828
932
|
var text = props.text, to = props.to;
|
|
829
933
|
var classes = useMoreLinkStyles(props);
|
|
@@ -856,48 +960,6 @@ var LeaderboardTile = function (props) {
|
|
|
856
960
|
React__default.createElement(Leaderboard, __assign$1({}, restProps))));
|
|
857
961
|
};
|
|
858
962
|
|
|
859
|
-
var _g$P;
|
|
860
|
-
|
|
861
|
-
function _extends$1v() { _extends$1v = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1v.apply(this, arguments); }
|
|
862
|
-
|
|
863
|
-
function SvgTrend(props) {
|
|
864
|
-
return /*#__PURE__*/React.createElement("svg", _extends$1v({
|
|
865
|
-
viewBox: "0 0 16 16",
|
|
866
|
-
fill: "none",
|
|
867
|
-
strokeLinecap: "round",
|
|
868
|
-
strokeLinejoin: "round",
|
|
869
|
-
width: "1em",
|
|
870
|
-
height: "1em"
|
|
871
|
-
}, props), _g$P || (_g$P = /*#__PURE__*/React.createElement("g", {
|
|
872
|
-
stroke: "currentColor"
|
|
873
|
-
}, /*#__PURE__*/React.createElement("path", {
|
|
874
|
-
d: "M15.333 4L9 10.333 5.667 7l-5 5"
|
|
875
|
-
}), /*#__PURE__*/React.createElement("path", {
|
|
876
|
-
d: "M11.333 4h4v4"
|
|
877
|
-
}))));
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
var _g$O;
|
|
881
|
-
|
|
882
|
-
function _extends$1u() { _extends$1u = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1u.apply(this, arguments); }
|
|
883
|
-
|
|
884
|
-
function SvgTrendDown(props) {
|
|
885
|
-
return /*#__PURE__*/React.createElement("svg", _extends$1u({
|
|
886
|
-
viewBox: "0 0 16 16",
|
|
887
|
-
fill: "none",
|
|
888
|
-
strokeLinecap: "round",
|
|
889
|
-
strokeLinejoin: "round",
|
|
890
|
-
width: "1em",
|
|
891
|
-
height: "1em"
|
|
892
|
-
}, props), _g$O || (_g$O = /*#__PURE__*/React.createElement("g", {
|
|
893
|
-
stroke: "currentColor"
|
|
894
|
-
}, /*#__PURE__*/React.createElement("path", {
|
|
895
|
-
d: "M15.333 12L9 5.667 5.667 9l-5-5"
|
|
896
|
-
}), /*#__PURE__*/React.createElement("path", {
|
|
897
|
-
d: "M11.333 12h4V8"
|
|
898
|
-
}))));
|
|
899
|
-
}
|
|
900
|
-
|
|
901
963
|
var useKpiMetricStyles = makeStyles(function (theme) { return ({
|
|
902
964
|
iconContainer: {
|
|
903
965
|
fontSize: theme.spacing(3),
|