[WEB-2202] chore: user favorites mutation and code refactor (#5330)
* chore: fav item drag and drop improvement * chore: user favorite type updated * chore: user favorites helper function added * dev: favorite item common component added * dev: favorite item component added and code refactor * fix: build error * chore: code refactor * chore: code refactor * chore: code refactor
This commit is contained in:
parent
a2098ffb5e
commit
48cb0f5afc
15 changed files with 381 additions and 224 deletions
58
web/core/hooks/use-favorite-item-details.tsx
Normal file
58
web/core/hooks/use-favorite-item-details.tsx
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
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) => {
|
||||
const favoriteItemId = favorite.entity_data.id;
|
||||
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();
|
||||
const { currentProjectDetails } = useProject();
|
||||
const { getCycleById } = useCycle();
|
||||
const { getModuleById } = useModule();
|
||||
|
||||
// derived values
|
||||
const pageDetail = usePage(favoriteItemId ?? "");
|
||||
const viewDetails = getViewById(favoriteItemId ?? "");
|
||||
const cycleDetail = getCycleById(favoriteItemId ?? "");
|
||||
const moduleDetail = getModuleById(favoriteItemId ?? "");
|
||||
|
||||
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 };
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue