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
c7cf35c7
Commit
c7cf35c7
authored
Oct 01, 2022
by
steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: update memo resource component
parent
e5c9d860
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
55 additions
and
18 deletions
+55
-18
DailyMemo.tsx
web/src/components/DailyMemo.tsx
+5
-1
MemoEditor.tsx
web/src/components/MemoEditor.tsx
+2
-6
MemoResources.tsx
web/src/components/MemoResources.tsx
+23
-8
daily-memo.less
web/src/less/daily-memo.less
+6
-2
memo-resources.less
web/src/less/memo-resources.less
+16
-0
memo.d.ts
web/src/types/modules/memo.d.ts
+3
-1
No files found.
web/src/components/DailyMemo.tsx
View file @
c7cf35c7
import
*
as
utils
from
"../helpers/utils"
;
import
*
as
utils
from
"../helpers/utils"
;
import
MemoContent
,
{
DisplayConfig
}
from
"./MemoContent"
;
import
MemoContent
,
{
DisplayConfig
}
from
"./MemoContent"
;
import
MemoResources
from
"./MemoResources"
;
import
"../less/daily-memo.less"
;
import
"../less/daily-memo.less"
;
interface
DailyMemo
extends
Memo
{
interface
DailyMemo
extends
Memo
{
...
@@ -28,7 +29,10 @@ const DailyMemo: React.FC<Props> = (props: Props) => {
...
@@ -28,7 +29,10 @@ const DailyMemo: React.FC<Props> = (props: Props) => {
<
div
className=
"time-wrapper"
>
<
div
className=
"time-wrapper"
>
<
span
className=
"normal-text"
>
{
memo
.
timeStr
}
</
span
>
<
span
className=
"normal-text"
>
{
memo
.
timeStr
}
</
span
>
</
div
>
</
div
>
<
div
className=
"memo-container"
>
<
MemoContent
content=
{
memo
.
content
}
displayConfig=
{
displayConfig
}
/>
<
MemoContent
content=
{
memo
.
content
}
displayConfig=
{
displayConfig
}
/>
<
MemoResources
memo=
{
memo
}
/>
</
div
>
<
div
className=
"split-line"
></
div
>
<
div
className=
"split-line"
></
div
>
</
div
>
</
div
>
);
);
...
...
web/src/components/MemoEditor.tsx
View file @
c7cf35c7
...
@@ -126,7 +126,7 @@ const MemoEditor: React.FC = () => {
...
@@ -126,7 +126,7 @@ const MemoEditor: React.FC = () => {
if
(
editMemoId
&&
editMemoId
!==
UNKNOWN_ID
)
{
if
(
editMemoId
&&
editMemoId
!==
UNKNOWN_ID
)
{
const
prevMemo
=
memoService
.
getMemoById
(
editMemoId
??
UNKNOWN_ID
);
const
prevMemo
=
memoService
.
getMemoById
(
editMemoId
??
UNKNOWN_ID
);
if
(
prevMemo
&&
prevMemo
.
content
!==
content
)
{
if
(
prevMemo
)
{
await
memoService
.
patchMemo
({
await
memoService
.
patchMemo
({
id
:
prevMemo
.
id
,
id
:
prevMemo
.
id
,
content
,
content
,
...
@@ -347,11 +347,7 @@ const MemoEditor: React.FC = () => {
...
@@ -347,11 +347,7 @@ const MemoEditor: React.FC = () => {
{
state
.
resourceList
.
map
((
resource
)
=>
{
{
state
.
resourceList
.
map
((
resource
)
=>
{
return
(
return
(
<
div
key=
{
resource
.
id
}
className=
"resource-container"
>
<
div
key=
{
resource
.
id
}
className=
"resource-container"
>
{
resource
.
type
.
includes
(
"image"
)
?
(
{
resource
.
type
.
includes
(
"image"
)
?
<
Icon
.
Image
className=
"icon-img"
/>
:
<
Icon
.
FileText
className=
"icon-img"
/>
}
<
Icon
.
Image
className=
"icon-img"
onClick=
{
handleUploadFileBtnClick
}
/>
)
:
(
<
Icon
.
FileText
className=
"icon-img"
onClick=
{
handleUploadFileBtnClick
}
/>
)
}
<
span
className=
"name-text"
>
{
resource
.
filename
}
</
span
>
<
span
className=
"name-text"
>
{
resource
.
filename
}
</
span
>
<
Icon
.
X
className=
"close-icon"
onClick=
{
()
=>
handleDeleteResource
(
resource
.
id
)
}
/>
<
Icon
.
X
className=
"close-icon"
onClick=
{
()
=>
handleDeleteResource
(
resource
.
id
)
}
/>
</
div
>
</
div
>
...
...
web/src/components/MemoResources.tsx
View file @
c7cf35c7
import
{
IMAGE_URL_REG
}
from
"../helpers/marked"
;
import
Image
from
"./Image"
;
import
Image
from
"./Image"
;
import
Icon
from
"./Icon"
;
import
"../less/memo-resources.less"
;
import
"../less/memo-resources.less"
;
interface
Props
{
interface
Props
{
className
?:
string
;
memo
:
Memo
;
memo
:
Memo
;
}
}
const
MemoResources
:
React
.
FC
<
Props
>
=
(
props
:
Props
)
=>
{
const
MemoResources
:
React
.
FC
<
Props
>
=
(
props
:
Props
)
=>
{
const
{
className
,
memo
}
=
props
;
const
{
memo
}
=
props
;
const
imageUrls
=
Array
.
from
(
memo
.
content
.
match
(
IMAGE_URL_REG
)
??
[]).
map
((
s
)
=>
s
.
replace
(
IMAGE_URL_REG
,
"$1"
));
const
imageList
=
memo
.
resourceList
.
filter
((
resource
)
=>
resource
.
type
.
includes
(
"image"
));
const
otherResourceList
=
memo
.
resourceList
.
filter
((
resource
)
=>
!
resource
.
type
.
includes
(
"image"
));
const
handlPreviewBtnClick
=
(
resource
:
Resource
)
=>
{
const
resourceUrl
=
`
${
window
.
location
.
origin
}
/o/r/
${
resource
.
id
}
/
${
resource
.
filename
}
`
;
window
.
open
(
resourceUrl
);
};
return
(
return
(
<
div
className=
"resource-wrapper"
>
<
div
className=
"resource-wrapper"
>
{
image
Urls
.
length
>
0
&&
(
{
image
List
.
length
>
0
&&
(
<
div
className=
{
`images-wrapper ${className ?? ""}`
}
>
<
div
className=
"images-wrapper"
>
{
image
Urls
.
map
((
imgUrl
,
idx
)
=>
(
{
image
List
.
map
((
resource
)
=>
(
<
Image
className=
"memo-img"
key=
{
idx
}
imgUrl=
{
imgUrl
}
/>
<
Image
className=
"memo-img"
key=
{
resource
.
id
}
imgUrl=
{
`/o/r/${resource.id}/${resource.filename}`
}
/>
))
}
))
}
</
div
>
</
div
>
)
}
)
}
<
div
className=
"other-resource-wrapper"
>
{
otherResourceList
.
map
((
resource
)
=>
{
return
(
<
div
className=
"other-resource-container"
key=
{
resource
.
id
}
onClick=
{
()
=>
handlPreviewBtnClick
(
resource
)
}
>
<
Icon
.
FileText
className=
"icon-img"
/>
<
span
className=
"name-text"
>
{
resource
.
filename
}
</
span
>
</
div
>
);
})
}
</
div
>
</
div
>
</
div
>
);
);
};
};
...
...
web/src/less/daily-memo.less
View file @
c7cf35c7
...
@@ -17,7 +17,11 @@
...
@@ -17,7 +17,11 @@
@apply mt-px mr-4 w-12 h-7 shrink-0 text-xs leading-6 text-center font-mono rounded-lg bg-gray-100 border-2 border-white text-gray-600 z-10;
@apply mt-px mr-4 w-12 h-7 shrink-0 text-xs leading-6 text-center font-mono rounded-lg bg-gray-100 border-2 border-white text-gray-600 z-10;
}
}
> .memo-container {
@apply w-full overflow-x-hidden flex flex-col justify-start items-start;
> .memo-content-container {
> .memo-content-container {
@apply flex flex-col justify-start items-start w-full overflow-x-hidden p-0 text-base;
@apply flex flex-col justify-start items-start w-full overflow-x-hidden p-0 text-base;
}
}
}
}
}
web/src/less/memo-resources.less
View file @
c7cf35c7
...
@@ -16,4 +16,20 @@
...
@@ -16,4 +16,20 @@
}
}
}
}
}
}
> .other-resource-wrapper {
@apply w-full flex flex-row justify-start flex-wrap;
> .other-resource-container {
@apply mt-1 mr-1 max-w-full flex flex-row justify-start items-center flex-nowrap bg-gray-50 px-2 py-1 rounded cursor-pointer hover:bg-gray-100;
> .icon-img {
@apply w-4 h-auto mr-1 text-gray-500;
}
> .name-text {
@apply text-gray-500 text-sm max-w-xs truncate font-mono;
}
}
}
}
}
web/src/types/modules/memo.d.ts
View file @
c7cf35c7
...
@@ -6,7 +6,6 @@ interface Memo {
...
@@ -6,7 +6,6 @@ interface Memo {
id
:
MemoId
;
id
:
MemoId
;
creatorId
:
UserId
;
creatorId
:
UserId
;
creator
:
User
;
createdTs
:
TimeStamp
;
createdTs
:
TimeStamp
;
updatedTs
:
TimeStamp
;
updatedTs
:
TimeStamp
;
rowStatus
:
RowStatus
;
rowStatus
:
RowStatus
;
...
@@ -14,6 +13,9 @@ interface Memo {
...
@@ -14,6 +13,9 @@ interface Memo {
content
:
string
;
content
:
string
;
visibility
:
Visibility
;
visibility
:
Visibility
;
pinned
:
boolean
;
pinned
:
boolean
;
creator
:
User
;
resourceList
:
Resource
[];
}
}
interface
MemoCreate
{
interface
MemoCreate
{
...
...
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