javascript - 是否可以让 README 文档首先出现在 Storybook 导航中,然后是所有故事?
问题描述
我将所有 Storybook 故事都嵌套在“Docs”标题下。每个组件都有一个 README mdx 文件,然后是必要的故事。我希望自述文件总是首先出现在导航中,然后故事可以自然地排序。
这是我想要的排序:
Docs
│
├─ Button
│ │
│ ├─ README
│ ├─ Button Story One
│ ├─ Button Story Two
│ └─ Button Story One
│
└─ Grid
│
├─ README
│
├─ Column
│ │
│ ├─ README
│ ├─ Column Story One
│ ├─ Column Story Two
│ └─ Column Story Three
│
└─ Row
│
├─ README
├─ Row Story One
├─ Row Story Two
└─ Row Story Three
您会注意到有 3 个级别,但根据组件的复杂性,可能有多达 4 个级别,每个级别都有一个 README。
这种自定义排序是否可行?如果是这样,怎么做?
这是推荐的排序算法:
return a[1].kind === b[1].kind ? 0 : a[1].id.localeCompare(b[1].id, undefined, { numeric: true });
Wherea[1]
和b[1]
are 具有以下结构的对象:
{
"id": "docs-grid-column-examples--default-story",
"kind": "Docs/Grid/Column/Examples",
"name": "default",
"story": "default"
}
解决方案
试试下面...
storyBookArray.sort( ( a, b ) => {
let aPath = a.kind.replace( /\/README$/, '/' );
let bPath = b.kind.replace( /\/README$/, '/' );
return aPath.localeCompare( bPath );
} );
简而言之,这会将路径末尾的任何“/README”替换为“/”,这意味着一个空文件名,从而在localeCompare
对两个路径执行时将“README”放在该路径内列表的开头在排序期间。
这假设如果 storyBookArray 除了文件之外还跟踪目录,那么这些目录被指定为,比如说,'Docs/Grid',没有尾部斜杠......
推荐阅读
- migration - 如何估算迁移到云端所需的时间
- javascript - 如何在单行中将函数包装在函数中以传递参数而不执行它
- list - 尝试将列表“批量转换”为 numpy 数组
- windows - 在 Windows 重新启动时自动启动 Docker
- dart - 飞镖中的异步等待 Future.delayed
- java - 无法解决 jdk 15m 获取 JAVA_HOME 环境变量未正确定义的 maven 问题
- python - 尝试在 Heroku 上部署模型时出现问题
- javascript - 使用 Lodash 的对象数组中的多个 groupBy 和 sumBy
- c# - 我在解决 HackerRank - “Pairs” 问题(评级为中等)方面的错误在哪里?
- python - 在双引号内使用逗号和撇号在 Pandas 中读取 CSV 时出现问题