Initial commit: WordPress wp-content (themes, plugins, languages)

- Theme: momentry (custom theme with REST API routes)
- Plugins: code-snippets (contains all API proxies)
- Languages: zh_TW translations
- Excludes: cache, backups, uploads, logs
This commit is contained in:
OpenCode
2026-05-29 19:07:56 +08:00
commit 09ef1f000f
6521 changed files with 867163 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
export { useImporterSelection } from './useImporterSelection'
export { useSnippetImport } from './useSnippetImport'
export { useImportSnippetSelection } from './useImportSnippetSelection'

View File

@@ -0,0 +1,45 @@
import { useState } from 'react'
import type { ImportableSnippet } from '../../../../hooks/useImportersAPI'
export const useImportSnippetSelection = (availableSnippets: ImportableSnippet[]) => {
const [selectedSnippets, setSelectedSnippets] = useState<Set<number>>(new Set())
const handleSnippetToggle = (snippetId: number) => {
const newSelected = new Set(selectedSnippets)
if (newSelected.has(snippetId)) {
newSelected.delete(snippetId)
} else {
newSelected.add(snippetId)
}
setSelectedSnippets(newSelected)
}
const handleSelectAll = () => {
if (selectedSnippets.size === availableSnippets.length) {
setSelectedSnippets(new Set())
} else {
setSelectedSnippets(new Set(availableSnippets.map(snippet => snippet.table_data.id)))
}
}
const clearSelection = () => {
setSelectedSnippets(new Set())
}
const getSelectedSnippets = () => {
return availableSnippets.filter(snippet =>
selectedSnippets.has(snippet.table_data.id)
)
}
const isAllSelected = selectedSnippets.size === availableSnippets.length && availableSnippets.length > 0
return {
selectedSnippets,
handleSnippetToggle,
handleSelectAll,
clearSelection,
getSelectedSnippets,
isAllSelected
}
}

View File

@@ -0,0 +1,42 @@
import { useState, useEffect } from 'react'
import { useImportersAPI, type Importer } from '../../../../hooks/useImportersAPI'
export const useImporterSelection = () => {
const [importers, setImporters] = useState<Importer[]>([])
const [selectedImporter, setSelectedImporter] = useState<string>('')
const [isLoading, setIsLoading] = useState(true)
const [error, setError] = useState<string | null>(null)
const [tagValue, setTagValue] = useState<string>('')
const importersAPI = useImportersAPI()
useEffect(() => {
const fetchImporters = async () => {
try {
const response = await importersAPI.fetchAll()
setImporters(response.data)
} catch (err) {
setError(err instanceof Error ? err.message : 'Unknown error')
} finally {
setIsLoading(false)
}
}
fetchImporters()
}, [importersAPI])
const handleImporterChange = (newImporter: string) => {
setSelectedImporter(newImporter)
setTagValue(`imported-${newImporter}`)
}
return {
importers,
selectedImporter,
isLoading,
error,
tagValue,
setTagValue,
handleImporterChange
}
}

View File

@@ -0,0 +1,107 @@
import { useState } from 'react'
import { __ } from '@wordpress/i18n'
import { useImportersAPI, type ImportableSnippet } from '../../../../hooks/useImportersAPI'
import { isNetworkAdmin } from '../../../../utils/screen'
export const useSnippetImport = () => {
const [snippets, setSnippets] = useState<ImportableSnippet[]>([])
const [isLoadingSnippets, setIsLoadingSnippets] = useState(false)
const [snippetsError, setSnippetsError] = useState<string | null>(null)
const [isImporting, setIsImporting] = useState(false)
const [importError, setImportError] = useState<string | null>(null)
const [importSuccess, setImportSuccess] = useState<number[]>([])
const importersAPI = useImportersAPI()
const loadSnippets = async (importerName: string): Promise<boolean> => {
if (!importerName) {
alert(__('Please select an importer.', 'code-snippets'))
return false
}
setIsLoadingSnippets(true)
setSnippetsError(null)
setSnippets([])
clearResults()
try {
const response = await importersAPI.fetchSnippets(importerName)
setSnippets(response.data)
return true
} catch (err) {
setSnippetsError(err instanceof Error ? err.message : 'Unknown error')
return false
} finally {
setIsLoadingSnippets(false)
}
}
const importSnippets = async (
importerName: string,
selectedSnippetIds: number[],
autoAddTags: boolean,
tagValue: string
): Promise<boolean> => {
if (selectedSnippetIds.length === 0) {
alert(__('Please select snippets to import.', 'code-snippets'))
return false
}
if (!importerName) {
alert(__('Please select an importer.', 'code-snippets'))
return false
}
setIsImporting(true)
setImportError(null)
setImportSuccess([])
try {
const response = await importersAPI.importSnippets(importerName, {
ids: selectedSnippetIds,
network: isNetworkAdmin(),
auto_add_tags: autoAddTags,
tag_value: autoAddTags ? tagValue : undefined
})
setImportSuccess(response.data.imported)
if (response.data.imported.length > 0) {
setSnippets([])
return true
} else {
alert(__('No snippets were imported.', 'code-snippets'))
return false
}
} catch (err) {
setImportError(err instanceof Error ? err.message : 'Unknown error')
return false
} finally {
setIsImporting(false)
}
}
const clearResults = () => {
setImportSuccess([])
setImportError(null)
}
const resetAll = () => {
setSnippets([])
clearResults()
setSnippetsError(null)
}
return {
snippets,
isLoadingSnippets,
snippetsError,
isImporting,
importError,
importSuccess,
loadSnippets,
importSnippets,
clearResults,
resetAll
}
}