oak-general-business/es/hooks/useMyInfo.js

54 lines
1.9 KiB
JavaScript

import { useState, useEffect } from 'react';
import useFeatures from './useFeatures';
export default function useMyInfo() {
const features = useFeatures();
const getMyInfo = () => {
const userInfo = features.token.getUserInfo();
const { mobile } = (userInfo?.mobile$user && userInfo?.mobile$user[0]) ||
(userInfo?.user$ref &&
userInfo?.user$ref[0] &&
userInfo?.user$ref[0].mobile$user &&
userInfo?.user$ref[0].mobile$user[0]) ||
{};
const extraFile = userInfo?.extraFile$entity?.find((ele) => ele.tag1 === 'avatar');
const avatarUrl = features.extraFile.getUrl(extraFile);
return {
avatarUrl,
name: userInfo?.name || '',
nickname: userInfo?.nickname || '',
mobile: mobile || '',
};
};
const myInfo = getMyInfo();
const [avatarUrl, setAvatarUrl] = useState(myInfo.avatarUrl || '');
const [nickname, setNickname] = useState(myInfo.nickname || '');
const [name, setName] = useState(myInfo.name || '');
const [mobile, setMobile] = useState(myInfo.mobile || '');
useEffect(() => {
const appUnsub = features.application.subscribe(() => {
const { avatarUrl, nickname, name, mobile } = getMyInfo();
setAvatarUrl(avatarUrl);
setNickname(nickname);
setName(name);
setMobile(mobile);
});
const tokenUnsub = features.token.subscribe(() => {
const { avatarUrl, nickname, name, mobile } = getMyInfo();
setAvatarUrl(avatarUrl);
setNickname(nickname);
setName(name);
setMobile(mobile);
});
return () => {
appUnsub();
tokenUnsub();
};
}, []);
return {
avatarUrl,
name,
nickname,
mobile,
};
}