Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(web): 如果UI扩展自定义导航栏接口返回的某个导航项的path与某个已有的路径的clickToPath相同(之前只检查path),则返回的路径也将不做进一步处理 #1377

Merged
merged 4 commits into from
Jul 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/tasty-geese-reflect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@scow/lib-web": patch
---

如果UI扩展自定义导航栏接口返回的某个导航项的`path`与某个已有的路径的`clickToPath`相同(之前只检查`path`),则返回的路径也将不做进一步处理
22 changes: 19 additions & 3 deletions docs/docs/integration/ui-extension/develop.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ SCOW将会在body中传入默认情况下SCOW将会显示的导航项。下表
#### 关于返回的路径的说明

- 如果
- 返回的路径在调用这个扩展的此接口之前已经存在(即在调用此扩展的此接口时的某个已有的导航项具有和返回的路径相同的路径),或者
- 返回的路径和传入参数的某项的`path`或者`clickToPath`相同,或者
- 此路径是一个有效的URL
- 检查方法:使用`new URL(输入)`,若不抛出异常则为有效的URL
- 则
Expand All @@ -109,6 +109,8 @@ SCOW将会在body中传入默认情况下SCOW将会显示的导航项。下表
- 当系统采用多个个UI扩展配置语法时,对应的导航项的路径为:`{SCOW URL}/extensions/{name}/{path}`
- 若当前浏览器的pathname以此开头,则此导航项将会高亮

#### 多个UI扩展

如果配置了多个UI扩展,那么SCOW将会按照配置中的顺序依次调用每个需要重写导航项的UI扩展的此接口,并将上一个UI扩展的输出作为下一个UI扩展的输入,并将最终结果作为SCOW的导航项。

### 增加导航栏链接:POST /api/\{portal,mis\}/navbarLinks
Expand All @@ -128,22 +130,36 @@ SCOW在调用接口时,会将[上下文参数](#上下文参数)作为查询
| JSON属性路径 | 类型 | 是否必须 | 解释 |
| ----------------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------- |
| `navbarLinks` | 对象数组 | 是 | 导航项 |
| `navbarLinks[].path` | 字符串 | 是 | 此导航项的路径,请参考上文**关于返回的路径的的说明** |
| `navbarLinks[].path` | 字符串 | 是 | 此导航项的路径,请参考下文**关于返回的路径的的说明** |
| `navbarLinks[].text` | 字符串 | 是 | 导航项的文本 |
| `navbarLinks[].icon` | 对象 | 否 | 导航项的图标信息。如果不填,将显示[Ant Design Icon](https://ant.design/components/icon-cn)的`LinkOutlined` |
| `navbarLinks[].icon.src` | 图标URL | 是 | 导航项的图标地址。必须是完整的、可公开访问的URL |
| `navbarLinks[].icon.alt` | 文本 | 否 | 导航项的图标alt属性。可不填 |
| `navbarLinks[].openInNewPage` | 布尔值 | 否 | 此导航项的页面是否在新窗口中打开,默认`true` |
| `navbarLinks[].priority` | 数字 | 是 | 此链接的优先级。默认为0. |

#### 关于返回的路径的说明

- 如果返回的路径是一个有效的URL
- 检查方法:使用`new URL(输入)`,若不抛出异常则为有效的URL
- 则
- 这个路径将会保留原状,直接写入为`<a>`标签的`href`属性
- 否则
- 此路径为相当于扩展UI的`/extensions`下的路径,即
- 当系统采用单个UI扩展配置语法时,对应的导航项的路径为:`{SCOW URL}/extensions/{path}`
- 当系统采用多个个UI扩展配置语法时,对应的导航项的路径为:`{SCOW URL}/extensions/{name}/{path}`

#### 多个UI扩展

如果配置了多个UI扩展,那么SCOW将会按照配置中的顺序依次调用每个需要增加导航栏链接的UI扩展的此接口,并将获得的所有链接按以下规则**从左到右**排列:

- 优先级(`priority`)属性从大到小
- 当优先级相同时,依照获取此链接的顺序,也即
- 返回链接的UI扩展在配置中的顺序从前往后
- 同一个UI扩展返回的链接在响应中的列表的顺序从前往后

注意:
#### 其他注意事项

- 当右上角导航栏链接数量**大于等于5个**,或者屏幕宽度小于**768px**时,所有导航栏链接将会仅显示图标。

## 注意事项
Expand Down
3 changes: 3 additions & 0 deletions libs/web/src/extensions/navigations.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ export const toNavItemProps = (

const convertToMap = (navs: NavItemProps) => {
originalItemsMap.set(navs.path, navs);
if (navs.clickToPath) {
originalItemsMap.set(navs.clickToPath, navs);
}
navs.children?.forEach(convertToMap);
};

Expand Down
Loading