Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
54e6ca37
Commit
54e6ca37
authored
Jul 15, 2025
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: tweak props definition
parent
8df0dea3
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
30 additions
and
28 deletions
+30
-28
AttachmentIcon.tsx
web/src/components/AttachmentIcon.tsx
+1
-1
ChangeMemberPasswordDialog.tsx
web/src/components/ChangeMemberPasswordDialog.tsx
+2
-2
CreateAccessTokenDialog.tsx
web/src/components/CreateAccessTokenDialog.tsx
+2
-2
CreateIdentityProviderDialog.tsx
web/src/components/CreateIdentityProviderDialog.tsx
+2
-2
CreateShortcutDialog.tsx
web/src/components/CreateShortcutDialog.tsx
+2
-2
CreateUserDialog.tsx
web/src/components/CreateUserDialog.tsx
+2
-2
CreateWebhookDialog.tsx
web/src/components/CreateWebhookDialog.tsx
+2
-2
MemoAttachmentListView.tsx
web/src/components/MemoAttachmentListView.tsx
+1
-1
MemoView.tsx
web/src/components/MemoView.tsx
+1
-1
PreviewImageDialog.tsx
web/src/components/PreviewImageDialog.tsx
+4
-2
ReactionSelector.tsx
web/src/components/ReactionSelector.tsx
+5
-5
RenameTagDialog.tsx
web/src/components/RenameTagDialog.tsx
+2
-2
UpdateAccountDialog.tsx
web/src/components/UpdateAccountDialog.tsx
+2
-2
UpdateCustomizedProfileDialog.new.tsx
web/src/components/UpdateCustomizedProfileDialog.new.tsx
+0
-0
UpdateCustomizedProfileDialog.tsx
web/src/components/UpdateCustomizedProfileDialog.tsx
+2
-2
WorkspaceSection.example.tsx
web/src/components/examples/WorkspaceSection.example.tsx
+0
-0
No files found.
web/src/components/AttachmentIcon.tsx
View file @
54e6ca37
...
@@ -13,7 +13,7 @@ import React, { useState } from "react";
...
@@ -13,7 +13,7 @@ import React, { useState } from "react";
import
{
cn
}
from
"@/lib/utils"
;
import
{
cn
}
from
"@/lib/utils"
;
import
{
Attachment
}
from
"@/types/proto/api/v1/attachment_service"
;
import
{
Attachment
}
from
"@/types/proto/api/v1/attachment_service"
;
import
{
getAttachmentType
,
getAttachmentUrl
}
from
"@/utils/attachment"
;
import
{
getAttachmentType
,
getAttachmentUrl
}
from
"@/utils/attachment"
;
import
{
PreviewImageDialog
}
from
"./PreviewImageDialog"
;
import
PreviewImageDialog
from
"./PreviewImageDialog"
;
import
SquareDiv
from
"./kit/SquareDiv"
;
import
SquareDiv
from
"./kit/SquareDiv"
;
interface
Props
{
interface
Props
{
...
...
web/src/components/ChangeMemberPasswordDialog.tsx
View file @
54e6ca37
...
@@ -8,14 +8,14 @@ import { userStore } from "@/store";
...
@@ -8,14 +8,14 @@ import { userStore } from "@/store";
import
{
User
}
from
"@/types/proto/api/v1/user_service"
;
import
{
User
}
from
"@/types/proto/api/v1/user_service"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
interface
ChangeMemberPasswordDialog
Props
{
interface
Props
{
open
:
boolean
;
open
:
boolean
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
user
?:
User
;
user
?:
User
;
onSuccess
?:
()
=>
void
;
onSuccess
?:
()
=>
void
;
}
}
export
function
ChangeMemberPasswordDialog
({
open
,
onOpenChange
,
user
,
onSuccess
}:
ChangeMemberPasswordDialog
Props
)
{
function
ChangeMemberPasswordDialog
({
open
,
onOpenChange
,
user
,
onSuccess
}:
Props
)
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
[
newPassword
,
setNewPassword
]
=
useState
(
""
);
const
[
newPassword
,
setNewPassword
]
=
useState
(
""
);
const
[
newPasswordAgain
,
setNewPasswordAgain
]
=
useState
(
""
);
const
[
newPasswordAgain
,
setNewPasswordAgain
]
=
useState
(
""
);
...
...
web/src/components/CreateAccessTokenDialog.tsx
View file @
54e6ca37
...
@@ -10,7 +10,7 @@ import useCurrentUser from "@/hooks/useCurrentUser";
...
@@ -10,7 +10,7 @@ import useCurrentUser from "@/hooks/useCurrentUser";
import
useLoading
from
"@/hooks/useLoading"
;
import
useLoading
from
"@/hooks/useLoading"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
interface
CreateAccessTokenDialog
Props
{
interface
Props
{
open
:
boolean
;
open
:
boolean
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onSuccess
:
()
=>
void
;
onSuccess
:
()
=>
void
;
...
@@ -21,7 +21,7 @@ interface State {
...
@@ -21,7 +21,7 @@ interface State {
expiration
:
number
;
expiration
:
number
;
}
}
export
function
CreateAccessTokenDialog
({
open
,
onOpenChange
,
onSuccess
}:
CreateAccessTokenDialog
Props
)
{
function
CreateAccessTokenDialog
({
open
,
onOpenChange
,
onSuccess
}:
Props
)
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
currentUser
=
useCurrentUser
();
const
currentUser
=
useCurrentUser
();
const
[
state
,
setState
]
=
useState
({
const
[
state
,
setState
]
=
useState
({
...
...
web/src/components/CreateIdentityProviderDialog.tsx
View file @
54e6ca37
...
@@ -97,14 +97,14 @@ const templateList: IdentityProvider[] = [
...
@@ -97,14 +97,14 @@ const templateList: IdentityProvider[] = [
},
},
];
];
interface
CreateIdentityProviderDialog
Props
{
interface
Props
{
open
:
boolean
;
open
:
boolean
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
identityProvider
?:
IdentityProvider
;
identityProvider
?:
IdentityProvider
;
onSuccess
?:
()
=>
void
;
onSuccess
?:
()
=>
void
;
}
}
export
function
CreateIdentityProviderDialog
({
open
,
onOpenChange
,
identityProvider
,
onSuccess
}:
CreateIdentityProviderDialog
Props
)
{
function
CreateIdentityProviderDialog
({
open
,
onOpenChange
,
identityProvider
,
onSuccess
}:
Props
)
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
identityProviderTypes
=
[...
new
Set
(
templateList
.
map
((
t
)
=>
t
.
type
))];
const
identityProviderTypes
=
[...
new
Set
(
templateList
.
map
((
t
)
=>
t
.
type
))];
const
[
basicInfo
,
setBasicInfo
]
=
useState
({
const
[
basicInfo
,
setBasicInfo
]
=
useState
({
...
...
web/src/components/CreateShortcutDialog.tsx
View file @
54e6ca37
...
@@ -12,14 +12,14 @@ import { userStore } from "@/store";
...
@@ -12,14 +12,14 @@ import { userStore } from "@/store";
import
{
Shortcut
}
from
"@/types/proto/api/v1/shortcut_service"
;
import
{
Shortcut
}
from
"@/types/proto/api/v1/shortcut_service"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
interface
CreateShortcutDialog
Props
{
interface
Props
{
open
:
boolean
;
open
:
boolean
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
shortcut
?:
Shortcut
;
shortcut
?:
Shortcut
;
onSuccess
?:
()
=>
void
;
onSuccess
?:
()
=>
void
;
}
}
export
function
CreateShortcutDialog
({
open
,
onOpenChange
,
shortcut
:
initialShortcut
,
onSuccess
}:
CreateShortcutDialog
Props
)
{
function
CreateShortcutDialog
({
open
,
onOpenChange
,
shortcut
:
initialShortcut
,
onSuccess
}:
Props
)
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
user
=
useCurrentUser
();
const
user
=
useCurrentUser
();
const
[
shortcut
,
setShortcut
]
=
useState
<
Shortcut
>
({
const
[
shortcut
,
setShortcut
]
=
useState
<
Shortcut
>
({
...
...
web/src/components/CreateUserDialog.tsx
View file @
54e6ca37
...
@@ -10,14 +10,14 @@ import useLoading from "@/hooks/useLoading";
...
@@ -10,14 +10,14 @@ import useLoading from "@/hooks/useLoading";
import
{
User
,
User_Role
}
from
"@/types/proto/api/v1/user_service"
;
import
{
User
,
User_Role
}
from
"@/types/proto/api/v1/user_service"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
interface
CreateUserDialog
Props
{
interface
Props
{
open
:
boolean
;
open
:
boolean
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
user
?:
User
;
user
?:
User
;
onSuccess
?:
()
=>
void
;
onSuccess
?:
()
=>
void
;
}
}
export
function
CreateUserDialog
({
open
,
onOpenChange
,
user
:
initialUser
,
onSuccess
}:
CreateUserDialog
Props
)
{
function
CreateUserDialog
({
open
,
onOpenChange
,
user
:
initialUser
,
onSuccess
}:
Props
)
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
[
user
,
setUser
]
=
useState
(
User
.
fromPartial
({
...
initialUser
}));
const
[
user
,
setUser
]
=
useState
(
User
.
fromPartial
({
...
initialUser
}));
const
requestState
=
useLoading
(
false
);
const
requestState
=
useLoading
(
false
);
...
...
web/src/components/CreateWebhookDialog.tsx
View file @
54e6ca37
...
@@ -9,7 +9,7 @@ import useCurrentUser from "@/hooks/useCurrentUser";
...
@@ -9,7 +9,7 @@ import useCurrentUser from "@/hooks/useCurrentUser";
import
useLoading
from
"@/hooks/useLoading"
;
import
useLoading
from
"@/hooks/useLoading"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
interface
CreateWebhookDialog
Props
{
interface
Props
{
open
:
boolean
;
open
:
boolean
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
webhookName
?:
string
;
webhookName
?:
string
;
...
@@ -21,7 +21,7 @@ interface State {
...
@@ -21,7 +21,7 @@ interface State {
url
:
string
;
url
:
string
;
}
}
export
function
CreateWebhookDialog
({
open
,
onOpenChange
,
webhookName
,
onSuccess
}:
CreateWebhookDialog
Props
)
{
function
CreateWebhookDialog
({
open
,
onOpenChange
,
webhookName
,
onSuccess
}:
Props
)
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
currentUser
=
useCurrentUser
();
const
currentUser
=
useCurrentUser
();
const
[
state
,
setState
]
=
useState
<
State
>
({
const
[
state
,
setState
]
=
useState
<
State
>
({
...
...
web/src/components/MemoAttachmentListView.tsx
View file @
54e6ca37
...
@@ -3,7 +3,7 @@ import { cn } from "@/lib/utils";
...
@@ -3,7 +3,7 @@ import { cn } from "@/lib/utils";
import
{
Attachment
}
from
"@/types/proto/api/v1/attachment_service"
;
import
{
Attachment
}
from
"@/types/proto/api/v1/attachment_service"
;
import
{
getAttachmentType
,
getAttachmentUrl
}
from
"@/utils/attachment"
;
import
{
getAttachmentType
,
getAttachmentUrl
}
from
"@/utils/attachment"
;
import
MemoAttachment
from
"./MemoAttachment"
;
import
MemoAttachment
from
"./MemoAttachment"
;
import
{
PreviewImageDialog
}
from
"./PreviewImageDialog"
;
import
PreviewImageDialog
from
"./PreviewImageDialog"
;
const
MemoAttachmentListView
=
({
attachments
=
[]
}:
{
attachments
:
Attachment
[]
})
=>
{
const
MemoAttachmentListView
=
({
attachments
=
[]
}:
{
attachments
:
Attachment
[]
})
=>
{
const
[
previewImage
,
setPreviewImage
]
=
useState
<
{
open
:
boolean
;
urls
:
string
[];
index
:
number
}
>
({
const
[
previewImage
,
setPreviewImage
]
=
useState
<
{
open
:
boolean
;
urls
:
string
[];
index
:
number
}
>
({
...
...
web/src/components/MemoView.tsx
View file @
54e6ca37
...
@@ -20,7 +20,7 @@ import MemoEditor from "./MemoEditor";
...
@@ -20,7 +20,7 @@ import MemoEditor from "./MemoEditor";
import
MemoLocationView
from
"./MemoLocationView"
;
import
MemoLocationView
from
"./MemoLocationView"
;
import
MemoReactionistView
from
"./MemoReactionListView"
;
import
MemoReactionistView
from
"./MemoReactionListView"
;
import
MemoRelationListView
from
"./MemoRelationListView"
;
import
MemoRelationListView
from
"./MemoRelationListView"
;
import
{
PreviewImageDialog
}
from
"./PreviewImageDialog"
;
import
PreviewImageDialog
from
"./PreviewImageDialog"
;
import
ReactionSelector
from
"./ReactionSelector"
;
import
ReactionSelector
from
"./ReactionSelector"
;
import
UserAvatar
from
"./UserAvatar"
;
import
UserAvatar
from
"./UserAvatar"
;
import
VisibilityIcon
from
"./VisibilityIcon"
;
import
VisibilityIcon
from
"./VisibilityIcon"
;
...
...
web/src/components/PreviewImageDialog.tsx
View file @
54e6ca37
...
@@ -3,14 +3,14 @@ import React, { useEffect, useState } from "react";
...
@@ -3,14 +3,14 @@ import React, { useEffect, useState } from "react";
import
{
Button
}
from
"@/components/ui/button"
;
import
{
Button
}
from
"@/components/ui/button"
;
import
{
Dialog
,
DialogContent
}
from
"@/components/ui/dialog"
;
import
{
Dialog
,
DialogContent
}
from
"@/components/ui/dialog"
;
interface
Pr
eviewImageDialogPr
ops
{
interface
Props
{
open
:
boolean
;
open
:
boolean
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
imgUrls
:
string
[];
imgUrls
:
string
[];
initialIndex
?:
number
;
initialIndex
?:
number
;
}
}
export
function
PreviewImageDialog
({
open
,
onOpenChange
,
imgUrls
,
initialIndex
=
0
}:
PreviewImageDialog
Props
)
{
function
PreviewImageDialog
({
open
,
onOpenChange
,
imgUrls
,
initialIndex
=
0
}:
Props
)
{
const
[
currentIndex
,
setCurrentIndex
]
=
useState
(
initialIndex
);
const
[
currentIndex
,
setCurrentIndex
]
=
useState
(
initialIndex
);
// Update current index when initialIndex prop changes
// Update current index when initialIndex prop changes
...
@@ -91,3 +91,5 @@ export function PreviewImageDialog({ open, onOpenChange, imgUrls, initialIndex =
...
@@ -91,3 +91,5 @@ export function PreviewImageDialog({ open, onOpenChange, imgUrls, initialIndex =
</
Dialog
>
</
Dialog
>
);
);
}
}
export
default
PreviewImageDialog
;
web/src/components/ReactionSelector.tsx
View file @
54e6ca37
...
@@ -59,23 +59,23 @@ const ReactionSelector = observer((props: Props) => {
...
@@ -59,23 +59,23 @@ const ReactionSelector = observer((props: Props) => {
<
PopoverTrigger
asChild
>
<
PopoverTrigger
asChild
>
<
span
<
span
className=
{
cn
(
className=
{
cn
(
"h-7 w-7 flex justify-center items-center rounded-full border
hover:bg-accent hover:text-accent-foreground cursor-pointer transition-colors
"
,
"h-7 w-7 flex justify-center items-center rounded-full border
cursor-pointer transition-colors hover:opacity-80
"
,
className
,
className
,
)
}
)
}
>
>
<
SmilePlusIcon
className=
"w-4 h-4 mx-auto text-muted-foreground"
/>
<
SmilePlusIcon
className=
"w-4 h-4 mx-auto text-muted-foreground"
/>
</
span
>
</
span
>
</
PopoverTrigger
>
</
PopoverTrigger
>
<
PopoverContent
align=
"
start"
sideOffset=
{
2
}
>
<
PopoverContent
align=
"
center"
>
<
div
ref=
{
containerRef
}
>
<
div
ref=
{
containerRef
}
>
<
div
className=
"
flex flex-row flex-wrap py-0.5 px-2
h-auto gap-1 max-w-56"
>
<
div
className=
"
grid grid-cols-4 sm:grid-cols-6
h-auto gap-1 max-w-56"
>
{
workspaceMemoRelatedSetting
.
reactions
.
map
((
reactionType
)
=>
{
{
workspaceMemoRelatedSetting
.
reactions
.
map
((
reactionType
)
=>
{
return
(
return
(
<
span
<
span
key=
{
reactionType
}
key=
{
reactionType
}
className=
{
cn
(
className=
{
cn
(
"inline-flex w-auto text-base cursor-pointer rounded px-1 text-muted-foreground hover:
bg-accent hover:text-accent-foreground
transition-colors"
,
"inline-flex w-auto text-base cursor-pointer rounded px-1 text-muted-foreground hover:
opacity-80
transition-colors"
,
hasReacted
(
reactionType
)
&&
"bg-
primary text-prim
ary-foreground"
,
hasReacted
(
reactionType
)
&&
"bg-
secondary text-second
ary-foreground"
,
)
}
)
}
onClick=
{
()
=>
handleReactionClick
(
reactionType
)
}
onClick=
{
()
=>
handleReactionClick
(
reactionType
)
}
>
>
...
...
web/src/components/RenameTagDialog.tsx
View file @
54e6ca37
...
@@ -8,14 +8,14 @@ import { memoServiceClient } from "@/grpcweb";
...
@@ -8,14 +8,14 @@ import { memoServiceClient } from "@/grpcweb";
import
useLoading
from
"@/hooks/useLoading"
;
import
useLoading
from
"@/hooks/useLoading"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
interface
RenameTagDialog
Props
{
interface
Props
{
open
:
boolean
;
open
:
boolean
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
tag
:
string
;
tag
:
string
;
onSuccess
?:
()
=>
void
;
onSuccess
?:
()
=>
void
;
}
}
export
function
RenameTagDialog
({
open
,
onOpenChange
,
tag
,
onSuccess
}:
RenameTagDialog
Props
)
{
function
RenameTagDialog
({
open
,
onOpenChange
,
tag
,
onSuccess
}:
Props
)
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
[
newName
,
setNewName
]
=
useState
(
tag
);
const
[
newName
,
setNewName
]
=
useState
(
tag
);
const
requestState
=
useLoading
(
false
);
const
requestState
=
useLoading
(
false
);
...
...
web/src/components/UpdateAccountDialog.tsx
View file @
54e6ca37
...
@@ -14,7 +14,7 @@ import { User as UserPb } from "@/types/proto/api/v1/user_service";
...
@@ -14,7 +14,7 @@ import { User as UserPb } from "@/types/proto/api/v1/user_service";
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
UserAvatar
from
"./UserAvatar"
;
import
UserAvatar
from
"./UserAvatar"
;
interface
UpdateAccountDialog
Props
{
interface
Props
{
open
:
boolean
;
open
:
boolean
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onSuccess
?:
()
=>
void
;
onSuccess
?:
()
=>
void
;
...
@@ -28,7 +28,7 @@ interface State {
...
@@ -28,7 +28,7 @@ interface State {
description
:
string
;
description
:
string
;
}
}
export
function
UpdateAccountDialog
({
open
,
onOpenChange
,
onSuccess
}:
UpdateAccountDialog
Props
)
{
function
UpdateAccountDialog
({
open
,
onOpenChange
,
onSuccess
}:
Props
)
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
currentUser
=
useCurrentUser
();
const
currentUser
=
useCurrentUser
();
const
[
state
,
setState
]
=
useState
<
State
>
({
const
[
state
,
setState
]
=
useState
<
State
>
({
...
...
web/src/components/UpdateCustomizedProfileDialog.new.tsx
deleted
100644 → 0
View file @
8df0dea3
web/src/components/UpdateCustomizedProfileDialog.tsx
View file @
54e6ca37
...
@@ -13,13 +13,13 @@ import { useTranslate } from "@/utils/i18n";
...
@@ -13,13 +13,13 @@ import { useTranslate } from "@/utils/i18n";
import
AppearanceSelect
from
"./AppearanceSelect"
;
import
AppearanceSelect
from
"./AppearanceSelect"
;
import
LocaleSelect
from
"./LocaleSelect"
;
import
LocaleSelect
from
"./LocaleSelect"
;
interface
UpdateCustomizedProfileDialog
Props
{
interface
Props
{
open
:
boolean
;
open
:
boolean
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onOpenChange
:
(
open
:
boolean
)
=>
void
;
onSuccess
?:
()
=>
void
;
onSuccess
?:
()
=>
void
;
}
}
export
function
UpdateCustomizedProfileDialog
({
open
,
onOpenChange
,
onSuccess
}:
UpdateCustomizedProfileDialog
Props
)
{
function
UpdateCustomizedProfileDialog
({
open
,
onOpenChange
,
onSuccess
}:
Props
)
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
const
[
customProfile
,
setCustomProfile
]
=
useState
<
WorkspaceCustomProfile
>
(
const
[
customProfile
,
setCustomProfile
]
=
useState
<
WorkspaceCustomProfile
>
(
...
...
web/src/components/examples/WorkspaceSection.example.tsx
deleted
100644 → 0
View file @
8df0dea3
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment