* Implement Editor * content oveflow fix for description * Description card fix * make everything fix in report modal * seperate report page with image upload * Bump Omorphia * Update pages/report.vue Co-authored-by: Emma Alexia <emma@modrinth.com> * suggested changes and cleanup * fix button spacing * clean up and replace report implementations * corepack fix * Remove ModalReport * image uploads for conversations * image uploading context for versions and threads * adjust information about thread messages * Update pages/report.vue Co-authored-by: Emma Alexia <emma@modrinth.com> * Adjust image upload imports * fix api changes for useImageUpload * correct report redirection uri * report button feedback * omorphia ver bump --------- Co-authored-by: Emma Alexia <emma@modrinth.com>
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
type ImageUploadContext = {
|
|
projectID?: string
|
|
context: 'project' | 'version' | 'thread_message' | 'report'
|
|
}
|
|
|
|
interface ImageUploadResponse {
|
|
id: string
|
|
url: string
|
|
}
|
|
|
|
export const useImageUpload = async (file: File, ctx: ImageUploadContext) => {
|
|
// Make sure file is of type image/png, image/jpeg, image/gif, or image/webp
|
|
if (
|
|
!file.type.startsWith('image/') ||
|
|
!['png', 'jpeg', 'gif', 'webp'].includes(file.type.split('/')[1])
|
|
) {
|
|
throw new Error('File is not an accepted image type')
|
|
}
|
|
|
|
// Make sure file is less than 1MB
|
|
if (file.size > 1024 * 1024) {
|
|
throw new Error('File is too large')
|
|
}
|
|
|
|
const qs = new URLSearchParams()
|
|
if (ctx.projectID) qs.set('project_id', ctx.projectID)
|
|
qs.set('context', ctx.context)
|
|
qs.set('ext', file.type.split('/')[1])
|
|
const url = `image?${qs.toString()}`
|
|
|
|
const response = (await useBaseFetch(url, {
|
|
method: 'POST',
|
|
body: file,
|
|
})) as ImageUploadResponse // TODO: zod or object validation
|
|
|
|
// Type check to see if response has a url property and an id property
|
|
if (!response?.id || typeof response.id !== 'string') {
|
|
throw new Error('Unexpected response from server')
|
|
}
|
|
if (!response?.url || typeof response.url !== 'string') {
|
|
throw new Error('Unexpected response from server')
|
|
}
|
|
|
|
return response
|
|
}
|