2024-08-08 20:11:18 +05:30
|
|
|
import { IFavorite } from "@plane/types";
|
|
|
|
|
import {
|
|
|
|
|
generateFavoriteItemLink,
|
|
|
|
|
getFavoriteItemIcon,
|
|
|
|
|
} from "@/components/workspace/sidebar/favorites/favorite-items/common";
|
|
|
|
|
import { useProject, usePage, useProjectView, useCycle, useModule } from "@/hooks/store";
|
|
|
|
|
|
|
|
|
|
export const useFavoriteItemDetails = (workspaceSlug: string, favorite: IFavorite) => {
|
2024-08-16 16:35:05 +05:30
|
|
|
const favoriteItemId = favorite?.entity_data?.id;
|
2024-08-08 20:11:18 +05:30
|
|
|
const favoriteItemLogoProps = favorite?.entity_data?.logo_props;
|
|
|
|
|
const favoriteItemName = favorite?.entity_data.name || favorite?.name;
|
|
|
|
|
const favoriteItemEntityType = favorite?.entity_type;
|
|
|
|
|
|
|
|
|
|
// store hooks
|
|
|
|
|
const { getViewById } = useProjectView();
|
2024-08-14 12:53:53 +05:30
|
|
|
const { getProjectById } = useProject();
|
2024-08-08 20:11:18 +05:30
|
|
|
const { getCycleById } = useCycle();
|
|
|
|
|
const { getModuleById } = useModule();
|
|
|
|
|
|
|
|
|
|
// derived values
|
|
|
|
|
const pageDetail = usePage(favoriteItemId ?? "");
|
|
|
|
|
const viewDetails = getViewById(favoriteItemId ?? "");
|
|
|
|
|
const cycleDetail = getCycleById(favoriteItemId ?? "");
|
|
|
|
|
const moduleDetail = getModuleById(favoriteItemId ?? "");
|
|
|
|
|
|
2024-08-14 12:53:53 +05:30
|
|
|
const currentProjectDetails = getProjectById(favorite.project_id ?? "");
|
|
|
|
|
|
2024-08-08 20:11:18 +05:30
|
|
|
let itemIcon;
|
|
|
|
|
let itemTitle;
|
|
|
|
|
const itemLink = generateFavoriteItemLink(workspaceSlug.toString(), favorite);
|
|
|
|
|
|
|
|
|
|
switch (favoriteItemEntityType) {
|
|
|
|
|
case "project":
|
|
|
|
|
itemTitle = currentProjectDetails?.name || favoriteItemName;
|
|
|
|
|
itemIcon = getFavoriteItemIcon("project", currentProjectDetails?.logo_props || favoriteItemLogoProps);
|
|
|
|
|
break;
|
|
|
|
|
case "page":
|
|
|
|
|
itemTitle = pageDetail.name || favoriteItemName;
|
|
|
|
|
itemIcon = getFavoriteItemIcon("page", pageDetail?.logo_props || favoriteItemLogoProps);
|
|
|
|
|
break;
|
|
|
|
|
case "view":
|
|
|
|
|
itemTitle = viewDetails?.name || favoriteItemName;
|
|
|
|
|
itemIcon = getFavoriteItemIcon("view", viewDetails?.logo_props || favoriteItemLogoProps);
|
|
|
|
|
break;
|
|
|
|
|
case "cycle":
|
|
|
|
|
itemTitle = cycleDetail?.name || favoriteItemName;
|
|
|
|
|
itemIcon = getFavoriteItemIcon("cycle");
|
|
|
|
|
break;
|
|
|
|
|
case "module":
|
|
|
|
|
itemTitle = moduleDetail?.name || favoriteItemName;
|
|
|
|
|
itemIcon = getFavoriteItemIcon("module");
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
itemTitle = favoriteItemName;
|
|
|
|
|
itemIcon = getFavoriteItemIcon(favoriteItemEntityType);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return { itemIcon, itemTitle, itemLink };
|
|
|
|
|
};
|