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

[Docs] Add developer documentation for using/modifying the chrome service #1875

Merged
merged 5 commits into from
Jul 26, 2022
Merged
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
130 changes: 130 additions & 0 deletions src/core/public/chrome/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@

## Chrome Service

- [About!](#about-)
- [Nav Controls Service](#navcontrolsservice-)
- [Nav Links Service](#navlinksservice-)
- [Recently Accessed Service](#recentlyaccessedservice-)
- [Doc Title Service](#doctitleservice-)
- [UI](#ui-)

## About :
kaddy645 marked this conversation as resolved.
Show resolved Hide resolved
- **Signature** - `export interface ChromeStart`
The chrome service is a high level UI service that is part of CoreStart (Core services exposed to the Plugin start lifecycle) and offers other plugins a way to add navigation controls to the UI, edit the document title, manipuate navlinks on global header as well as edit the recent accessed tab. It consists of these sub-services/components.

- NavControlsService : for registering new controls to be displayed in the navigation bar.
- NavLinksService : for manipulating nav links.
- RecentlyAccessedService : for recently accessed history.
- DocTitleService: for accessing and updating the document title
- UI : All the UI components,icons e.g. header, loaders.


- How to access ? add in interface `chrome: ChromeStart && chrome.servicesName => e.g chrome.docTitle.method`
kaddy645 marked this conversation as resolved.
Show resolved Hide resolved
- Where it is getting Registered/Executed ? [Staring Point](https://github.com/opensearch-project/OpenSearch-Dashboards/blob/2.1/src/core/public/rendering/rendering_service.tsx)
- How header component is getting rendered ? `const chromeUi = chrome.getHeaderComponent(); `
- Chrome Methods </b> [See chrome interface/methods](https://github.com/opensearch-project/OpenSearch-Dashboards/blob/2.1/src/core/public/chrome/chrome_service.tsx)


### NavControlsService :
- Interface : ChromeNavControls
- **Signature** - `navControls: ChromeNavControls`
- Registering new controller

Example :
Register a left-side nav control rendered with React.

```jsx
chrome.navControls.registerLeft({
mount(targetDomElement) {
ReactDOM.mount(<MyControl />, targetDomElement);
return () => ReactDOM.unmountComponentAtNode(targetDomElement);
}
})
```
### NavLinksService :
- Interface : ChromeNavLinks
- **Signature** - `navLinks: ChromeNavLinks`
- e.g. Method :

Get an observable for a sorted list of navlinks :-
kaddy645 marked this conversation as resolved.
Show resolved Hide resolved

`getNavLinks$(): Observable<Array<Readonly<ChromeNavLink>>>`

Get the state of a navlink at this point in time :-

`get(id: string): ChromeNavLink | undefined`

Get the current state of all navlinks :-

`getAll(): Array<Readonly<ChromeNavLink>>`

Check whether or not a navlink exists :-

`has(id: string): boolean`

Remove all navlinks except the one matching the given id :-
`showOnly(id: string): void`

- How to access
###### Get the current state of all navlinks:
`core.chrome.navLinks.getAll()`

###### Get the state of a navlink at this point in time:
`core.chrome.navLinks.get()`

### RecentlyAccessedService :

- Interface : ChromeRecentlyAccessed
- Signature : ```recentlyAccessed: ChromeRecentlyAccessed```
- The Recently viewed items are stored in the browser's local storage.
- You can go back to the recent search/visualization/dashboard , each item has (link,label,id)
- Methods :

Adds a new item to the recently accessed history :-
kaddy645 marked this conversation as resolved.
Show resolved Hide resolved

`add(link: string, label: string, id: string): void`

Gets an Array of the current recently accessed history :-

`get(): ChromeRecentlyAccessedHistoryItem[]`

Gets an Observable of the array of recently accessed history :-

`get$(): Observable<ChromeRecentlyAccessedHistoryItem[]>`

- How to access
###### Adds a new item to the recently accessed history :
`
chrome.recentlyAccessed.add('/app/map/1234', 'Map 1234', '1234');
`
###### Gets an Array of the current recently accessed history :
`
chrome.recentlyAccessed.get().forEach(console.log);;
`

### DocTitleService :
- Interface : ChromeDocTitle
- **Signature** - `docTitle: ChromeDocTitle`
###### - How to change the title of the document


```ts
kaddy645 marked this conversation as resolved.
Show resolved Hide resolved
chrome.docTitle.change('My application title')
chrome.docTitle.change(['My application', 'My section'])
```
### UI :
###### consists of tsx/scss files && renders UI components from css Library e.g ```<Progress props={props}>```

###### Adding/overriding existing css :
- Create scss file and define class e.g .osdCustomClass{}
- pass className prop to UI component.
e.g `<HeaderBreadcrumbs className="osdCustomClass"/> `

###### UI Components :
- HeaderBreadcrumbs : Props

- responsive:boolean Hides extra (above the max) breadcrumbs under a collapsed item as the window gets smaller.
- max: Collapses the inner items past the maximum set here into a single ellipses item.
- breadcrumbs : The array of individual Breadcrumb items