Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
lib
react-ag-qeditor
Commits
a53a9695
Commit
a53a9695
authored
May 19, 2026
by
Яков
Browse files
выбор загруженных
parent
95adc509
Changes
3
Show whitespace changes
Inline
Side-by-side
package.json
View file @
a53a9695
{
{
"name"
:
"react-ag-qeditor"
,
"name"
:
"react-ag-qeditor"
,
"version"
:
"1.1.4
4
"
,
"version"
:
"1.1.4
5
"
,
"description"
:
"WYSIWYG html editor"
,
"description"
:
"WYSIWYG html editor"
,
"author"
:
"atma"
,
"author"
:
"atma"
,
"license"
:
"
MIT
"
,
"license"
:
"
MIT
"
,
...
...
src/QEditor.jsx
View file @
a53a9695
...
@@ -139,6 +139,9 @@ const QEditor = ({
...
@@ -139,6 +139,9 @@ const QEditor = ({
const
[
buttonLinkData
,
setButtonLinkData
]
=
useState
(
defaultButtonLinkData
)
const
[
buttonLinkData
,
setButtonLinkData
]
=
useState
(
defaultButtonLinkData
)
const
[
suggestedFiles
,
setSuggestedFiles
]
=
useState
([])
const
[
suggestedFiles
,
setSuggestedFiles
]
=
useState
([])
const
[
suggestedLoading
,
setSuggestedLoading
]
=
useState
(
false
)
const
[
suggestedLoading
,
setSuggestedLoading
]
=
useState
(
false
)
const
[
suggestPage
,
setSuggestPage
]
=
useState
(
1
)
const
[
suggestTotal
,
setSuggestTotal
]
=
useState
(
0
)
const
SUGGEST_LIMIT
=
20
let
formRef
=
useRef
(
null
);
let
formRef
=
useRef
(
null
);
// eslint-disable-next-line no-unused-vars
// eslint-disable-next-line no-unused-vars
...
@@ -187,23 +190,37 @@ const QEditor = ({
...
@@ -187,23 +190,37 @@ const QEditor = ({
file
:
'
file
'
file
:
'
file
'
}
}
useEffect
(()
=>
{
setSuggestPage
(
1
)
setSuggestTotal
(
0
)
setSuggestedFiles
([])
},
[
innerModalType
])
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
!
modalIsOpen
||
!
uploadOptions
.
suggestUrl
||
!
SUGGEST_TYPES
.
includes
(
innerModalType
))
{
if
(
!
modalIsOpen
||
!
uploadOptions
.
suggestUrl
||
!
SUGGEST_TYPES
.
includes
(
innerModalType
))
{
setSuggestedFiles
([])
setSuggestedFiles
([])
setSuggestTotal
(
0
)
return
return
}
}
let
cancelled
=
false
let
cancelled
=
false
setSuggestedLoading
(
true
)
setSuggestedLoading
(
true
)
axios
.
get
(
uploadOptions
.
suggestUrl
,
{
params
:
{
type
:
SUGGEST_TYPE_MAP
[
innerModalType
]
}
})
axios
.
get
(
uploadOptions
.
suggestUrl
,
{
params
:
{
type
:
SUGGEST_TYPE_MAP
[
innerModalType
],
page
:
suggestPage
,
limit
:
SUGGEST_LIMIT
}
})
.
then
(
response
=>
{
.
then
(
response
=>
{
if
(
!
cancelled
&&
response
.
data
.
state
===
'
success
'
&&
Array
.
isArray
(
response
.
data
.
files
))
{
if
(
!
cancelled
&&
response
.
data
.
state
===
'
success
'
&&
Array
.
isArray
(
response
.
data
.
files
))
{
setSuggestedFiles
(
response
.
data
.
files
)
setSuggestedFiles
(
response
.
data
.
files
)
setSuggestTotal
(
response
.
data
.
total
||
response
.
data
.
files
.
length
)
}
}
})
})
.
catch
(()
=>
{})
.
catch
(()
=>
{})
.
finally
(()
=>
{
if
(
!
cancelled
)
setSuggestedLoading
(
false
)
})
.
finally
(()
=>
{
if
(
!
cancelled
)
setSuggestedLoading
(
false
)
})
return
()
=>
{
cancelled
=
true
}
return
()
=>
{
cancelled
=
true
}
},
[
modalIsOpen
,
innerModalType
])
},
[
modalIsOpen
,
innerModalType
,
suggestPage
])
const
editWord
=
(
values
)
=>
{
const
editWord
=
(
values
)
=>
{
...
@@ -839,12 +856,13 @@ const QEditor = ({
...
@@ -839,12 +856,13 @@ const QEditor = ({
if
(
suggestedLoading
)
{
if
(
suggestedLoading
)
{
return
<
div
className
=
'atma-editor-suggest-loading'
>
Загрузка файлов...
</
div
>
return
<
div
className
=
'atma-editor-suggest-loading'
>
Загрузка файлов...
</
div
>
}
}
if
(
suggestedFiles
.
length
===
0
)
{
if
(
!
suggestedLoading
&&
suggestedFiles
.
length
===
0
)
{
return
null
return
null
}
}
const
isVideo
=
innerModalType
===
'
video
'
const
isVideo
=
innerModalType
===
'
video
'
const
isAudio
=
innerModalType
===
'
audio
'
const
isAudio
=
innerModalType
===
'
audio
'
const
isFile
=
innerModalType
===
'
file
'
const
isFile
=
innerModalType
===
'
file
'
const
totalPages
=
Math
.
ceil
(
suggestTotal
/
SUGGEST_LIMIT
)
return
(
return
(
<
div
className
=
'atma-editor-suggest'
>
<
div
className
=
'atma-editor-suggest'
>
<
div
className
=
'atma-editor-suggest-title'
>
Ранее загруженные файлы
</
div
>
<
div
className
=
'atma-editor-suggest-title'
>
Ранее загруженные файлы
</
div
>
...
@@ -885,6 +903,25 @@ const QEditor = ({
...
@@ -885,6 +903,25 @@ const QEditor = ({
)
)
})
}
})
}
</
div
>
</
div
>
{
totalPages
>
1
&&
(
<
div
className
=
'atma-editor-suggest-pagination'
>
<
button
type
=
'button'
className
=
'atma-editor-suggest-page-btn'
disabled
=
{
suggestPage
<=
1
}
onClick
=
{
()
=>
setSuggestPage
(
p
=>
p
-
1
)
}
>
←
</
button
>
<
span
className
=
'atma-editor-suggest-page-info'
>
{
suggestPage
}
/
{
totalPages
}
</
span
>
<
button
type
=
'button'
className
=
'atma-editor-suggest-page-btn'
disabled
=
{
suggestPage
>=
totalPages
}
onClick
=
{
()
=>
setSuggestPage
(
p
=>
p
+
1
)
}
>
→
</
button
>
</
div
>
)
}
</
div
>
</
div
>
)
)
}
}
...
@@ -918,8 +955,8 @@ const QEditor = ({
...
@@ -918,8 +955,8 @@ const QEditor = ({
case
'
audio
'
:
case
'
audio
'
:
return
(
return
(
<
Fragment
>
<
Fragment
>
{
getSuggestionsSection
()
}
{
getUploader
({
accept
:
'
.wav, .mp3, .ogg
'
})
}
{
getUploader
({
accept
:
'
.wav, .mp3, .ogg
'
})
}
{
getSuggestionsSection
()
}
</
Fragment
>
</
Fragment
>
)
)
case
'
iframe_pdf
'
:
case
'
iframe_pdf
'
:
...
@@ -943,29 +980,29 @@ const QEditor = ({
...
@@ -943,29 +980,29 @@ const QEditor = ({
case
'
video
'
:
case
'
video
'
:
return
(
return
(
<
Fragment
>
<
Fragment
>
{
getSuggestionsSection
()
}
{
getUploader
({
accept
:
'
video/mp4,.mp4
'
})
}
{
getUploader
({
accept
:
'
video/mp4,.mp4
'
})
}
{
getSuggestionsSection
()
}
</
Fragment
>
</
Fragment
>
)
)
case
'
image
'
:
case
'
image
'
:
return
(
return
(
<
Fragment
>
<
Fragment
>
{
getSuggestionsSection
()
}
{
getUploader
({
accept
:
'
image/*
'
})
}
{
getUploader
({
accept
:
'
image/*
'
})
}
{
getSuggestionsSection
()
}
</
Fragment
>
</
Fragment
>
)
)
case
'
interactiveImage
'
:
case
'
interactiveImage
'
:
return
(
return
(
<
Fragment
>
<
Fragment
>
{
getSuggestionsSection
()
}
{
getUploader
({
accept
:
'
image/*
'
,
multiple
:
false
})
}
{
getUploader
({
accept
:
'
image/*
'
,
multiple
:
false
})
}
{
getSuggestionsSection
()
}
</
Fragment
>
</
Fragment
>
)
)
case
'
file
'
:
case
'
file
'
:
return
(
return
(
<
Fragment
>
<
Fragment
>
{
getSuggestionsSection
()
}
{
getUploader
({
accept
:
'
*
'
,
afterParams
:
[
'
no_convert=1
'
]})
}
{
getUploader
({
accept
:
'
*
'
,
afterParams
:
[
'
no_convert=1
'
]})
}
{
getSuggestionsSection
()
}
</
Fragment
>
</
Fragment
>
)
)
case
'
buttonLink
'
:
case
'
buttonLink
'
:
...
...
src/index.scss
View file @
a53a9695
...
@@ -861,16 +861,16 @@ body{
...
@@ -861,16 +861,16 @@ body{
background-position: center;
background-position: center;
background-repeat: no-repeat;
background-repeat: no-repeat;
cursor: pointer;
cursor: pointer;
bo
rder: 2px solid
transparent;
bo
x-shadow: 0 0 0 2px
transparent;
transition: bo
rder-color 0.15s
;
transition: bo
x-shadow 0.2s ease
;
overflow: hidden;
overflow: hidden;
&:hover{
&:hover{
bo
rder-color:
#adb0b6;
bo
x-shadow: 0 0 0 2px
#adb0b6;
}
}
&.selected{
&.selected{
bo
rder-color:
#1790FF;
bo
x-shadow: 0 0 0 2px
#1790FF;
&::after{
&::after{
content: '';
content: '';
...
@@ -920,6 +920,47 @@ body{
...
@@ -920,6 +920,47 @@ body{
display: block;
display: block;
}
}
}
}
&-pagination{
display: flex;
align-items: center;
gap: 8px;
margin-top: 12px;
}
&-page-btn{
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border-radius: 6px;
border: 1px solid #CCD1D9;
background: #fff;
cursor: pointer;
font-size: 14px;
color: #434A53;
transition: background 0.15s, border-color 0.15s;
padding: 0;
line-height: 1;
&:hover:not(:disabled){
background: #F5F7FA;
border-color: #adb0b6;
}
&:disabled{
opacity: 0.35;
cursor: default;
}
}
&-page-info{
font-size: 13px;
color: #656D77;
min-width: 44px;
text-align: center;
}
}
}
&-btn{
&-btn{
...
...
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