Reactjs Api平台管理员使用guessers组件,但不使用React Admin经典组件
我目前面临一个关于Api平台管理的问题。当我使用Api平台文档中使用的guesser组件(如“ListGuesser”或“ResourceGuesser”)时,管理员工作正常,并显示了我的用户列表。 但当我尝试使用经典的React管理组件(如“列表”或“资源”)时,管理员似乎不再调用api,我会得到一个从模板继承的空白页面,但只显示“resources.users.empty”、“resources.users.invite”、“ra.action.create” 如果我在创建表单中使用react管理组件(如“SelectInput”)而不是猜测器,则表单可以正常工作,但我的字段(如“resources.users.fields.roles”)的输出格式相同 我正在使用文档提供的Docker上运行的Api平台发行版 App.js:Reactjs Api平台管理员使用guessers组件,但不使用React Admin经典组件,reactjs,react-admin,api-platform.com,Reactjs,React Admin,Api Platform.com,我目前面临一个关于Api平台管理的问题。当我使用Api平台文档中使用的guesser组件(如“ListGuesser”或“ResourceGuesser”)时,管理员工作正常,并显示了我的用户列表。 但当我尝试使用经典的React管理组件(如“列表”或“资源”)时,管理员似乎不再调用api,我会得到一个从模板继承的空白页面,但只显示“resources.users.empty”、“resources.users.invite”、“ra.action.create” 如果我在创建表单中使用reac
import React from "react";
import { Resource } from 'react-admin';
import { Redirect, Route } from "react-router-dom";
import { HydraAdmin, hydraDataProvider as baseHydraDataProvider, fetchHydra as baseFetchHydra, ResourceGuesser } from "@api-platform/admin";
import parseHydraDocumentation from "@api-platform/api-doc-parser/lib/hydra/parseHydraDocumentation";
import authProvider from "./providers/authProvider";
import CustomComponent from "./components/CustomComponent";
import PostIcon from '@material-ui/icons/Book';
import customRoutes from './routing/customRoutes';
import {i18nProvider} from './providers/i18nProvider';
import CustomLayout from "./layouts/CustomLayout";
import {UserCreate, UserShow, UserList} from "./pages/users";
const entrypoint = process.env.REACT_APP_API_ENTRYPOINT;
const fetchHeaders = () => ({
Authorization: `Bearer ${localStorage.getItem("token")}`,
});
const fetchHydra = (url, options = {}) =>
localStorage.getItem("token")
? baseFetchHydra(url, {
...options,
headers: new Headers(fetchHeaders()),
})
: baseFetchHydra(url, options);
const apiDocumentationParser = entrypoint => parseHydraDocumentation(entrypoint, { headers: new Headers(fetchHeaders) })
.then(
({ api }) => ({ api }),
(result) => {
switch (result.status) {
case 401:
localStorage.removeItem("token");
return Promise.resolve({
api: result.api,
customRoutes: [
<Route path="/" render={() => {
return window.localStorage.getItem("token") ? window.location.reload() : <Redirect to="/login" />
}} />
],
});
default:
return Promise.reject(result);
}
},
);
const dataProvider = baseHydraDataProvider(
entrypoint,
fetchHydra,
apiDocumentationParser
);
export default () => (
<HydraAdmin
dataProvider={ dataProvider }
authProvider={ authProvider }
entrypoint={ entrypoint }
layout={ CustomLayout }
i18nProvider={ i18nProvider }
customRoutes={ customRoutes }
>
<ResourceGuesser name="greetings" />
<Resource
name="users"
list={UserList}
show={UserShow}
create={UserCreate}
/>
<Resource name={CustomComponent} icon={PostIcon} />
</HydraAdmin>
);
从“React”导入React;
从“react admin”导入{Resource};
从“react router dom”导入{Redirect,Route};
从“@api platform/admin”导入{hydradmin,hydraDataProvider作为baseHydraDataProvider,fetchHydra作为baseFetchHydra,ResourceGuesser};
从“@api platform/api doc parser/lib/hydra/parseHydraDocumentation”导入parseHydraDocumentation;
从“/providers/authProvider”导入authProvider;
从“/components/CustomComponent”导入CustomComponent;
从“@material ui/icons/Book”导入PostIcon;
从“./routing/customRoutes”导入customRoutes;
从“/providers/i18nProvider”导入{i18nProvider};
从“/layouts/CustomLayout”导入CustomLayout;
从“/pages/users”导入{UserCreate、UserShow、UserList};
const entrypoint=process.env.REACT\u APP\u API\u entrypoint;
常量fetchHeaders=()=>({
授权:`Bearer${localStorage.getItem(“令牌”)}`,
});
const fetchHydra=(url,options={})=>
localStorage.getItem(“令牌”)
? baseFetchHydra(url{
…选项,
标题:新标题(fetchHeaders()),
})
:baseFetchHydra(url、选项);
const apiDocumentationParser=entrypoint=>parsehydrocumentation(entrypoint,{headers:newheaders(fetchHeaders)})
.那么(
({api})=>({api}),
(结果)=>{
开关(结果状态){
案例401:
localStorage.removietem(“令牌”);
还愿({
api:result.api,
海关路线:[
{
返回window.localStorage.getItem(“令牌”)?window.location.reload():
}} />
],
});
违约:
返回承诺。拒绝(结果);
}
},
);
const dataProvider=baseHydraDataProvider(
入口点,
水螅,
ApicDocumentationParser
);
导出默认值()=>(
);
My users.js:
import * as React from "react";
import { List, Datagrid, TextField, EmailField, ReferenceField, EditButton, Edit, SimpleForm, TextInput, ReferenceInput, SelectInput, Create, Filter, SimpleList } from 'react-admin';
import {
HydraAdmin,
ResourceGuesser,
ListGuesser,
CreateGuesser,
FieldGuesser, ShowGuesser, InputGuesser
} from "@api-platform/admin";
import { useMediaQuery } from '@material-ui/core';
const userRowBackgroundColor = (record, index) => {
if (record.email != null && record.password != null) {
const backgroundColor = {
backgroundColor: 'white'
}
return backgroundColor;
} else {
const backgroundColor = {
backgroundColor: '#F5BB34'
}
return backgroundColor;
}
}
const postRowStyle = (record, index) => ({
backgroundColor: record.username.length >= 10 ? '#efe' : 'red',
});
export const UserList = props => {
const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));
return (
<div>
<List {...props}>
{isSmall ? (
<SimpleList
primaryText={record => record.username}
secondaryText={record => `mail : ${record.email}`}
/>
) : (
<Datagrid rowClick="edit" >
<TextField source="id" />
<EmailField source="email" />
<TextField source="roles" />
</Datagrid>
)}
</List>
</div>
)
};
export const UserShow = (props) => (
<ShowGuesser {...props}>
<FieldGuesser source="email" addLabel={true} />
</ShowGuesser>
);
export const UserCreate = (props) => (
<CreateGuesser {...props}>
<InputGuesser source="email" />
<SelectInput source="roles" choices={[
{ id: ['ROLE_ADMIN'], name: 'Administrateur' },
{ id: ['ROLE_USER'], name: 'Utilisateur' }
]} />
<TextInput type="password" source="plainPassword" />
</CreateGuesser>
);
从“React”导入*作为React;
从“react admin”导入{List、Datagrid、TextField、EmailField、ReferenceField、EditButton、Edit、SimpleForm、TextInput、ReferenceInput、SelectInput、Create、Filter、SimpleList};
进口{
海德拉丹,
智囊团,
ListGuesser,
CreateGuesser,
字段猜测器,显示猜测器,输入猜测器
}来自“@api平台/管理员”;
从“@material ui/core”导入{useMediaQuery};
const userRowBackgroundColor=(记录、索引)=>{
if(record.email!=null&&record.password!=null){
常量背景色={
背景颜色:“白色”
}
返回背景色;
}否则{
常量背景色={
背景颜色:“#F5BB34”
}
返回背景色;
}
}
const postRowStyle=(记录、索引)=>({
背景色:record.username.length>=10?“#efe”:“红色”,
});
export const UserList=props=>{
const isSmall=useMediaQuery(theme=>theme.breakpoints.down('sm');
返回(
{isSmall(
record.username}
secondaryText={record=>`mail:${record.email}`}
/>
) : (
)}
)
};
导出常量UserShow=(道具)=>(
);
导出常量UserCreate=(道具)=>(
);
欢迎任何帮助,谢谢