sakura/src/store/init.ts

71 lines
2.1 KiB
TypeScript

import { useState } from '@/hooks'
import API from '@/api'
import camelcaseKeys from 'camelcase-keys'
import intl from '@/locales'
const messages = {
applicationPasswordsEndpointNotAvailable: intl.formatMessage({
id: 'messages.wordpress.applicationPasswordsEndpointNotAvailable',
defaultMessage:
'ApplicationPasswords is not avaliabe in your WordPress installation, please upgrade WordPress to v5.6.0 above, or enable the ApplicationPasswords feature in v5.6.0 above installation.',
}),
}
export default function auth(): object {
// @ts-ignore
const [initState, setInitState] = useState(window.InitState ?? {})
const [wpJson, setWpJson] = useState({})
const [applicationPasswordsEndpoint, setApplicationPasswordsEndpoint] = useState('')
const fetchInitState = async ({ username, password }: { [key: string]: string }) => {
await new Promise((resolve, reject) => {
API.Sakura.v1
.getInitState()
.then((res) => {
const data = camelcaseKeys(res.data)
setInitState(data)
resolve(null)
})
.catch((error) => {
console.error(error)
reject(null)
})
})
}
const fetchWpJson = async () => {
await new Promise((resolve, reject) => {
API.getWpJson()
.then((res) => {
const data = camelcaseKeys(res.data)
setWpJson(data)
if (camelcaseKeys(data?.authentication)?.applicationPasswords?.endpoints?.authorization) {
setApplicationPasswordsEndpoint(
camelcaseKeys(data.authentication).applicationPasswords.endpoints.authorization
)
} else {
console.warn(messages.applicationPasswordsEndpointNotAvailable)
setApplicationPasswordsEndpoint('')
}
resolve(null)
})
.catch((error) => {
console.log(error)
reject(error)
})
})
}
return {
initState,
setInitState,
fetchInitState,
wpJson,
setWpJson,
fetchWpJson,
applicationPasswordsEndpoint,
setApplicationPasswordsEndpoint,
}
}