Skip to content

Commit fdfb505

Browse files
authored
fix: display database view icon (#33)
1 parent 3317454 commit fdfb505

File tree

1 file changed

+23
-34
lines changed

1 file changed

+23
-34
lines changed

src/components/database/components/tabs/DatabaseTabs.tsx

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,13 @@
1-
import { DatabaseViewLayout, View, YDatabaseView, YjsDatabaseKey } from '@/application/types';
21
import { useDatabase, useDatabaseContext } from '@/application/database-yjs';
2+
import { DatabaseViewLayout, View, ViewLayout, YDatabaseView, YjsDatabaseKey } from '@/application/types';
3+
import PageIcon from '@/components/_shared/view-icon/PageIcon';
34
import { DatabaseActions } from '@/components/database/components/conditions';
45
import { useConditionsContext } from '@/components/database/components/conditions/context';
56
import DatabaseBlockActions from '@/components/database/components/conditions/DatabaseBlockActions';
67
import { Tooltip } from '@mui/material';
7-
import {
8-
forwardRef,
9-
FunctionComponent,
10-
SVGProps,
11-
useCallback,
12-
useEffect,
13-
useMemo,
14-
useState,
15-
} from 'react';
16-
import { ViewTabs, ViewTab } from 'src/components/_shared/tabs/ViewTabs';
8+
import { forwardRef, useCallback, useEffect, useMemo, useState } from 'react';
179
import { useTranslation } from 'react-i18next';
18-
19-
import { ReactComponent as GridSvg } from '@/assets/grid.svg';
20-
import { ReactComponent as BoardSvg } from '@/assets/board.svg';
21-
import { ReactComponent as CalendarSvg } from '@/assets/calendar.svg';
10+
import { ViewTab, ViewTabs } from 'src/components/_shared/tabs/ViewTabs';
2211

2312
export interface DatabaseTabBarProps {
2413
viewIds: string[];
@@ -29,16 +18,8 @@ export interface DatabaseTabBarProps {
2918
hideConditions?: boolean;
3019
}
3120

32-
const DatabaseIcons: {
33-
[key in DatabaseViewLayout]: FunctionComponent<SVGProps<SVGSVGElement> & { title?: string | undefined }>;
34-
} = {
35-
[DatabaseViewLayout.Grid]: GridSvg,
36-
[DatabaseViewLayout.Board]: BoardSvg,
37-
[DatabaseViewLayout.Calendar]: CalendarSvg,
38-
};
39-
4021
export const DatabaseTabs = forwardRef<HTMLDivElement, DatabaseTabBarProps>(
41-
({ viewIds, viewName, iidIndex, selectedViewId, setSelectedViewId }, ref) => {
22+
({ viewIds, iidIndex, selectedViewId, setSelectedViewId }, ref) => {
4223
const { t } = useTranslation();
4324
const views = useDatabase().get(YjsDatabaseKey.views);
4425
const conditionsContext = useConditionsContext();
@@ -53,13 +34,13 @@ export const DatabaseTabs = forwardRef<HTMLDivElement, DatabaseTabBarProps>(
5334
};
5435

5536
useEffect(() => {
56-
void (async () => {
57-
if (loadViewMeta) {
37+
void (async() => {
38+
if(loadViewMeta) {
5839
try {
5940
const meta = await loadViewMeta(iidIndex, setMeta);
6041

6142
setMeta(meta);
62-
} catch (e) {
43+
} catch(e) {
6344
// do nothing
6445
}
6546
}
@@ -77,7 +58,7 @@ export const DatabaseTabs = forwardRef<HTMLDivElement, DatabaseTabBarProps>(
7758
const getSelectedTabIndicatorProps = useCallback(() => {
7859
const selectedTab = document.getElementById(`view-tab-${selectedViewId}`);
7960

80-
if (!selectedTab) return;
61+
if(!selectedTab) return;
8162

8263
return {
8364
style: {
@@ -91,7 +72,8 @@ export const DatabaseTabs = forwardRef<HTMLDivElement, DatabaseTabBarProps>(
9172
return selectedViewId ? Number(views?.get(selectedViewId)?.get(YjsDatabaseKey.layout)) as DatabaseViewLayout : DatabaseViewLayout.Grid;
9273
}, [selectedViewId, views]);
9374

94-
if (viewIds.length === 0) return null;
75+
console.log('====', viewIds, meta?.children);
76+
if(viewIds.length === 0) return null;
9577
return (
9678
<div
9779
ref={ref}
@@ -124,17 +106,24 @@ export const DatabaseTabs = forwardRef<HTMLDivElement, DatabaseTabBarProps>(
124106
{viewIds.map((viewId) => {
125107
const view = views?.get(viewId) as YDatabaseView | null;
126108

127-
if (!view) return null;
128-
const layout = Number(view.get(YjsDatabaseKey.layout)) as DatabaseViewLayout;
129-
const Icon = DatabaseIcons[layout];
130-
const name = viewId === iidIndex ? viewName : meta?.children?.find((v) => v.view_id === viewId)?.name;
109+
if(!view) return null;
110+
const databaseLayout = Number(view.get(YjsDatabaseKey.layout)) as DatabaseViewLayout;
111+
const folderView = viewId === iidIndex ? meta : meta?.children?.find((v) => v.view_id === viewId);
112+
113+
const name = folderView?.name || view.get(YjsDatabaseKey.name) || t('untitled');
131114

132115
return (
133116
<ViewTab
134117
key={viewId}
135118
id={`view-tab-${viewId}`}
136119
data-testid={`view-tab-${viewId}`}
137-
icon={<Icon className={'h-4 w-4'} />}
120+
icon={<PageIcon
121+
iconSize={16}
122+
view={folderView || {
123+
layout: databaseLayout === DatabaseViewLayout.Board ? ViewLayout.Board : databaseLayout === DatabaseViewLayout.Calendar ? ViewLayout.Calendar : ViewLayout.Grid,
124+
}}
125+
className={'h-4 w-4'}
126+
/>}
138127
iconPosition="start"
139128
color="inherit"
140129
label={

0 commit comments

Comments
 (0)