forked from github/plane
c9337d4a41
* fix: created dashboard, widgets and dashboard widget model * fix: new user home dashboard * chore: recent projects list * chore: recent collaborators * chore: priority order change * chore: payload changes * chore: collaborator's active issue count * chore: all dashboard widgets added with services and typs * chore: centered metric for pie chart * chore: widget filters * chore: created issue filter * fix: created and assigned issues payload change * chore: created issue payload change * fix: date filter change * chore: implement filters * fix: added expansion fields * fix: changed issue structure with relation * chore: new issues response * fix: project member fix * chore: updated issue_relation structure * chore: code cleanup * chore: update issues response and added empty states * fix: button text wrap * chore: update empty state messages * fix: filters * chore: update dark mode empty states * build-error: Type check in the issue relation service * fix: issues redirection * fix: project empty state * chore: project member active check * chore: project member check in state and priority * chore: remove console logs and replace harcoded values with constants * fix: code refactoring * fix: key name changed * refactor: mapping through similar components using an array * fix: build errors --------- Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com> Co-authored-by: gurusainath <gurusainath007@gmail.com>
87 lines
3.2 KiB
TypeScript
87 lines
3.2 KiB
TypeScript
// ui
|
|
import { ProfileEmptyState, PieGraph } from "components/ui";
|
|
// image
|
|
import stateGraph from "public/empty-state/state_graph.svg";
|
|
// types
|
|
import { IUserProfileData, IUserStateDistribution } from "@plane/types";
|
|
// constants
|
|
import { STATE_GROUPS } from "constants/state";
|
|
|
|
type Props = {
|
|
stateDistribution: IUserStateDistribution[];
|
|
userProfile: IUserProfileData | undefined;
|
|
};
|
|
|
|
export const ProfileStateDistribution: React.FC<Props> = ({ stateDistribution, userProfile }) => {
|
|
if (!userProfile) return null;
|
|
|
|
return (
|
|
<div className="flex flex-col space-y-2">
|
|
<h3 className="text-lg font-medium">Issues by State</h3>
|
|
<div className="flex-grow rounded border border-custom-border-100 p-7">
|
|
{userProfile.state_distribution.length > 0 ? (
|
|
<div className="grid grid-cols-1 gap-x-6 md:grid-cols-2">
|
|
<div>
|
|
<PieGraph
|
|
data={
|
|
userProfile.state_distribution.map((group) => ({
|
|
id: group.state_group,
|
|
label: group.state_group,
|
|
value: group.state_count,
|
|
color: STATE_GROUPS[group.state_group].color,
|
|
})) ?? []
|
|
}
|
|
height="250px"
|
|
innerRadius={0.6}
|
|
cornerRadius={5}
|
|
padAngle={2}
|
|
enableArcLabels
|
|
arcLabelsTextColor="#000000"
|
|
enableArcLinkLabels={false}
|
|
activeInnerRadiusOffset={5}
|
|
colors={(datum) => datum.data.color}
|
|
tooltip={(datum) => (
|
|
<div className="flex items-center gap-2 rounded-md border border-custom-border-200 bg-custom-background-90 p-2 text-xs">
|
|
<span className="capitalize text-custom-text-200">{datum.datum.label} issues:</span>{" "}
|
|
{datum.datum.value}
|
|
</div>
|
|
)}
|
|
margin={{
|
|
top: 32,
|
|
right: 0,
|
|
bottom: 32,
|
|
left: 0,
|
|
}}
|
|
/>
|
|
</div>
|
|
<div className="flex items-center">
|
|
<div className="w-full space-y-4">
|
|
{stateDistribution.map((group) => (
|
|
<div key={group.state_group} className="flex items-center justify-between gap-2 text-xs">
|
|
<div className="flex items-center gap-1.5">
|
|
<div
|
|
className="h-2.5 w-2.5 rounded-sm"
|
|
style={{
|
|
backgroundColor: STATE_GROUPS[group.state_group].color,
|
|
}}
|
|
/>
|
|
<div className="whitespace-nowrap capitalize">{group.state_group}</div>
|
|
</div>
|
|
<div>{group.state_count}</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
) : (
|
|
<ProfileEmptyState
|
|
title="No Data yet"
|
|
description="Create issues to view the them by states in the graph for better analysis."
|
|
image={stateGraph}
|
|
/>
|
|
)}
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|