PluginProbe
Code Snippets / 3.10.0
Code Snippets v3.10.0
3.10.2 3.10.1 3.10.0 3.10.0-beta.2 3.10.0-beta.1 4.0.0-beta.1 3.9.6 trunk 2.10.0 2.10.1 2.12.0 2.12.1 2.13.0 2.13.1 2.13.2 2.13.3 2.14.0 2.14.1 2.14.2 2.14.3 2.14.4 2.14.5 2.14.6 3.0.0 3.0.1 All 64 releases
code-snippets / js / hooks / useFileUploadAPI.ts

useFileUploadAPI.ts in Code Snippets 3.10.0, at js/hooks/useFileUploadAPI.ts

88 lines 2.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { useMemo } from 'react'
2 import { useAxios } from './useAxios'
3 import type { AxiosResponse, CreateAxiosDefaults } from 'axios'
4
5 export interface FileUploadRequest {
6 files: FileList
7 }
8
9 export interface FileParseResponse {
10 snippets: ImportableSnippet[]
11 total_count: number
12 message: string
13 warnings?: string[]
14 }
15
16 export interface ImportableSnippet {
17 id?: number
18 name: string
19 desc?: string
20 description?: string
21 code: string
22 tags?: string[]
23 scope?: string
24 source_file?: string
25 table_data: {
26 id: number | string
27 title: string
28 scope: string
29 tags: string
30 description: string
31 type: string
32 }
33 }
34
35 export interface SnippetImportRequest {
36 snippets: ImportableSnippet[]
37 duplicate_action: 'ignore' | 'replace' | 'skip'
38 network?: boolean
39 }
40
41 export interface SnippetImportResponse {
42 imported: number
43 imported_ids: number[]
44 message: string
45 }
46
47 const ROUTE_BASE = `${window.CODE_SNIPPETS?.restAPI.base}code-snippets/v1/`
48
49 const AXIOS_CONFIG: CreateAxiosDefaults = {
50 headers: { 'X-WP-Nonce': window.CODE_SNIPPETS?.restAPI.nonce }
51 }
52
53 export interface FileUploadAPI {
54 parseFiles: (request: FileUploadRequest) => Promise<AxiosResponse<FileParseResponse>>
55 importSnippets: (request: SnippetImportRequest) => Promise<AxiosResponse<SnippetImportResponse>>
56 }
57
58 export const useFileUploadAPI = (): FileUploadAPI => {
59 const { axiosInstance } = useAxios(AXIOS_CONFIG)
60
61 return useMemo((): FileUploadAPI => ({
62 parseFiles: (request: FileUploadRequest) => {
63 const formData = new FormData()
64
65 for (let i = 0; i < request.files.length; i++) {
66 formData.append('files[]', request.files[i])
67 }
68
69 return axiosInstance.post<FileParseResponse>(
70 `${ROUTE_BASE}file-upload/parse`,
71 formData,
72 {
73 headers: {
74 'Content-Type': 'multipart/form-data',
75 }
76 }
77 )
78 },
79
80 importSnippets: (request: SnippetImportRequest) => {
81 return axiosInstance.post<SnippetImportResponse>(
82 `${ROUTE_BASE}file-upload/import`,
83 request
84 )
85 }
86 }), [axiosInstance])
87 }
88