diff --git a/packages/types/src/favorite/favorite.d.ts b/packages/types/src/favorite/favorite.d.ts index 154d0e26616..092a1209599 100644 --- a/packages/types/src/favorite/favorite.d.ts +++ b/packages/types/src/favorite/favorite.d.ts @@ -1,9 +1,22 @@ +type TLogoProps = { + in_use: "emoji" | "icon"; + emoji?: { + value?: string; + url?: string; + }; + icon?: { + name?: string; + color?: string; + }; +}; + export type IFavorite = { id: string; name: string; entity_type: string; entity_data: { name: string; + logo_props?: TLogoProps | undefined; }; is_folder: boolean; sort_order: number; diff --git a/web/core/components/project/create-project-form.tsx b/web/core/components/project/create-project-form.tsx index 65c620635c6..53de7297964 100644 --- a/web/core/components/project/create-project-form.tsx +++ b/web/core/components/project/create-project-form.tsx @@ -294,7 +294,7 @@ export const CreateProjectForm: FC = observer((props) => { /> diff --git a/web/core/components/project/form.tsx b/web/core/components/project/form.tsx index 737f819835c..332c7528490 100644 --- a/web/core/components/project/form.tsx +++ b/web/core/components/project/form.tsx @@ -298,7 +298,7 @@ export const ProjectDetailsForm: FC = (props) => { /> diff --git a/web/core/components/workspace/sidebar/favorites/favorite-item.tsx b/web/core/components/workspace/sidebar/favorites/favorite-item.tsx index 79cd8dc563a..f824fc493f3 100644 --- a/web/core/components/workspace/sidebar/favorites/favorite-item.tsx +++ b/web/core/components/workspace/sidebar/favorites/favorite-item.tsx @@ -9,7 +9,16 @@ import { useParams } from "next/navigation"; import { Briefcase, FileText, Layers, MoreHorizontal, Star } from "lucide-react"; // ui import { IFavorite } from "@plane/types"; -import { ContrastIcon, CustomMenu, DiceIcon, DragHandle, FavoriteFolderIcon, LayersIcon, Tooltip } from "@plane/ui"; +import { + ContrastIcon, + CustomMenu, + DiceIcon, + DragHandle, + FavoriteFolderIcon, + LayersIcon, + Logo, + Tooltip, +} from "@plane/ui"; // components import { SidebarNavItem } from "@/components/sidebar"; @@ -20,6 +29,17 @@ import { useAppTheme } from "@/hooks/store"; import useOutsideClickDetector from "@/hooks/use-outside-click-detector"; import { usePlatformOS } from "@/hooks/use-platform-os"; +const iconClassName = `flex-shrink-0 size-4 stroke-[1.5] m-auto`; +const ICONS: Record = { + page: , + project: , + view: , + module: , + cycle: , + issue: , + folder: , +}; + export const FavoriteItem = observer( ({ favoriteMap, @@ -48,28 +68,18 @@ export const FavoriteItem = observer( const dragHandleRef = useRef(null); const actionSectionRef = useRef(null); - const getIcon = () => { - const className = `flex-shrink-0 size-4 stroke-[1.5] m-auto`; - - switch (favorite.entity_type) { - case "page": - return ; - case "project": - return ; - case "view": - return ; - case "module": - return ; - case "cycle": - return ; - case "issue": - return ; - case "folder": - return ; - default: - return ; - } - }; + const getIcon = () => ( + <> +
{ICONS[favorite.entity_type] || }
+
+ {favorite.entity_data?.logo_props?.in_use ? ( + + ) : ( + ICONS[favorite.entity_type] || + )} +
+ + ); const getLink = () => { switch (favorite.entity_type) { @@ -133,7 +143,10 @@ export const FavoriteItem = observer(
{ toggleFavoriteMenu(!isFavoriteMenuOpen)} className="flex-1 text-start"> YOUR FAVORITES - - { - setCreateNewFolder(true); - !isFavoriteMenuOpen && toggleFavoriteMenu(!isFavoriteMenuOpen); - }} - className={cn("size-4 flex-shrink-0 text-custom-sidebar-text-400 transition-transform")} - /> + + + { + setCreateNewFolder(true); + !isFavoriteMenuOpen && toggleFavoriteMenu(!isFavoriteMenuOpen); + }} + className={cn("size-4 flex-shrink-0 text-custom-sidebar-text-400 transition-transform")} + /> + toggleFavoriteMenu(!isFavoriteMenuOpen)} className={cn("size-4 flex-shrink-0 text-custom-sidebar-text-400 transition-transform", { @@ -168,34 +170,42 @@ export const SidebarFavoritesMenu = observer(() => { static > {createNewFolder && } - {uniqBy(orderBy(Object.values(favoriteMap), "sequence", "desc"), "id") - .filter((fav) => !fav.parent) - .map((fav, index) => ( - - {fav.is_folder ? ( - - ) : ( - - )} - - ))} + {Object.keys(favoriteMap).length === 0 ? ( + <> + {!sidebarCollapsed && ( + No favorites yet + )} + + ) : ( + uniqBy(orderBy(Object.values(favoriteMap), "sequence", "desc"), "id") + .filter((fav) => !fav.parent) + .map((fav, index) => ( + + {fav.is_folder ? ( + + ) : ( + + )} + + )) + )} )} diff --git a/web/core/components/workspace/sidebar/quick-actions.tsx b/web/core/components/workspace/sidebar/quick-actions.tsx index 30f20e4da24..f0eca5cf091 100644 --- a/web/core/components/workspace/sidebar/quick-actions.tsx +++ b/web/core/components/workspace/sidebar/quick-actions.tsx @@ -108,7 +108,7 @@ export const SidebarQuickActions = observer(() => { )} {isDraftButtonOpen && ( -
+