diff --git a/src/common/ui/SpacedList.tsx b/src/common/ui/SpacedList.tsx
new file mode 100644
index 00000000..799af698
--- /dev/null
+++ b/src/common/ui/SpacedList.tsx
@@ -0,0 +1,24 @@
+import React from "react"
+import { List, Box } from "@mui/material"
+
+const SpacedList = ({
+ children,
+ itemSpacing
+}: {
+ children: React.ReactNode
+ itemSpacing: number
+}) => {
+ return (
+
+ {React.Children.map(children, (child, idx) => (
+
+ {child}
+
+ ))}
+
+ )
+}
+
+export default SpacedList
diff --git a/src/features/sidebar/view/internal/sidebar/projects/ProjectList.tsx b/src/features/sidebar/view/internal/sidebar/projects/ProjectList.tsx
index d96def6b..87ea22e9 100644
--- a/src/features/sidebar/view/internal/sidebar/projects/ProjectList.tsx
+++ b/src/features/sidebar/view/internal/sidebar/projects/ProjectList.tsx
@@ -1,34 +1,36 @@
import { useContext } from "react"
-import { List, Box, Typography } from "@mui/material"
+import { Box, Typography } from "@mui/material"
import { ProjectsContainerContext } from "@/common"
+import SpacedList from "@/common/ui/SpacedList"
import { useProjectSelection } from "@/features/projects/data"
-import ProjectListItem from "./ProjectListItem"
-import ProjectListItemPlaceholder from "./ProjectListItemPlaceholder"
+import ProjectListItem, { Skeleton as ProjectListItemSkeleton } from "./ProjectListItem"
const ProjectList = () => {
const { projects, isLoading } = useContext(ProjectsContainerContext)
const projectSelection = useProjectSelection()
- const loadingItemCount = 6
- if (isLoading || projects.length > 0) {
+ const itemSpacing = 1
+ if (isLoading) {
return (
-
- {isLoading &&
- [...new Array(loadingItemCount)].map((_, index) => (
-
+
+ {
+ [...new Array(6)].map((_, idx) => (
+
))
}
- {!isLoading && projects.map((project, idx) => (
-
-
-
+
+ )
+ } else if (projects.length > 0) {
+ return (
+
+ {projects.map(project => (
+ projectSelection.selectProject(project)}
+ />
))}
-
+
)
} else {
return (
diff --git a/src/features/sidebar/view/internal/sidebar/projects/ProjectListItem.tsx b/src/features/sidebar/view/internal/sidebar/projects/ProjectListItem.tsx
index ab238004..3e8e8989 100644
--- a/src/features/sidebar/view/internal/sidebar/projects/ProjectListItem.tsx
+++ b/src/features/sidebar/view/internal/sidebar/projects/ProjectListItem.tsx
@@ -1,67 +1,145 @@
import {
Box,
ListItem,
- ListItemButton,
ListItemText,
+ ListItemButton,
+ Skeleton as MuiSkeleton,
Stack,
Typography
} from "@mui/material"
import MenuItemHover from "@/common/ui/MenuItemHover"
import { Project } from "@/features/projects/domain"
import ProjectAvatar from "./ProjectAvatar"
+import ProjectAvatarSquircle from "./ProjectAvatarSquircle"
+
+const AVATAR_SIZE = { width: 40, height: 40 }
const ProjectListItem = ({
project,
- isSelected,
- onSelectProject
+ selected,
+ onSelect
}: {
project: Project
- isSelected: boolean
- onSelectProject: (project: Project) => void
+ selected: boolean
+ onSelect: () => void
+}) => {
+ return (
+
+ }>
+
+ {project.displayName}
+
+ }
+ />
+
+ )
+}
+
+export default ProjectListItem
+
+export const Skeleton = () => {
+ return (
+
+ }>
+
+
+ )
+}
+
+const Template = ({
+ disabled,
+ selected,
+ onSelect,
+ avatar,
+ children
+}: {
+ disabled?: boolean
+ selected?: boolean
+ onSelect?: () => void
+ avatar: React.ReactNode
+ children?: React.ReactNode
}) => {
return (
+ {disabled &&
+
+ {children}
+
+ }
+ {!disabled &&
onSelectProject(project)}
- selected={isSelected}
+ disabled={disabled}
+ onClick={onSelect}
+ selected={selected}
disableGutters
sx={{ padding: 0 }}
>
-
-
-
-
-
-
- {project.displayName}
-
- }
- />
-
-
+
+ {children}
+
+ }
)
}
-export default ProjectListItem
+const ButtonLabel = ({
+ disabled,
+ avatar,
+ children
+}: {
+ disabled?: boolean
+ avatar: React.ReactNode
+ children?: React.ReactNode
+}) => {
+ return (
+
+
+
+
+ {avatar}
+
+
+ {children}
+
+
+ )
+}
diff --git a/src/features/sidebar/view/internal/sidebar/projects/ProjectListItemPlaceholder.tsx b/src/features/sidebar/view/internal/sidebar/projects/ProjectListItemPlaceholder.tsx
deleted file mode 100644
index 77de983a..00000000
--- a/src/features/sidebar/view/internal/sidebar/projects/ProjectListItemPlaceholder.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import { ListItem, ListItemText, Stack, Skeleton } from "@mui/material"
-import MenuItemHover from "@/common/ui/MenuItemHover"
-import ProjectAvatarSquircle from "./ProjectAvatarSquircle"
-
-const ProjectListItemPlaceholder = () => {
- return (
-
-
-
-
-
-
-
- }
- />
-
-
-
- )
-}
-
-export default ProjectListItemPlaceholder
\ No newline at end of file