diff --git a/front/.storybook/preview.ts b/front/.storybook/preview.ts
index 1852a6426..df1f1131f 100644
--- a/front/.storybook/preview.ts
+++ b/front/.storybook/preview.ts
@@ -4,6 +4,7 @@ import { ThemeProvider } from '@emotion/react';
import { withThemeFromJSXProvider } from '@storybook/addon-styling';
import { lightTheme, darkTheme } from '../src/modules/ui/themes/themes';
import { RootDecorator } from '../src/testing/decorators';
+import 'react-loading-skeleton/dist/skeleton.css';
import { mockedUserJWT } from '../src/testing/mock-data/jwt';
initialize();
diff --git a/front/src/modules/ui/dropdown/components/__stories__/DropdownMenu.stories.tsx b/front/src/modules/ui/dropdown/components/__stories__/DropdownMenu.stories.tsx
index ef11ca9b2..8e1f32086 100644
--- a/front/src/modules/ui/dropdown/components/__stories__/DropdownMenu.stories.tsx
+++ b/front/src/modules/ui/dropdown/components/__stories__/DropdownMenu.stories.tsx
@@ -6,6 +6,7 @@ import { IconPlus } from '@/ui/icon/index';
import { Avatar } from '@/users/components/Avatar';
import { ComponentDecorator } from '~/testing/decorators';
+import { DropdownMenuSkeletonItem } from '../../../relation-picker/components/skeletons/DropdownMenuSkeletonItem';
import { DropdownMenu } from '../DropdownMenu';
import { DropdownMenuCheckableItem } from '../DropdownMenuCheckableItem';
import { DropdownMenuItem } from '../DropdownMenuItem';
@@ -194,6 +195,19 @@ export const SimpleMenuItem: Story = {
),
};
+export const LoadingMenu: Story = {
+ ...WithContentBelow,
+ render: () => (
+
+
+
+
+
+
+
+ ),
+};
+
export const Search: Story = {
...WithContentBelow,
render: (args) => (
diff --git a/front/src/modules/ui/relation-picker/components/SingleEntitySelectBase.tsx b/front/src/modules/ui/relation-picker/components/SingleEntitySelectBase.tsx
index ca51d5170..788b28468 100644
--- a/front/src/modules/ui/relation-picker/components/SingleEntitySelectBase.tsx
+++ b/front/src/modules/ui/relation-picker/components/SingleEntitySelectBase.tsx
@@ -1,5 +1,4 @@
import { useRef } from 'react';
-import Skeleton from 'react-loading-skeleton';
import { Key } from 'ts-key-enum';
import { DropdownMenuItem } from '@/ui/dropdown/components/DropdownMenuItem';
@@ -14,7 +13,7 @@ import { useEntitySelectScroll } from '../hooks/useEntitySelectScroll';
import { EntityForSelect } from '../types/EntityForSelect';
import { RelationPickerHotkeyScope } from '../types/RelationPickerHotkeyScope';
-import { DropdownMenuItemsContainerSkeleton } from './skeletons/DropdownMenuItemsContainerSkeleton';
+import { DropdownMenuSkeletonItem } from './skeletons/DropdownMenuSkeletonItem';
export type EntitiesForSingleEntitySelect<
CustomEntityForSelect extends EntityForSelect,
@@ -67,9 +66,7 @@ export function SingleEntitySelectBase<
return (
{entities.loading ? (
-
-
-
+
) : entitiesInDropdown.length === 0 ? (
No result
) : (
diff --git a/front/src/modules/ui/relation-picker/components/skeletons/DropdownMenuItemsContainerSkeleton.tsx b/front/src/modules/ui/relation-picker/components/skeletons/DropdownMenuItemsContainerSkeleton.tsx
deleted file mode 100644
index 099f71df2..000000000
--- a/front/src/modules/ui/relation-picker/components/skeletons/DropdownMenuItemsContainerSkeleton.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import styled from '@emotion/styled';
-
-export const DropdownMenuItemsContainerSkeleton = styled.div`
- --horizontal-padding: ${({ theme }) => theme.spacing(1)};
- --vertical-padding: ${({ theme }) => theme.spacing(1)};
- align-items: center;
-
- border-radius: ${({ theme }) => theme.border.radius.sm};
-
- color: blue;
-
- height: calc(100% - 2 * var(--vertical-padding));
-
- padding: var(--vertical-padding) var(--horizontal-padding);
- width: calc(100% - 2 * var(--horizontal-padding));
-`;
diff --git a/front/src/modules/ui/relation-picker/components/skeletons/DropdownMenuSkeletonItem.tsx b/front/src/modules/ui/relation-picker/components/skeletons/DropdownMenuSkeletonItem.tsx
new file mode 100644
index 000000000..4bd02eb6e
--- /dev/null
+++ b/front/src/modules/ui/relation-picker/components/skeletons/DropdownMenuSkeletonItem.tsx
@@ -0,0 +1,28 @@
+import Skeleton, { SkeletonTheme } from 'react-loading-skeleton';
+import { useTheme } from '@emotion/react';
+import styled from '@emotion/styled';
+
+const StyledDropdownMenuSkeletonContainer = styled.div`
+ --horizontal-padding: ${({ theme }) => theme.spacing(1)};
+ --vertical-padding: ${({ theme }) => theme.spacing(2)};
+ align-items: center;
+ border-radius: ${({ theme }) => theme.border.radius.sm};
+ gap: ${({ theme }) => theme.spacing(2)};
+ height: calc(32px - 2 * var(--vertical-padding));
+ padding: var(--vertical-padding) var(--horizontal-padding);
+ width: calc(100% - 2 * var(--horizontal-padding));
+`;
+
+export function DropdownMenuSkeletonItem() {
+ const theme = useTheme();
+ return (
+
+
+
+
+
+ );
+}