feat: dashboard widgets (#3362)

* 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>
This commit is contained in:
Bavisetti Narayan 2024-01-18 15:49:54 +05:30 committed by sriram veeraghanta
parent f347c1cd69
commit c9337d4a41
122 changed files with 6790 additions and 849 deletions

View file

@ -5,8 +5,8 @@ import { observer } from "mobx-react-lite";
import { FilterHeader, FilterOption } from "components/issues";
// icons
import { StateGroupIcon } from "@plane/ui";
import { STATE_GROUPS } from "constants/state";
// constants
import { ISSUE_STATE_GROUPS } from "constants/issue";
type Props = {
appliedFilters: string[] | null;
@ -22,7 +22,7 @@ export const FilterStateGroup: React.FC<Props> = observer((props) => {
const appliedFiltersCount = appliedFilters?.length ?? 0;
const filteredOptions = ISSUE_STATE_GROUPS.filter((s) => s.key.includes(searchQuery.toLowerCase()));
const filteredOptions = Object.values(STATE_GROUPS).filter((s) => s.key.includes(searchQuery.toLowerCase()));
const handleViewToggle = () => {
if (!filteredOptions) return;
@ -48,7 +48,7 @@ export const FilterStateGroup: React.FC<Props> = observer((props) => {
isChecked={appliedFilters?.includes(stateGroup.key) ? true : false}
onClick={() => handleUpdate(stateGroup.key)}
icon={<StateGroupIcon stateGroup={stateGroup.key} />}
title={stateGroup.title}
title={stateGroup.label}
/>
))}
{filteredOptions.length > 5 && (

View file

@ -1,11 +1,12 @@
import { Avatar, PriorityIcon, StateGroupIcon } from "@plane/ui";
import { ISSUE_PRIORITIES, ISSUE_STATE_GROUPS } from "constants/issue";
import { ISSUE_PRIORITIES } from "constants/issue";
import { renderEmoji } from "helpers/emoji.helper";
import { ILabelRootStore } from "store/label";
import { IMemberRootStore } from "store/member";
import { IProjectStore } from "store/project/project.store";
import { IStateStore } from "store/state.store";
import { GroupByColumnTypes, IGroupByColumn } from "@plane/types";
import { STATE_GROUPS } from "constants/state";
export const getGroupByColumns = (
groupBy: GroupByColumnTypes | null,
@ -71,11 +72,11 @@ const getStateColumns = (projectState: IStateStore): IGroupByColumn[] | undefine
};
const getStateGroupColumns = () => {
const stateGroups = ISSUE_STATE_GROUPS;
const stateGroups = STATE_GROUPS;
return stateGroups.map((stateGroup) => ({
return Object.values(stateGroups).map((stateGroup) => ({
id: stateGroup.key,
name: stateGroup.title,
name: stateGroup.label,
icon: (
<div className="w-3.5 h-3.5 rounded-full">
<StateGroupIcon stateGroup={stateGroup.key} width="14" height="14" />