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
7a6eb53e
Unverified
Commit
7a6eb53e
authored
Sep 20, 2022
by
f97
Committed by
GitHub
Sep 20, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: float mobile editor (#234)
* feat: float mobile editor * fix: fix pr comment * lint: fix golangci-lint
parent
02c26d5b
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
68 additions
and
7 deletions
+68
-7
user_setting.go
api/user_setting.go
+25
-3
MemoEditor.tsx
web/src/components/MemoEditor.tsx
+2
-1
PreferencesSection.tsx
web/src/components/Settings/PreferencesSection.tsx
+24
-0
memo-editor.less
web/src/less/memo-editor.less
+9
-0
en.json
web/src/locales/en.json
+2
-1
vi.json
web/src/locales/vi.json
+2
-1
zh.json
web/src/locales/zh.json
+2
-1
userService.ts
web/src/services/userService.ts
+1
-0
setting.d.ts
web/src/types/modules/setting.d.ts
+1
-0
No files found.
api/user_setting.go
View file @
7a6eb53e
...
...
@@ -14,6 +14,8 @@ const (
UserSettingMemoVisibilityKey
UserSettingKey
=
"memoVisibility"
// UserSettingEditorFontStyleKey is the key type for editor font style.
UserSettingEditorFontStyleKey
UserSettingKey
=
"editorFontStyle"
// UserSettingEditorFontStyleKey is the key type for mobile editor style.
UserSettingMobileEditorStyleKey
UserSettingKey
=
"mobileEditorStyle"
)
// String returns the string format of UserSettingKey type.
...
...
@@ -25,14 +27,17 @@ func (key UserSettingKey) String() string {
return
"memoVisibility"
case
UserSettingEditorFontStyleKey
:
return
"editorFontFamily"
case
UserSettingMobileEditorStyleKey
:
return
"mobileEditorStyle"
}
return
""
}
var
(
UserSettingLocaleValue
=
[]
string
{
"en"
,
"zh"
,
"vi"
}
UserSettingMemoVisibilityValue
=
[]
Visibility
{
Privite
,
Protected
,
Public
}
UserSettingEditorFontStyleValue
=
[]
string
{
"normal"
,
"mono"
}
UserSettingLocaleValue
=
[]
string
{
"en"
,
"zh"
,
"vi"
}
UserSettingMemoVisibilityValue
=
[]
Visibility
{
Privite
,
Protected
,
Public
}
UserSettingEditorFontStyleValue
=
[]
string
{
"normal"
,
"mono"
}
UserSettingMobileEditorStyleValue
=
[]
string
{
"normal"
,
"float"
}
)
type
UserSetting
struct
{
...
...
@@ -100,6 +105,23 @@ func (upsert UserSettingUpsert) Validate() error {
if
invalid
{
return
fmt
.
Errorf
(
"invalid user setting editor font style value"
)
}
}
else
if
upsert
.
Key
==
UserSettingMobileEditorStyleKey
{
mobileEditorStyleValue
:=
"normal"
err
:=
json
.
Unmarshal
([]
byte
(
upsert
.
Value
),
&
mobileEditorStyleValue
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to unmarshal user setting mobile editor style"
)
}
invalid
:=
true
for
_
,
value
:=
range
UserSettingMobileEditorStyleValue
{
if
mobileEditorStyleValue
==
value
{
invalid
=
false
break
}
}
if
invalid
{
return
fmt
.
Errorf
(
"invalid user setting mobile editor style value"
)
}
}
else
{
return
fmt
.
Errorf
(
"invalid user setting key"
)
}
...
...
web/src/components/MemoEditor.tsx
View file @
7a6eb53e
...
...
@@ -31,6 +31,7 @@ const MemoEditor = () => {
const
prevGlobalStateRef
=
useRef
(
editorState
);
const
tagSeletorRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
editorFontStyle
=
user
?.
setting
.
editorFontStyle
||
"normal"
;
const
mobileEditorStyle
=
user
?.
setting
.
mobileEditorStyle
||
"normal"
;
useEffect
(()
=>
{
if
(
editorState
.
markMemoId
&&
editorState
.
markMemoId
!==
UNKNOWN_ID
)
{
...
...
@@ -280,7 +281,7 @@ const MemoEditor = () => {
);
return
(
<
div
className=
{
`memo-editor-container ${isEditing ? "edit-ing" : ""} ${state.fullscreen ? "fullscreen" : ""}`
}
>
<
div
className=
{
`memo-editor-container ${
mobileEditorStyle} ${
isEditing ? "edit-ing" : ""} ${state.fullscreen ? "fullscreen" : ""}`
}
>
<
div
className=
{
`tip-container ${isEditing ? "" : "!hidden"}`
}
>
<
span
className=
"tip-text"
>
{
t
(
"editor.editing"
)
}
</
span
>
<
button
className=
"cancel-btn"
onClick=
{
handleCancelEditingBtnClick
}
>
...
...
web/src/components/Settings/PreferencesSection.tsx
View file @
7a6eb53e
...
...
@@ -31,6 +31,17 @@ const editorFontStyleSelectorItems = [
},
];
const
mobileEditorStyleSelectorItems
=
[
{
text
:
"Normal"
,
value
:
"normal"
,
},
{
text
:
"Float"
,
value
:
"float"
,
},
];
const
PreferencesSection
=
()
=>
{
const
{
t
}
=
useTranslation
();
const
{
setting
}
=
useAppSelector
((
state
)
=>
state
.
user
.
user
as
User
);
...
...
@@ -54,6 +65,10 @@ const PreferencesSection = () => {
await
userService
.
upsertUserSetting
(
"editorFontStyle"
,
value
);
};
const
handleMobileEditorStyleChanged
=
async
(
value
:
string
)
=>
{
await
userService
.
upsertUserSetting
(
"mobileEditorStyle"
,
value
);
};
return
(
<
div
className=
"section-container preferences-section-container"
>
<
p
className=
"title-text"
>
{
t
(
"common.basic"
)
}
</
p
>
...
...
@@ -80,6 +95,15 @@ const PreferencesSection = () => {
handleValueChanged=
{
handleEditorFontStyleChanged
}
/>
</
label
>
<
label
className=
"form-label selector"
>
<
span
className=
"normal-text"
>
{
t
(
"setting.preference-section.mobile-editor-style"
)
}
</
span
>
<
Selector
className=
"ml-2 w-32"
value=
{
setting
.
mobileEditorStyle
}
dataSource=
{
mobileEditorStyleSelectorItems
}
handleValueChanged=
{
handleMobileEditorStyleChanged
}
/>
</
label
>
</
div
>
);
};
...
...
web/src/less/memo-editor.less
View file @
7a6eb53e
...
...
@@ -25,6 +25,15 @@
border-color: @text-blue;
}
&.float {
width: calc(100% - 2rem);
@apply fixed bottom-4 sm:relative sm:bottom-0 sm:w-full;
& .emoji-picker-react {
@apply bottom-16 sm:bottom-auto;
}
}
> .tip-container {
@apply mb-1 w-full flex flex-row justify-start items-center text-xs leading-6;
...
...
web/src/locales/en.json
View file @
7a6eb53e
...
...
@@ -109,7 +109,8 @@
},
"preference-section"
:
{
"default-memo-visibility"
:
"Default memo visibility"
,
"editor-font-style"
:
"Editor font style"
"editor-font-style"
:
"Editor font style"
,
"mobile-editor-style"
:
"Mobile editor style"
},
"member-section"
:
{
"create-a-member"
:
"Create a member"
...
...
web/src/locales/vi.json
View file @
7a6eb53e
...
...
@@ -109,7 +109,8 @@
},
"preference-section"
:
{
"default-memo-visibility"
:
"Chế độ memo mặc định"
,
"editor-font-style"
:
"Thay đổi font cho trình soạn thảo"
"editor-font-style"
:
"Thay đổi font cho trình soạn thảo"
,
"mobile-editor-style"
:
"Vị trí editor trên mobile"
},
"member-section"
:
{
"create-a-member"
:
"Tạo thành viên"
...
...
web/src/locales/zh.json
View file @
7a6eb53e
...
...
@@ -109,7 +109,8 @@
},
"preference-section"
:
{
"default-memo-visibility"
:
"默认 Memo 可见性"
,
"editor-font-style"
:
"编辑器字体样式"
"editor-font-style"
:
"编辑器字体样式"
,
"mobile-editor-style"
:
"Mobile editor style"
},
"member-section"
:
{
"create-a-member"
:
"创建成员"
...
...
web/src/services/userService.ts
View file @
7a6eb53e
...
...
@@ -8,6 +8,7 @@ const defauleSetting: Setting = {
locale
:
"en"
,
memoVisibility
:
"PRIVATE"
,
editorFontStyle
:
"normal"
,
mobileEditorStyle
:
"normal"
,
};
export
const
convertResponseModelUser
=
(
user
:
User
):
User
=>
{
...
...
web/src/types/modules/setting.d.ts
View file @
7a6eb53e
...
...
@@ -2,6 +2,7 @@ interface Setting {
locale
:
Locale
;
memoVisibility
:
Visibility
;
editorFontStyle
:
"normal"
|
"mono"
;
mobileEditorStyle
:
"normal"
|
"float"
;
}
interface
UserLocaleSetting
{
...
...
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