Skip to content

Commit c429ca7

Browse files
aaryan610pushya22
andauthored
refactor: recents widget for scalability (#6453)
Co-authored-by: pushya22 <[email protected]>
1 parent ee22dbb commit c429ca7

File tree

3 files changed

+31
-14
lines changed

3 files changed

+31
-14
lines changed

packages/types/src/home.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { TLogoProps } from "./common";
22
import { TIssuePriorities } from "./issues";
33

4-
export type TRecentActivityFilterKeys = "all item" | "issue" | "page" | "project";
4+
export type TRecentActivityFilterKeys = "all item" | "issue" | "page" | "project" | "workspace_page";
55
export type THomeWidgetKeys = "quick_links" | "recents" | "my_stickies" | "quick_tutorial" | "new_at_plane";
66

77
export type THomeWidgetProps = {
@@ -39,7 +39,7 @@ export type TIssueEntityData = {
3939

4040
export type TActivityEntityData = {
4141
id: string;
42-
entity_name: "page" | "project" | "issue";
42+
entity_name: "page" | "project" | "issue" | "workspace_page";
4343
entity_identifier: string;
4444
visited_at: string;
4545
entity_data: TPageEntityData | TProjectEntityData | TIssueEntityData;

web/core/components/home/widgets/recents/index.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,21 @@ const WIDGET_KEY = EWidgetKeys.RECENT_ACTIVITY;
2222
const workspaceService = new WorkspaceService();
2323
const filters: { name: TRecentActivityFilterKeys; icon?: React.ReactNode }[] = [
2424
{ name: "all item" },
25-
{ name: "issue", icon: <LayersIcon className="w-4 h-4" /> },
26-
{ name: "page", icon: <FileText size={16} /> },
27-
{ name: "project", icon: <Briefcase size={16} /> },
25+
{ name: "issue", icon: <LayersIcon className="flex-shrink-0 size-4" /> },
26+
{ name: "page", icon: <FileText className="flex-shrink-0 size-4" /> },
27+
{ name: "workspace_page", icon: <FileText className="flex-shrink-0 size-4" /> },
28+
{ name: "project", icon: <Briefcase className="flex-shrink-0 size-4" /> },
2829
];
2930

30-
export const RecentActivityWidget: React.FC<THomeWidgetProps> = observer((props) => {
31-
const { workspaceSlug } = props;
31+
type TRecentWidgetProps = THomeWidgetProps & {
32+
presetFilter?: TRecentActivityFilterKeys;
33+
showFilterSelect?: boolean;
34+
};
35+
36+
export const RecentActivityWidget: React.FC<TRecentWidgetProps> = observer((props) => {
37+
const { presetFilter, showFilterSelect = true, workspaceSlug } = props;
3238
// state
33-
const [filter, setFilter] = useState<TRecentActivityFilterKeys>(filters[0].name);
39+
const [filter, setFilter] = useState<TRecentActivityFilterKeys>(presetFilter ?? filters[0].name);
3440
// ref
3541
const ref = useRef<HTMLDivElement>(null);
3642
// store hooks
@@ -55,6 +61,7 @@ export const RecentActivityWidget: React.FC<THomeWidgetProps> = observer((props)
5561
const resolveRecent = (activity: TActivityEntityData) => {
5662
switch (activity.entity_name) {
5763
case "page":
64+
case "workspace_page":
5865
return <RecentPage activity={activity} ref={ref} workspaceSlug={workspaceSlug} />;
5966
case "project":
6067
return <RecentProject activity={activity} ref={ref} workspaceSlug={workspaceSlug} />;
@@ -72,7 +79,7 @@ export const RecentActivityWidget: React.FC<THomeWidgetProps> = observer((props)
7279
<div ref={ref} className="max-h-[500px] overflow-y-scroll">
7380
<div className="flex items-center justify-between mb-4">
7481
<div className="text-base font-semibold text-custom-text-350">Recents</div>
75-
<FiltersDropdown filters={filters} activeFilter={filter} setActiveFilter={setFilter} />
82+
{showFilterSelect && <FiltersDropdown filters={filters} activeFilter={filter} setActiveFilter={setFilter} />}
7683
</div>
7784
<div className="flex flex-col items-center justify-center">
7885
<RecentsEmptyState type={filter} />
@@ -89,8 +96,7 @@ export const RecentActivityWidget: React.FC<THomeWidgetProps> = observer((props)
8996
>
9097
<div className="flex items-center justify-between mb-2">
9198
<div className="text-base font-semibold text-custom-text-350">Recents</div>
92-
93-
<FiltersDropdown filters={filters} activeFilter={filter} setActiveFilter={setFilter} />
99+
{showFilterSelect && <FiltersDropdown filters={filters} activeFilter={filter} setActiveFilter={setFilter} />}
94100
</div>
95101
<div className="min-h-[250px] flex flex-col">
96102
{isLoading && <WidgetLoader widgetKey={WIDGET_KEY} />}

web/core/components/home/widgets/recents/page.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,37 @@
11
import { useRouter } from "next/navigation";
22
import { FileText } from "lucide-react";
3+
// plane types
34
import { TActivityEntityData, TPageEntityData } from "@plane/types";
5+
// plane ui
46
import { Avatar, Logo } from "@plane/ui";
7+
// plane utils
58
import { getFileURL } from "@plane/utils";
9+
// components
610
import { ListItem } from "@/components/core/list";
11+
// helpers
712
import { calculateTimeAgo } from "@/helpers/date-time.helper";
13+
// hooks
814
import { useMember } from "@/hooks/store";
915

1016
type BlockProps = {
1117
activity: TActivityEntityData;
1218
ref: React.RefObject<HTMLDivElement>;
1319
workspaceSlug: string;
1420
};
21+
1522
export const RecentPage = (props: BlockProps) => {
1623
const { activity, ref, workspaceSlug } = props;
1724
// router
1825
const router = useRouter();
19-
// hooks
26+
// store hooks
2027
const { getUserDetails } = useMember();
2128
// derived values
22-
const pageDetails: TPageEntityData = activity.entity_data as TPageEntityData;
29+
const pageDetails = activity.entity_data as TPageEntityData;
2330
const ownerDetails = getUserDetails(pageDetails?.owned_by);
31+
const pageLink = pageDetails.project_id
32+
? `/${workspaceSlug}/projects/${pageDetails.project_id}/pages/${pageDetails.id}`
33+
: `/${workspaceSlug}/pages/${pageDetails.id}`;
34+
2435
return (
2536
<ListItem
2637
key={activity.id}
@@ -58,7 +69,7 @@ export const RecentPage = (props: BlockProps) => {
5869
onItemClick={(e) => {
5970
e.preventDefault();
6071
e.stopPropagation();
61-
router.push(`/${workspaceSlug}/projects/${pageDetails?.project_id}/pages/${pageDetails.id}`);
72+
router.push(pageLink);
6273
}}
6374
/>
6475
);

0 commit comments

Comments
 (0)