Merge pull request #454 from Discours/hotfix/uploader

Hotfix/uploader
This commit is contained in:
Tony 2024-05-06 17:16:57 +03:00 committed by GitHub
commit afd9bba005
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 22 additions and 11 deletions

View File

@ -151,7 +151,7 @@ export const Editor = (props: Props) => {
} }
showSnackbar({ body: t('Uploading image') }) showSnackbar({ body: t('Uploading image') })
const result = await handleImageUpload(uplFile) const result = await handleImageUpload(uplFile, session()?.access_token)
editor() editor()
.chain() .chain()

View File

@ -12,6 +12,7 @@ import { Icon } from '../../_shared/Icon'
import { Loading } from '../../_shared/Loading' import { Loading } from '../../_shared/Loading'
import { InlineForm } from '../InlineForm' import { InlineForm } from '../InlineForm'
import { useSession } from '../../../context/session'
import styles from './UploadModalContent.module.scss' import styles from './UploadModalContent.module.scss'
type Props = { type Props = {
@ -24,12 +25,12 @@ export const UploadModalContent = (props: Props) => {
const [uploadError, setUploadError] = createSignal<string | undefined>() const [uploadError, setUploadError] = createSignal<string | undefined>()
const [dragActive, setDragActive] = createSignal(false) const [dragActive, setDragActive] = createSignal(false)
const [dragError, setDragError] = createSignal<string | undefined>() const [dragError, setDragError] = createSignal<string | undefined>()
const { session } = useSession()
const { selectFiles } = createFileUploader({ multiple: false, accept: 'image/*' }) const { selectFiles } = createFileUploader({ multiple: false, accept: 'image/*' })
const runUpload = async (file: UploadFile) => { const runUpload = async (file: UploadFile) => {
try { try {
setIsUploading(true) setIsUploading(true)
const result = await handleImageUpload(file) const result = await handleImageUpload(file, session()?.access_token)
props.onClose(result) props.onClose(result)
setIsUploading(false) setIsUploading(false)
} catch (error) { } catch (error) {

View File

@ -69,7 +69,9 @@ export const Header = (props: Props) => {
let windowScrollTop = 0 let windowScrollTop = 0
createEffect(() => { createEffect(() => {
setRandomTopics(getRandomTopicsFromArray(topics())) if (topics()?.length) {
setRandomTopics(getRandomTopicsFromArray(topics()))
}
}) })
createEffect(() => { createEffect(() => {

View File

@ -57,7 +57,7 @@ export const ProfileSettings = () => {
const [nameError, setNameError] = createSignal<string>() const [nameError, setNameError] = createSignal<string>()
const { form, submit, updateFormField, setForm } = useProfileForm() const { form, submit, updateFormField, setForm } = useProfileForm()
const { showSnackbar } = useSnackbar() const { showSnackbar } = useSnackbar()
const { loadAuthor } = useSession() const { loadAuthor, session } = useSession()
const { showConfirm } = useConfirm() const { showConfirm } = useConfirm()
createEffect(() => { createEffect(() => {
@ -140,7 +140,7 @@ export const ProfileSettings = () => {
setUploadError(false) setUploadError(false)
setIsUserpicUpdating(true) setIsUserpicUpdating(true)
const result = await handleImageUpload(uploadFile) const result = await handleImageUpload(uploadFile, session()?.access_token)
updateFormField('pic', result.url) updateFormField('pic', result.url)
setUserpicFile(null) setUserpicFile(null)

View File

@ -5,6 +5,7 @@ import { clsx } from 'clsx'
import { JSX, Show, createSignal } from 'solid-js' import { JSX, Show, createSignal } from 'solid-js'
import { useLocalize } from '../../../context/localize' import { useLocalize } from '../../../context/localize'
import { useSession } from '../../../context/session'
import { UploadedFile } from '../../../pages/types' import { UploadedFile } from '../../../pages/types'
import { handleFileUpload } from '../../../utils/handleFileUpload' import { handleFileUpload } from '../../../utils/handleFileUpload'
import { handleImageUpload } from '../../../utils/handleImageUpload' import { handleImageUpload } from '../../../utils/handleImageUpload'
@ -27,6 +28,7 @@ export const DropArea = (props: Props) => {
const [dragActive, setDragActive] = createSignal(false) const [dragActive, setDragActive] = createSignal(false)
const [dropAreaError, setDropAreaError] = createSignal<string>() const [dropAreaError, setDropAreaError] = createSignal<string>()
const [loading, setLoading] = createSignal(false) const [loading, setLoading] = createSignal(false)
const { session } = useSession()
const runUpload = async (files) => { const runUpload = async (files) => {
try { try {
@ -35,7 +37,7 @@ export const DropArea = (props: Props) => {
const results: UploadedFile[] = [] const results: UploadedFile[] = []
for (const file of files) { for (const file of files) {
const handler = props.fileType === 'image' ? handleImageUpload : handleFileUpload const handler = props.fileType === 'image' ? handleImageUpload : handleFileUpload
const result = await handler(file) const result = await handler(file, session()?.access_token)
results.push(result) results.push(result)
} }
props.onUpload(results) props.onUpload(results)

View File

@ -19,6 +19,7 @@ import { Popover } from '../Popover'
import { SwiperRef } from './swiper' import { SwiperRef } from './swiper'
import { useSession } from '../../../context/session'
import styles from './Swiper.module.scss' import styles from './Swiper.module.scss'
const SimplifiedEditor = lazy(() => import('../../Editor/SimplifiedEditor')) const SimplifiedEditor = lazy(() => import('../../Editor/SimplifiedEditor'))
@ -36,7 +37,7 @@ export const EditorSwiper = (props: Props) => {
const [loading, setLoading] = createSignal(false) const [loading, setLoading] = createSignal(false)
const [slideIndex, setSlideIndex] = createSignal(0) const [slideIndex, setSlideIndex] = createSignal(0)
const [slideBody, setSlideBody] = createSignal<string>() const [slideBody, setSlideBody] = createSignal<string>()
const { session } = useSession()
const mainSwipeRef: { current: SwiperRef } = { current: null } const mainSwipeRef: { current: SwiperRef } = { current: null }
const thumbSwipeRef: { current: SwiperRef } = { current: null } const thumbSwipeRef: { current: SwiperRef } = { current: null }
@ -100,7 +101,7 @@ export const EditorSwiper = (props: Props) => {
setLoading(true) setLoading(true)
const results: UploadedFile[] = [] const results: UploadedFile[] = []
for (const file of selectedFiles) { for (const file of selectedFiles) {
const result = await handleImageUpload(file) const result = await handleImageUpload(file, session()?.access_token)
results.push(result) results.push(result)
} }
props.onImagesAdd(composeMediaItems(results)) props.onImagesAdd(composeMediaItems(results))

View File

@ -5,12 +5,15 @@ import { UploadedFile } from '../pages/types'
const apiBaseUrl = 'https://core.discours.io' const apiBaseUrl = 'https://core.discours.io'
const apiUrl = `${apiBaseUrl}/upload` const apiUrl = `${apiBaseUrl}/upload`
export const handleFileUpload = async (uploadFile: UploadFile): Promise<UploadedFile> => { export const handleFileUpload = async (uploadFile: UploadFile, token: string): Promise<UploadedFile> => {
const formData = new FormData() const formData = new FormData()
formData.append('file', uploadFile.file, uploadFile.name) formData.append('file', uploadFile.file, uploadFile.name)
const response = await fetch(apiUrl, { const response = await fetch(apiUrl, {
method: 'POST', method: 'POST',
body: formData, body: formData,
headers: {
Authorization: token,
},
}) })
return response.json() return response.json()
} }

View File

@ -4,12 +4,14 @@ import { UploadedFile } from '../pages/types'
import { thumborUrl } from './config' import { thumborUrl } from './config'
export const handleImageUpload = async (uploadFile: UploadFile): Promise<UploadedFile> => { export const handleImageUpload = async (uploadFile: UploadFile, token: string): Promise<UploadedFile> => {
const formData = new FormData() const formData = new FormData()
formData.append('media', uploadFile.file, uploadFile.name) formData.append('media', uploadFile.file, uploadFile.name)
const headers = token ? { Authorization: token } : {}
const response = await fetch(`${thumborUrl}/image`, { const response = await fetch(`${thumborUrl}/image`, {
method: 'POST', method: 'POST',
body: formData, body: formData,
headers,
}) })
const location = response.headers.get('Location') const location = response.headers.get('Location')