forked from github/plane
53e443d816
* feat: added new issue subscriber table
* dev: notification model
* feat: added CRUD operation for issue subscriber
* Revert "feat: added CRUD operation for issue subscriber"
This reverts commit b22e062576
.
* feat: added CRUD operation for issue subscriber
* dev: notification models and operations
* dev: remove delete endpoint response data
* dev: notification endpoints and fix bg worker for saving notifications
* feat: added list and unsubscribe function in issue subscriber
* dev: filter by snoozed and response update for list and permissions
* dev: update issue notifications
* dev: notification segregation
* dev: update notifications
* dev: notification filtering
* dev: add issue name in notifications
* dev: notification new endpoints
* fix: pushing local settings
* feat: notification workflow setup and made basic UI
* style: improved UX with toast alerts and other interactions
refactor: changed classnames according to new theme structure, changed all icons to material icons
* feat: showing un-read notification count
* feat: not showing 'subscribe' button on issue created by user & assigned to user
not showing 'Create by you' for view & guest of the workspace
* fix: 'read' -> 'unread' heading, my issue wrong filter
* feat: made snooze dropdown & modal
feat: switched to calendar
* fix: minor ui fixes
* feat: snooze modal date/time select
* fix: params for read/un-read notification
* style: snooze notification modal
---------
Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
Co-authored-by: pablohashescobar <nikhilschacko@gmail.com>
Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
72 lines
2.5 KiB
TypeScript
72 lines
2.5 KiB
TypeScript
// ui
|
|
import { PieGraph } from "components/ui";
|
|
// helpers
|
|
import { capitalizeFirstLetter } from "helpers/string.helper";
|
|
// types
|
|
import { IUserStateDistribution } from "types";
|
|
// constants
|
|
import { STATE_GROUP_COLORS } from "constants/state";
|
|
|
|
type Props = {
|
|
groupedIssues: IUserStateDistribution[] | undefined;
|
|
};
|
|
|
|
export const IssuesPieChart: React.FC<Props> = ({ groupedIssues }) => (
|
|
<div>
|
|
<h3 className="mb-2 font-semibold">Issues by States</h3>
|
|
<div className="rounded-[10px] border border-custom-border-200 bg-custom-background-100 p-4">
|
|
<div className="grid grid-cols-1 sm:grid-cols-4">
|
|
<div className="sm:col-span-3">
|
|
<PieGraph
|
|
data={
|
|
groupedIssues?.map((cell) => ({
|
|
id: cell.state_group,
|
|
label: cell.state_group,
|
|
value: cell.state_count,
|
|
color: STATE_GROUP_COLORS[cell.state_group.toLowerCase()],
|
|
})) ?? []
|
|
}
|
|
height="320px"
|
|
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="text-custom-text-200 capitalize">{datum.datum.label} issues:</span>{" "}
|
|
{datum.datum.value}
|
|
</div>
|
|
)}
|
|
margin={{
|
|
top: 32,
|
|
right: 0,
|
|
bottom: 32,
|
|
left: 0,
|
|
}}
|
|
theme={{
|
|
background: "transparent",
|
|
}}
|
|
/>
|
|
</div>
|
|
<div className="flex sm:block items-center gap-3 flex-wrap justify-center sm:space-y-2 sm:self-end sm:justify-self-end sm:px-8 sm:pb-8">
|
|
{groupedIssues?.map((cell) => (
|
|
<div key={cell.state_group} className="flex items-center gap-2">
|
|
<div
|
|
className="h-2 w-2"
|
|
style={{ backgroundColor: STATE_GROUP_COLORS[cell.state_group] }}
|
|
/>
|
|
<div className="capitalize text-custom-text-200 text-xs whitespace-nowrap">
|
|
{cell.state_group}- {cell.state_count}
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|