Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/constants/src/workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@ export const WORKSPACE_SIDEBAR_STATIC_NAVIGATION_ITEMS_LINKS: IWorkspaceSidebarN
WORKSPACE_SIDEBAR_STATIC_NAVIGATION_ITEMS["projects"],
];

export const IS_FAVORITE_MENU_OPEN = "is_favorite_menu_open";
export const WORKSPACE_DEFAULT_SEARCH_RESULT: IWorkspaceSearchResults = {
results: {
workspace: [],
Expand Down
18 changes: 15 additions & 3 deletions web/core/components/cycles/list/cycle-list-item-action.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,14 @@ import { useParams, usePathname, useSearchParams } from "next/navigation";
import { useForm } from "react-hook-form";
import { Eye, Users } from "lucide-react";
// types
import { CYCLE_FAVORITED, CYCLE_UNFAVORITED, EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import {
CYCLE_FAVORITED,
CYCLE_UNFAVORITED,
EUserPermissions,
EUserPermissionsLevel,
IS_FAVORITE_MENU_OPEN,
} from "@plane/constants";
import { useLocalStorage } from "@plane/hooks";
import { useTranslation } from "@plane/i18n";
import { ICycle, TCycleGroups } from "@plane/types";
// ui
Expand All @@ -15,8 +22,6 @@ import { Avatar, AvatarGroup, FavoriteStar, LayersIcon, Tooltip, TransferIcon, s
import { CycleQuickActions, TransferIssuesModal } from "@/components/cycles";
import { DateRangeDropdown } from "@/components/dropdowns";
import { ButtonAvatars } from "@/components/dropdowns/member/avatar";
// constants
// helpers
import { getDate } from "@/helpers/date-time.helper";
import { getFileURL } from "@/helpers/file.helper";
// hooks
Expand Down Expand Up @@ -59,6 +64,12 @@ export const CycleListItemAction: FC<Props> = observer((props) => {
const { captureEvent } = useEventTracker();
const { allowPermissions } = useUserPermissions();

// local storage
const { setValue: toggleFavoriteMenu, storedValue: isFavoriteMenuOpen } = useLocalStorage<boolean>(
IS_FAVORITE_MENU_OPEN,
false
);

const { getUserDetails } = useMember();

// form
Expand Down Expand Up @@ -91,6 +102,7 @@ export const CycleListItemAction: FC<Props> = observer((props) => {

const addToFavoritePromise = addCycleToFavorites(workspaceSlug?.toString(), projectId.toString(), cycleId).then(
() => {
if (!isFavoriteMenuOpen) toggleFavoriteMenu(true);
captureEvent(CYCLE_FAVORITED, {
cycle_id: cycleId,
element: "List layout",
Expand Down
7 changes: 6 additions & 1 deletion web/core/components/modules/module-card-item.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ import {
MODULE_UNFAVORITED,
EUserPermissions,
EUserPermissionsLevel,
IS_FAVORITE_MENU_OPEN,
} from "@plane/constants";
import { useLocalStorage } from "@plane/hooks";
import { IModule } from "@plane/types";
import {
Card,
Expand All @@ -30,7 +32,6 @@ import { DateRangeDropdown } from "@/components/dropdowns";
import { ButtonAvatars } from "@/components/dropdowns/member/avatar";
import { ModuleQuickActions } from "@/components/modules";
import { ModuleStatusDropdown } from "@/components/modules/module-status-dropdown";
// constants
// helpers
import { getDate, renderFormattedPayloadDate } from "@/helpers/date-time.helper";
import { generateQueryParams } from "@/helpers/router.helper";
Expand Down Expand Up @@ -59,6 +60,9 @@ export const ModuleCardItem: React.FC<Props> = observer((props) => {
const { getUserDetails } = useMember();
const { captureEvent } = useEventTracker();

// local storage
const { setValue: toggleFavoriteMenu, storedValue } = useLocalStorage<boolean>(IS_FAVORITE_MENU_OPEN, false);

// derived values
const moduleDetails = getModuleById(moduleId);
const isEditingAllowed = allowPermissions(
Expand All @@ -76,6 +80,7 @@ export const ModuleCardItem: React.FC<Props> = observer((props) => {

const addToFavoritePromise = addModuleToFavorites(workspaceSlug.toString(), projectId.toString(), moduleId).then(
() => {
if (!storedValue) toggleFavoriteMenu(true);
captureEvent(MODULE_FAVORITED, {
module_id: moduleId,
element: "Grid layout",
Expand Down
5 changes: 5 additions & 0 deletions web/core/components/modules/module-list-item-action.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
EUserPermissions,
EUserPermissionsLevel,
} from "@plane/constants";
import { useLocalStorage } from "@plane/hooks";
import { useTranslation } from "@plane/i18n";
import { IModule } from "@plane/types";
// ui
Expand Down Expand Up @@ -45,6 +46,8 @@ export const ModuleListItemAction: FC<Props> = observer((props) => {

const { t } = useTranslation();

// local storage
const { setValue: toggleFavoriteMenu, storedValue } = useLocalStorage<boolean>("is_favorite_menu_open", false);
// derived values

const moduleStatus = MODULE_STATUS.find((status) => status.value === moduleDetails.status);
Expand All @@ -63,6 +66,8 @@ export const ModuleListItemAction: FC<Props> = observer((props) => {

const addToFavoritePromise = addModuleToFavorites(workspaceSlug.toString(), projectId.toString(), moduleId).then(
() => {
// open favorites menu if closed
if (!storedValue) toggleFavoriteMenu(true);
captureEvent(MODULE_FAVORITED, {
module_id: moduleId,
element: "Grid layout",
Expand Down
16 changes: 13 additions & 3 deletions web/core/components/pages/editor/header/extra-options.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
"use client";

import { observer } from "mobx-react";
// constants
import { IS_FAVORITE_MENU_OPEN } from "@plane/constants";
// editor
import { EditorRefApi } from "@plane/editor";
// plane hooks
import { useLocalStorage } from "@plane/hooks";
// ui
import { ArchiveIcon, FavoriteStar, setToast, TOAST_TYPE, Tooltip } from "@plane/ui";
// components
Expand Down Expand Up @@ -37,6 +41,11 @@ export const PageExtraOptions: React.FC<Props> = observer((props) => {
} = page;
// use online status
const { isOnline } = useOnlineStatus();
// local storage
const { setValue: toggleFavoriteMenu, storedValue: isFavoriteMenuOpen } = useLocalStorage<boolean>(
IS_FAVORITE_MENU_OPEN,
false
);
// favorite handler
const handleFavorite = () => {
if (is_favorite) {
Expand All @@ -48,13 +57,14 @@ export const PageExtraOptions: React.FC<Props> = observer((props) => {
})
);
} else {
addToFavorites().then(() =>
addToFavorites().then(() => {
if (!isFavoriteMenuOpen) toggleFavoriteMenu(true);
setToast({
type: TOAST_TYPE.SUCCESS,
title: "Success!",
message: "Page added to favorites.",
})
);
});
});
}
};

Expand Down
12 changes: 11 additions & 1 deletion web/core/components/project/card.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import Link from "next/link";
import { useParams } from "next/navigation";
import { ArchiveRestoreIcon, Check, ExternalLink, LinkIcon, Lock, Settings, Trash2, UserPlus } from "lucide-react";
// types
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { EUserPermissions, EUserPermissionsLevel, IS_FAVORITE_MENU_OPEN } from "@plane/constants";
import { useLocalStorage } from "@plane/hooks";
import type { IProject } from "@plane/types";
// ui
import {
Expand Down Expand Up @@ -68,6 +69,11 @@ export const ProjectCard: React.FC<Props> = observer((props) => {
const hasMemberRole = project.member_role === EUserPermissions.MEMBER;
// archive
const isArchived = !!project.archived_at;
// local storage
const { setValue: toggleFavoriteMenu, storedValue: isFavoriteMenuOpen } = useLocalStorage<boolean>(
IS_FAVORITE_MENU_OPEN,
false
);

const handleAddToFavorites = () => {
if (!workspaceSlug) return;
Expand All @@ -78,6 +84,10 @@ export const ProjectCard: React.FC<Props> = observer((props) => {
success: {
title: "Success!",
message: () => "Project added to favorites.",
actionItems: () => {
if (!isFavoriteMenuOpen) toggleFavoriteMenu(true);
return <></>;
},
},
error: {
title: "Error!",
Expand Down
15 changes: 11 additions & 4 deletions web/core/components/views/view-list-item-action.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import { observer } from "mobx-react";
import { useParams } from "next/navigation";
import { Earth, Lock } from "lucide-react";
// types
import { EViewAccess, EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import { EViewAccess, EUserPermissions, EUserPermissionsLevel, IS_FAVORITE_MENU_OPEN } from "@plane/constants";
import { useLocalStorage } from "@plane/hooks";
import { IProjectView } from "@plane/types";
// ui
import { Tooltip, FavoriteStar } from "@plane/ui";
// components
import { DeleteProjectViewModal, CreateUpdateProjectViewModal, ViewQuickActions } from "@/components/views";
// constants
// helpers
import { calculateTotalFilters } from "@/helpers/filter.helper";
import { getPublishViewLink } from "@/helpers/project-views.helpers";
Expand Down Expand Up @@ -37,6 +37,12 @@ export const ViewListItemAction: FC<Props> = observer((props) => {
const { addViewToFavorites, removeViewFromFavorites } = useProjectView();
const { getUserDetails } = useMember();

// local storage
const { setValue: toggleFavoriteMenu, storedValue: isFavoriteOpen } = useLocalStorage<boolean>(
IS_FAVORITE_MENU_OPEN,
false
);

// derived values
const isEditingAllowed = allowPermissions(
[EUserPermissions.ADMIN, EUserPermissions.MEMBER],
Expand All @@ -50,10 +56,11 @@ export const ViewListItemAction: FC<Props> = observer((props) => {
const publishLink = getPublishViewLink(view?.anchor);

// handlers
const handleAddToFavorites = () => {
const handleAddToFavorites = async () => {
if (!workspaceSlug || !projectId) return;

addViewToFavorites(workspaceSlug.toString(), projectId.toString(), view.id);
await addViewToFavorites(workspaceSlug.toString(), projectId.toString(), view.id);
if (!isFavoriteOpen) toggleFavoriteMenu(true);
};

const handleRemoveFromFavorites = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { observer } from "mobx-react";
import { useParams } from "next/navigation";
import { ChevronRight, FolderPlus } from "lucide-react";
import { Disclosure, Transition } from "@headlessui/react";
import { IS_FAVORITE_MENU_OPEN } from "@plane/constants";
import { useTranslation } from "@plane/i18n";
// ui
import { IFavorite } from "@plane/types";
Expand Down Expand Up @@ -54,7 +55,7 @@ export const SidebarFavoritesMenu = observer(() => {
const { isMobile } = usePlatformOS();

// local storage
const { setValue: toggleFavoriteMenu, storedValue } = useLocalStorage<boolean>("is_favorite_menu_open", false);
const { setValue: toggleFavoriteMenu, storedValue } = useLocalStorage<boolean>(IS_FAVORITE_MENU_OPEN, false);
// derived values
const isFavoriteMenuOpen = !!storedValue;
// refs
Expand Down
16 changes: 13 additions & 3 deletions web/core/hooks/use-page-operations.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { useMemo } from "react";
// plane constants
import { IS_FAVORITE_MENU_OPEN } from "@plane/constants";
// plane editor
import { EditorRefApi } from "@plane/editor";
// plane types
Expand All @@ -11,6 +13,8 @@ import { copyUrlToClipboard } from "@/helpers/string.helper";
import { useCollaborativePageActions } from "@/hooks/use-collaborative-page-actions";
// store types
import { TPageInstance } from "@/store/pages/base-page";
// local storage
import useLocalStorage from "./use-local-storage";

export type TPageOperations = {
toggleLock: () => void;
Expand Down Expand Up @@ -46,6 +50,11 @@ export const usePageOperations = (
} = page;
// collaborative actions
const { executeCollaborativeAction } = useCollaborativePageActions(props);
// local storage
const { setValue: toggleFavoriteMenu, storedValue: isfavoriteMenuOpen } = useLocalStorage<boolean>(
IS_FAVORITE_MENU_OPEN,
false
);
// page operations
const pageOperations: TPageOperations = useMemo(() => {
const pageLink = getRedirectionLink();
Expand Down Expand Up @@ -141,13 +150,14 @@ export const usePageOperations = (
})
);
} else {
addToFavorites().then(() =>
addToFavorites().then(() => {
if (!isfavoriteMenuOpen) toggleFavoriteMenu(true);
setToast({
type: TOAST_TYPE.SUCCESS,
title: "Success!",
message: "Page added to favorites.",
})
);
});
});
}
},
toggleLock: async () => {
Expand Down