mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
9065b5d368
* 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>
62 lines
2.2 KiB
TypeScript
62 lines
2.2 KiB
TypeScript
import { observer } from "mobx-react-lite";
|
|
// hooks
|
|
import { useApplication, useDashboard } from "hooks/store";
|
|
// components
|
|
import {
|
|
AssignedIssuesWidget,
|
|
CreatedIssuesWidget,
|
|
IssuesByPriorityWidget,
|
|
IssuesByStateGroupWidget,
|
|
OverviewStatsWidget,
|
|
RecentActivityWidget,
|
|
RecentCollaboratorsWidget,
|
|
RecentProjectsWidget,
|
|
WidgetProps,
|
|
} from "components/dashboard";
|
|
// types
|
|
import { TWidgetKeys } from "@plane/types";
|
|
|
|
const WIDGETS_LIST: {
|
|
[key in TWidgetKeys]: { component: React.FC<WidgetProps>; fullWidth: boolean };
|
|
} = {
|
|
overview_stats: { component: OverviewStatsWidget, fullWidth: true },
|
|
assigned_issues: { component: AssignedIssuesWidget, fullWidth: false },
|
|
created_issues: { component: CreatedIssuesWidget, fullWidth: false },
|
|
issues_by_state_groups: { component: IssuesByStateGroupWidget, fullWidth: false },
|
|
issues_by_priority: { component: IssuesByPriorityWidget, fullWidth: false },
|
|
recent_activity: { component: RecentActivityWidget, fullWidth: false },
|
|
recent_projects: { component: RecentProjectsWidget, fullWidth: false },
|
|
recent_collaborators: { component: RecentCollaboratorsWidget, fullWidth: true },
|
|
};
|
|
|
|
export const DashboardWidgets = observer(() => {
|
|
// store hooks
|
|
const {
|
|
router: { workspaceSlug },
|
|
} = useApplication();
|
|
const { homeDashboardId, homeDashboardWidgets } = useDashboard();
|
|
|
|
const doesWidgetExist = (widgetKey: TWidgetKeys) =>
|
|
Boolean(homeDashboardWidgets?.find((widget) => widget.key === widgetKey));
|
|
|
|
if (!workspaceSlug || !homeDashboardId) return null;
|
|
|
|
return (
|
|
<div className="grid lg:grid-cols-2 gap-7">
|
|
{Object.entries(WIDGETS_LIST).map(([key, widget]) => {
|
|
const WidgetComponent = widget.component;
|
|
// if the widget doesn't exist, return null
|
|
if (!doesWidgetExist(key as TWidgetKeys)) return null;
|
|
// if the widget is full width, return it in a 2 column grid
|
|
if (widget.fullWidth)
|
|
return (
|
|
<div className="col-span-2">
|
|
<WidgetComponent dashboardId={homeDashboardId} workspaceSlug={workspaceSlug} />
|
|
</div>
|
|
);
|
|
else return <WidgetComponent dashboardId={homeDashboardId} workspaceSlug={workspaceSlug} />;
|
|
})}
|
|
</div>
|
|
);
|
|
});
|