@blocklet/ui-react
Version:
Some useful front-end web components that can be used in Blocklets.
80 lines (72 loc) • 1.98 kB
JSX
import { useMemoizedFn } from 'ahooks';
import Toast from '@arcblock/ux/lib/Toast';
import { getBlockletSDK } from '@blocklet/js-sdk';
import { formatAxiosError } from '../../UserCenter/libs/utils';
export default function useOrg(session) {
const client = getBlockletSDK();
const getOrgs = useMemoizedFn(async ({ search, page = 1, pageSize = 20 }) => {
try {
const response = await client.user.getOrgs({ search, page, pageSize });
return response;
} catch (error) {
console.error(error);
return {
orgs: [],
paging: {
page,
pageSize,
total: 0,
},
};
}
});
const createOrg = useMemoizedFn(async ({ name, description, avatar }) => {
try {
const response = await client.user.createOrg({ name, description, avatar });
return response.data;
} catch (error) {
console.error(error);
Toast.error(formatAxiosError(error));
return null;
}
});
const updateOrg = useMemoizedFn(async (orgId, { name, description, avatar }) => {
try {
const response = await client.user.updateOrg(orgId, { name, description, avatar });
return response.data;
} catch (error) {
console.error(error);
Toast.error(formatAxiosError(error));
return null;
}
});
const getOrg = useMemoizedFn(async (orgId) => {
try {
const data = await client.user.getOrg(orgId);
return data;
} catch (error) {
session.logout();
console.error(error);
return null;
}
});
const getCurrentOrg = useMemoizedFn(async (roleName) => {
try {
const response = await client.user.getRole(roleName);
if (response.orgId) {
const org = await getOrg(response.orgId);
return org;
}
return null;
} catch (error) {
console.error(error);
return null;
}
});
return {
getOrgs,
createOrg,
updateOrg,
getCurrentOrg,
};
}