如何在 Keystone JS 中自定义管理面板? (或者:Keystone JS demo-project/blog 中的自定义管理页面如何工作?)

How to customise the Admin panel in Keystone JS? (Or: how do the custom admin pages in Keystone JS demo-project/blog work?)

我们希望在大型项目中使用 KeystoneJS,并且希望能够自定义管理面板。有一个很好的例子来说明如何做到这一点 here, and I've been reviewing this PR to the project。虽然这个例子看起来对我们有用,但我不明白它背后的逻辑,即我们需要实现什么才能让它工作,可能性和限制是什么。

当您使用 Keystone NextJS 应用程序(这对我们有好处)时,如果您添加一个文件夹 /admin/pages,Keystone 应用程序是否会在那里查找并使用那些自定义管理页面而不是常规的?我假设我们也可以从这些页面完全访问应用程序的其余部分、控制器和数据库....

我还注意到 JedWatson 在 https://github.com/keystonejs/keystone/pull/1019 中指出

Note this lacks SSR support, and I didn't put as much effort into the examples, but it's otherwise (I think) identical in functionality.

它是否仅在管理部分缺少 SSR 支持,或者添加自定义管理页面是否会以某种方式影响应用程序其余部分的 SSR 支持? (SSR 是我们接下来使用的原因)

感谢您提供任何信息。

自定义页面有两个 api,一个是 admin-ui 应用程序构造函数中的 pages 选项,第二个是 hooks api 中的一部分基石构造函数。

  1. pages:这个是遗留的,只添加自定义页面,它不会覆盖 admin-ui 中现有的列表页面,如果配置不正确,它只会隐藏它们。通常 Dashboard 是可见的,所有列表都列在那里。
  2. hooks:这是新的,预计会添加更多自定义选项,不幸的是我的 PR 已经过时,它们不是 keystone 核心团队想要添加的规范。这也不会删除任何页面。

admin ui 作为 react app built 运行或使用 webpack 配置加载。这就是为什么没有 ssr 支持的原因。即使该示例使用自定义管理目录但未由 nextjs 组件加载,它是使用 webpack 服务器动态加载的,安装 admin-ui react app

如果你真的想拥有 ssr,你可以从很久以前用作 POC 的封闭 PR 中学习一些东西。但这太过分了,因为 admin-ui 之后还有更多更新。

hooks/pages 可以访问核心有限的一组访问权限,还有一些基于 React context、provider 和 consumer hooks 的访问权限。您可以使用 react-apollo 挂钩,因为已经有提供者包装在反应上下文的根目录中。您还可以使用 React router hooks,它们已升级到最新版本。它无权访问服务器端上下文或控制器。 (不确定你所说的控制器是什么意思)