* [WIP] Transfer organizations to own branch * push progress * Setup organizations page * Add organizations grid to user profile * Remove debug * Add error handling for failed organization fetch * Refactor organization page and settings * Restructure to composition setup api * checklist completion * Apply suggestions from code review Co-authored-by: Emma Alexia <emma@modrinth.com> * Update pages/[type]/[id]/settings/index.vue Co-authored-by: Emma Alexia <emma@modrinth.com> * Update pages/[type]/[id]/settings/index.vue Co-authored-by: Emma Alexia <emma@modrinth.com> * Update pages/[type]/[id]/settings/index.vue Co-authored-by: Emma Alexia <emma@modrinth.com> * Update pages/[type]/[id]/settings/index.vue Co-authored-by: Emma Alexia <emma@modrinth.com> * Clean up org state management * Refactor useClientTry to simplify code * Remove unused code and update dependencies * Refactor bulkEditLinks event handler * Refactor organization management functions * Update heading from "Creators" to "Members" * Refactor team member invitation * Refactor member management functions * Implement validation on clientside for org names * Name sanitization for fun characters * Update onInviteTeamMember function parameters * Remove name * sidebar * random rendering issue * Conform to org removal * Org no projects conditional * Update organization links in dashboard * Update Cards to universal-cards * Refactor gallery upload permissions * Refactor to sidebar pattern * Update button classes in gallery and versions components * Finish (most) * almost finish * Finish orgs :D * Fix lint * orgs fixes * fix most things * project settings * convert grid to cards * clean up unused test class * Settings -> Manage * add org view to org management * Fix prop mounting issue * fix analytics grid layout overflow * fix multiselect breaking layout * Refactor chart selection logic in ChartDisplay.vue * Add transfer modal --------- Co-authored-by: Jai A <jaiagr+gpg@pm.me> Co-authored-by: Emma Alexia <emma@modrinth.com>
37 lines
1009 B
TypeScript
37 lines
1009 B
TypeScript
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) => {
|
|
addNotification({
|
|
group: 'main',
|
|
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()
|
|
}
|
|
}
|