Skip to content

Commit a930052

Browse files
committed
add properties panel to projects
- Create ProjectPropertiesModal with EntityType.PROJECT - Add properties button to TopBar (guarded by feature flag) - Exclude special projects (root, trash) from properties panel
1 parent 7e87651 commit a930052

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { SplitDrawer } from '@app/component/split-layout/components/SplitDrawer';
2+
import { useDrawerControl } from '@app/component/split-layout/components/SplitDrawerContext';
3+
import { IconButton } from '@core/component/IconButton';
4+
import { PropertiesView } from '@core/component/Properties/PropertiesView';
5+
import { useCanEdit } from '@core/signal/permissions';
6+
import TagIcon from '@icon/regular/tag.svg';
7+
import { EntityType } from '@service-properties/generated/schemas/entityType';
8+
import { Suspense } from 'solid-js';
9+
10+
const DRAWER_ID = 'properties';
11+
12+
export function ProjectPropertiesModal(props: {
13+
buttonSize?: 'sm' | 'base';
14+
name?: string;
15+
}) {
16+
const drawerControl = useDrawerControl(DRAWER_ID);
17+
const canEdit = useCanEdit();
18+
19+
return (
20+
<>
21+
<IconButton
22+
icon={TagIcon}
23+
theme={drawerControl.isOpen() ? 'accent' : 'clear'}
24+
size={props.buttonSize ?? 'base'}
25+
tooltip={{ label: 'Properties' }}
26+
onClick={drawerControl.toggle}
27+
/>
28+
<SplitDrawer id={DRAWER_ID} side="right" size={550} title="Properties">
29+
<Suspense fallback={<LoadingFallback />}>
30+
<ProjectPropertiesContent canEdit={canEdit()} name={props.name} />
31+
</Suspense>
32+
</SplitDrawer>
33+
</>
34+
);
35+
}
36+
37+
function ProjectPropertiesContent(props: { canEdit: boolean; name?: string }) {
38+
return (
39+
<PropertiesView
40+
blockType={'project'}
41+
canEdit={props.canEdit}
42+
entityType={EntityType.PROJECT}
43+
documentName={props.name}
44+
/>
45+
);
46+
}
47+
48+
function LoadingFallback() {
49+
return (
50+
<div class="flex justify-center items-center py-8">
51+
<div class="animate-spin rounded-full h-6 w-6 border-b-2 border-ink-muted"></div>
52+
</div>
53+
);
54+
}

js/app/packages/block-project/component/TopBar.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ import { getIsSpecialProject } from '@block-project/isSpecial';
1515
import { projectBlockDataSignal } from '@block-project/signal/projectBlockData';
1616
import { useBlockId } from '@core/block';
1717
import { ShareButton } from '@core/component/TopBar/ShareButton';
18-
import { ENABLE_PROJECT_SHARING } from '@core/constant/featureFlags';
18+
import {
19+
ENABLE_PROJECT_SHARING,
20+
ENABLE_PROPERTIES_METADATA,
21+
} from '@core/constant/featureFlags';
1922
import {
2023
useCanEdit,
2124
useGetPermissions,
@@ -25,6 +28,7 @@ import { buildSimpleEntityUrl } from '@core/util/url';
2528
import { toast } from 'core/component/Toast/Toast';
2629
import { createMemo, Show } from 'solid-js';
2730
import { ProjectCreateMenu } from './ProjectCreateMenu';
31+
import { ProjectPropertiesModal } from './ProjectPropertiesModal';
2832

2933
// TODO (SEAMUS) : Revisit this file when we figure out what we wanna do
3034
// with folder block.
@@ -84,6 +88,9 @@ export function TopBar() {
8488
<SplitToolbarRight>
8589
<div class="flex items-center p-1">
8690
<div class="flex items-center">
91+
<Show when={ENABLE_PROPERTIES_METADATA && !isSpecialProject}>
92+
<ProjectPropertiesModal buttonSize="sm" name={name()} />
93+
</Show>
8794
<SplitPermissionsBadge />
8895
<Show when={ENABLE_PROJECT_SHARING && !isSpecialProject}>
8996
<ShareButton

0 commit comments

Comments
 (0)