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
241c93c6
Unverified
Commit
241c93c6
authored
Nov 12, 2022
by
boojack
Committed by
GitHub
Nov 12, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: update editor style (#454)
* feat: update editor style * chore: update bg
parent
bf07ab9e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
91 additions
and
86 deletions
+91
-86
MemoEditor.tsx
web/src/components/MemoEditor.tsx
+57
-48
editor.less
web/src/less/editor.less
+1
-1
memo-editor.less
web/src/less/memo-editor.less
+33
-37
No files found.
web/src/components/MemoEditor.tsx
View file @
241c93c6
...
...
@@ -35,10 +35,9 @@ interface State {
isUploadingResource
:
boolean
;
resourceList
:
Resource
[];
shouldShowEmojiPicker
:
boolean
;
isEditorFocused
:
boolean
;
}
const
MemoEditor
:
React
.
FC
=
()
=>
{
const
MemoEditor
=
()
=>
{
const
{
t
,
i18n
}
=
useTranslation
();
const
user
=
useAppSelector
((
state
)
=>
state
.
user
.
user
as
User
);
const
setting
=
user
.
setting
;
...
...
@@ -49,7 +48,6 @@ const MemoEditor: React.FC = () => {
fullscreen
:
false
,
shouldShowEmojiPicker
:
false
,
resourceList
:
[],
isEditorFocused
:
false
,
});
const
[
allowSave
,
setAllowSave
]
=
useState
<
boolean
>
(
false
);
const
prevGlobalStateRef
=
useRef
(
editorState
);
...
...
@@ -155,9 +153,11 @@ const MemoEditor: React.FC = () => {
}
}
}
setState
({
...
state
,
resourceList
:
[...
state
.
resourceList
,
...
resourceList
],
setState
((
state
)
=>
{
return
{
...
state
,
resourceList
:
[...
state
.
resourceList
,
...
resourceList
],
};
});
}
};
...
...
@@ -168,18 +168,22 @@ const MemoEditor: React.FC = () => {
const
file
=
event
.
clipboardData
.
files
[
0
];
const
resource
=
await
handleUploadResource
(
file
);
if
(
resource
)
{
setState
({
...
state
,
resourceList
:
[...
state
.
resourceList
,
resource
],
setState
((
state
)
=>
{
return
{
...
state
,
resourceList
:
[...
state
.
resourceList
,
resource
],
};
});
}
}
};
const
handleUploadResource
=
async
(
file
:
File
)
=>
{
setState
({
...
state
,
isUploadingResource
:
true
,
setState
((
state
)
=>
{
return
{
...
state
,
isUploadingResource
:
true
,
};
});
let
resource
=
undefined
;
...
...
@@ -191,9 +195,11 @@ const MemoEditor: React.FC = () => {
toastHelper
.
error
(
error
.
response
.
data
.
message
);
}
setState
({
...
state
,
isUploadingResource
:
false
,
setState
((
state
)
=>
{
return
{
...
state
,
isUploadingResource
:
false
,
};
});
return
resource
;
};
...
...
@@ -232,10 +238,12 @@ const MemoEditor: React.FC = () => {
toastHelper
.
error
(
error
.
response
.
data
.
message
);
}
setState
({
...
state
,
fullscreen
:
false
,
resourceList
:
[],
setState
((
state
)
=>
{
return
{
...
state
,
fullscreen
:
false
,
resourceList
:
[],
};
});
setEditorContentCache
(
""
);
storage
.
remove
([
"editingMemoVisibilityCache"
]);
...
...
@@ -314,9 +322,11 @@ const MemoEditor: React.FC = () => {
}
}
}
setState
({
...
state
,
resourceList
:
[...
state
.
resourceList
,
...
resourceList
],
setState
((
state
)
=>
{
return
{
...
state
,
resourceList
:
[...
state
.
resourceList
,
...
resourceList
],
};
});
document
.
body
.
removeChild
(
inputEl
);
};
...
...
@@ -324,9 +334,11 @@ const MemoEditor: React.FC = () => {
};
const
handleFullscreenBtnClick
=
()
=>
{
setState
({
...
state
,
fullscreen
:
!
state
.
fullscreen
,
setState
((
state
)
=>
{
return
{
...
state
,
fullscreen
:
!
state
.
fullscreen
,
};
});
};
...
...
@@ -354,9 +366,11 @@ const MemoEditor: React.FC = () => {
};
const
handleDeleteResource
=
async
(
resourceId
:
ResourceId
)
=>
{
setState
({
...
state
,
resourceList
:
state
.
resourceList
.
filter
((
resource
)
=>
resource
.
id
!==
resourceId
),
setState
((
state
)
=>
{
return
{
...
state
,
resourceList
:
state
.
resourceList
.
filter
((
resource
)
=>
resource
.
id
!==
resourceId
),
};
});
if
(
editorState
.
editMemoId
)
{
...
...
@@ -372,17 +386,10 @@ const MemoEditor: React.FC = () => {
const
handleEditorFocus
=
()
=>
{
editorRef
.
current
?.
focus
();
setState
({
...
state
,
isEditorFocused
:
true
,
});
};
const
handleEditorBlur
=
()
=>
{
setState
({
...
state
,
isEditorFocused
:
false
,
});
// do nth
};
const
isEditing
=
Boolean
(
editorState
.
editMemoId
&&
editorState
.
editMemoId
!==
UNKNOWN_ID
);
...
...
@@ -409,12 +416,6 @@ const MemoEditor: React.FC = () => {
onBlur=
{
handleEditorBlur
}
>
<
div
className=
"editor-header-container"
>
<
Selector
className=
{
`visibility-selector ${state.isEditorFocused || allowSave ? "" : "!hidden"}`
}
value=
{
editorState
.
memoVisibility
}
dataSource=
{
memoVisibilityOptionSelectorItems
}
handleValueChanged=
{
handleMemoVisibilityOptionChanged
}
/>
<
div
className=
{
`editing-container ${isEditing ? "" : "!hidden"}`
}
>
<
span
className=
"tip-text"
>
{
t
(
"editor.editing"
)
}
</
span
>
<
button
className=
"cancel-btn"
onClick=
{
handleCancelEdit
}
>
...
...
@@ -465,12 +466,6 @@ const MemoEditor: React.FC = () => {
onShouldShowEmojiPickerChange=
{
handleChangeShouldShowEmojiPicker
}
/>
</
div
>
<
div
className=
"btns-container"
>
<
button
className=
"action-btn confirm-btn"
disabled=
{
!
allowSave
||
state
.
isUploadingResource
}
onClick=
{
handleSaveBtnClick
}
>
{
t
(
"editor.save"
)
}
<
img
className=
"icon-img"
src=
"/logo.webp"
/>
</
button
>
</
div
>
</
div
>
{
state
.
resourceList
.
length
>
0
&&
(
<
div
className=
"resource-list-wrapper"
>
...
...
@@ -485,6 +480,20 @@ const MemoEditor: React.FC = () => {
})
}
</
div
>
)
}
<
div
className=
"editor-footer-container"
>
<
Selector
className=
{
`visibility-selector`
}
value=
{
editorState
.
memoVisibility
}
dataSource=
{
memoVisibilityOptionSelectorItems
}
handleValueChanged=
{
handleMemoVisibilityOptionChanged
}
/>
<
div
className=
"buttons-container"
>
<
button
className=
"action-btn confirm-btn"
disabled=
{
!
allowSave
||
state
.
isUploadingResource
}
onClick=
{
handleSaveBtnClick
}
>
{
t
(
"editor.save"
)
}
<
img
className=
"icon-img w-4 h-auto"
src=
"/logo.webp"
/>
</
button
>
</
div
>
</
div
>
</
div
>
);
};
...
...
web/src/less/editor.less
View file @
241c93c6
...
...
@@ -4,7 +4,7 @@
@apply flex flex-col justify-start items-start relative w-full h-auto bg-white;
> .common-editor-inputer {
@apply w-full h-full m
t-2 mb
-1 text-base resize-none overflow-x-hidden overflow-y-auto bg-transparent whitespace-pre-wrap;
@apply w-full h-full m
y
-1 text-base resize-none overflow-x-hidden overflow-y-auto bg-transparent whitespace-pre-wrap;
max-height: 300px;
.pretty-scroll-bar(2px, 0);
...
...
web/src/less/memo-editor.less
View file @
241c93c6
@import "./mixin.less";
.memo-editor-container {
@apply transition-all relative w-full flex flex-col justify-start items-start bg-white p-4 rounded-lg border-2 border-gray-200;
@apply transition-all relative w-full flex flex-col justify-start items-start bg-white p-4
pt-3
rounded-lg border-2 border-gray-200;
&.float {
@media (max-width: 640px) {
...
...
@@ -47,26 +47,14 @@
}
&.edit-ing {
border-color: @text-blue
;
@apply border-blue-500
;
}
> .editor-header-container {
@apply w-full flex flex-row justify-between items-center;
> .visibility-selector {
@apply h-7;
> .current-value-container {
@apply rounded-full;
> .value-text {
@apply text-xs w-full;
}
}
}
@apply w-full flex flex-row justify-between items-center mb-1;
> .editing-container {
@apply
mb-1 flex flex-row justify-start items-center text-xs leading-6
;
@apply
flex flex-row justify-start items-center text-xs
;
> .tip-text {
@apply text-gray-400 mr-2;
...
...
@@ -130,33 +118,13 @@
}
}
}
> .btns-container {
@apply grow-0 shrink-0 flex flex-row justify-end items-center;
> .action-btn {
@apply border-none select-none cursor-pointer py-1 px-3 rounded text-sm hover:opacity-80;
}
> .cancel-btn {
@apply text-gray-500 bg-transparent mr-2;
}
> .confirm-btn {
@apply flex flex-row justify-center items-center shadow cursor-pointer px-3 py-0 leading-8 bg-green-600 text-white text-sm hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-60;
> .icon-img {
@apply ml-1 w-6 h-auto;
}
}
}
}
> .resource-list-wrapper {
@apply w-full flex flex-row justify-start flex-wrap;
> .resource-container {
@apply mt-1 mr-1 flex flex-row justify-start items-center flex-nowrap bg-gray-
50 px-2 py-1 rounded cursor-pointer hover:bg-gray-1
00;
@apply mt-1 mr-1 flex flex-row justify-start items-center flex-nowrap bg-gray-
100 px-2 py-1 rounded cursor-pointer hover:bg-gray-2
00;
> .icon-img {
@apply w-4 h-auto mr-1 text-gray-500;
...
...
@@ -171,4 +139,32 @@
}
}
}
> .editor-footer-container {
@apply w-full flex flex-row justify-between items-center border-t pt-2 mt-2;
> .visibility-selector {
@apply h-7;
> .current-value-container {
@apply rounded-full;
> .value-text {
@apply text-xs w-full;
}
}
}
> .buttons-container {
@apply grow-0 shrink-0 flex flex-row justify-end items-center;
> .confirm-btn {
@apply border-none select-none rounded flex flex-row justify-center items-center shadow cursor-pointer px-3 py-0 leading-8 bg-green-600 text-white text-sm hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-60;
> .icon-img {
@apply ml-1 w-6 h-auto;
}
}
}
}
}
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