反应管理资源名称与路径变量
React Admin resource name with path variable
是否可以在 React Admin 中使用路径变量指定资源名称?
问题
当用户进行身份验证时,如果是管理员,应该会看到电子邮件帐户列表。单击电子邮件重定向到路径 experts/${email}/requests
.
要映射此路径,我需要为每封电子邮件定义一个新资源。这个的问题是我必须在认证之前做。
我想要的是资源名称的路径变量。例如experts/:email/requests
.
当前实现示例
function App() {
const [emails, setEmails] = useState<string[]>([]);
useEffect(() => {
(async () => {
const experts = await firebase.firestore().collection("experts").get();
const docIds: string[] = experts.docs.map((doc) => doc.id);
setEmails(docIds);
})();
}, []);
return (
<Admin
authProvider={authProvider}
dataProvider={dataProvider}
>
{(props) => {
if (props.admin) {
return [
emails.map((email) => {
return (
<Resource
key={email}
options={{ label: `${email}` }}
name={`experts/${email}/requests`}
list={RequestList}
edit={RequestEdit}
/>
);
}),
<Resource name={`experts`} list={ExpertList} />,
];
} else {
return [
<Resource
options={{ label: `${props.email}` }}
name={`experts/${props.email}/requests`}
list={RequestList}
edit={RequestEdit}
/>,
];
}
}}
</Admin>
);
}
我决定覆盖 Firebase authProvider 的登录以在用户登录后立即获取数据,而不是路径变量(React Admin 不可能)。
需要超时,因为可能会在第一次渲染后设置 localStorage。
let authProvider = FirebaseAuthProvider(firebaseConfig, options);
const login = authProvider.login;
authProvider = {
...authProvider,
login: async (params) => {
try {
const user = await login(params);
const experts = await firebase.firestore().collection("experts").get();
const docIds: string[] = experts.docs.map((doc) => doc.id);
localStorage.setItem("emails", JSON.stringify(docIds));
await timeout(300);
return user;
} catch (error) {
console.error("error", error);
}
},
};
是否可以在 React Admin 中使用路径变量指定资源名称?
问题
当用户进行身份验证时,如果是管理员,应该会看到电子邮件帐户列表。单击电子邮件重定向到路径 experts/${email}/requests
.
要映射此路径,我需要为每封电子邮件定义一个新资源。这个的问题是我必须在认证之前做。
我想要的是资源名称的路径变量。例如experts/:email/requests
.
当前实现示例
function App() {
const [emails, setEmails] = useState<string[]>([]);
useEffect(() => {
(async () => {
const experts = await firebase.firestore().collection("experts").get();
const docIds: string[] = experts.docs.map((doc) => doc.id);
setEmails(docIds);
})();
}, []);
return (
<Admin
authProvider={authProvider}
dataProvider={dataProvider}
>
{(props) => {
if (props.admin) {
return [
emails.map((email) => {
return (
<Resource
key={email}
options={{ label: `${email}` }}
name={`experts/${email}/requests`}
list={RequestList}
edit={RequestEdit}
/>
);
}),
<Resource name={`experts`} list={ExpertList} />,
];
} else {
return [
<Resource
options={{ label: `${props.email}` }}
name={`experts/${props.email}/requests`}
list={RequestList}
edit={RequestEdit}
/>,
];
}
}}
</Admin>
);
}
我决定覆盖 Firebase authProvider 的登录以在用户登录后立即获取数据,而不是路径变量(React Admin 不可能)。
需要超时,因为可能会在第一次渲染后设置 localStorage。
let authProvider = FirebaseAuthProvider(firebaseConfig, options);
const login = authProvider.login;
authProvider = {
...authProvider,
login: async (params) => {
try {
const user = await login(params);
const experts = await firebase.firestore().collection("experts").get();
const docIds: string[] = experts.docs.map((doc) => doc.id);
localStorage.setItem("emails", JSON.stringify(docIds));
await timeout(300);
return user;
} catch (error) {
console.error("error", error);
}
},
};