mirror of
https://github.com/modrinth/code.git
synced 2026-08-26 01:26:23 +00:00
* refactor: migrate to common eslint+prettier configs
* fix: prettier frontend
* feat: config changes
* fix: lint issues
* fix: lint
* fix: type imports
* fix: cyclical import issue
* fix: lockfile
* fix: missing dep
* fix: switch to tabs
* fix: continue switch to tabs
* fix: rustfmt parity
* fix: moderation lint issue
* fix: lint issues
* fix: ui intl
* fix: lint issues
* Revert "fix: rustfmt parity"
This reverts commit cb99d2376c.
* feat: revert last rs
39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
import { injectNotificationManager } from '@modrinth/ui'
|
|
|
|
type AsyncFunction<TArgs extends any[], TResult> = (...args: TArgs) => Promise<TResult>
|
|
type ErrorFunction = (err: any) => void | Promise<void>
|
|
type VoidFunction = () => void | Promise<void>
|
|
|
|
type useClientTry = <TArgs extends any[], TResult>(
|
|
fn: AsyncFunction<TArgs, TResult>,
|
|
onFail?: ErrorFunction,
|
|
onFinish?: VoidFunction,
|
|
) => (...args: TArgs) => Promise<TResult | undefined>
|
|
|
|
const defaultOnError: ErrorFunction = (error) => {
|
|
const { addNotification } = injectNotificationManager()
|
|
addNotification({
|
|
title: 'An error occurred',
|
|
text: error?.data?.description || error.message || error || 'Unknown error',
|
|
type: 'error',
|
|
})
|
|
}
|
|
|
|
export const useClientTry: useClientTry =
|
|
(fn, onFail = defaultOnError, onFinish) =>
|
|
async (...args) => {
|
|
startLoading()
|
|
try {
|
|
return await fn(...args)
|
|
} catch (err) {
|
|
if (onFail) {
|
|
await onFail(err)
|
|
} else {
|
|
console.error('[CLIENT TRY ERROR]', err)
|
|
}
|
|
} finally {
|
|
if (onFinish) await onFinish()
|
|
stopLoading()
|
|
}
|
|
}
|