From ecd8e363d922462263aeb83ce905bda6e1ee3a96 Mon Sep 17 00:00:00 2001 From: Patrizio Bekerle <patrizio@bekerle.com> Date: Wed, 3 Feb 2021 08:19:41 +0100 Subject: [PATCH] Allow terse subscription and add more provider documention --- .../src/dbp-person-select-demo.js | 4 +- packages/provider/README.md | 74 +++++++++++++++---- packages/provider/src/adapter-lit-element.js | 4 +- 3 files changed, 63 insertions(+), 19 deletions(-) diff --git a/packages/person-select/src/dbp-person-select-demo.js b/packages/person-select/src/dbp-person-select-demo.js index 7296ff6f..c4adde1e 100644 --- a/packages/person-select/src/dbp-person-select-demo.js +++ b/packages/person-select/src/dbp-person-select-demo.js @@ -75,13 +75,13 @@ export class PersonSelectDemo extends ScopedElementsMixin(DBPLitElement) { <div class="field"> <label class="label">Person 1</label> <div class="control"> - <dbp-person-select subscribe="auth:auth" lang="${this.lang}" entry-point-url="${this.entryPointUrl}"></dbp-person-select> + <dbp-person-select subscribe="auth" lang="${this.lang}" entry-point-url="${this.entryPointUrl}"></dbp-person-select> </div> </div> <div class="field"> <label class="label">Person 2</label> <div class="control"> - <dbp-person-select subscribe="auth:auth" lang="${this.lang}" entry-point-url="${this.entryPointUrl}" show-reload-button reload-button-title="Click me"></dbp-person-select> + <dbp-person-select subscribe="auth" lang="${this.lang}" entry-point-url="${this.entryPointUrl}" show-reload-button reload-button-title="Click me"></dbp-person-select> </div> </div> </form> diff --git a/packages/provider/README.md b/packages/provider/README.md index 1501ad67..5da70902 100644 --- a/packages/provider/README.md +++ b/packages/provider/README.md @@ -1,4 +1,4 @@ -# Provider Web Component +# Provider Web Components [GitLab Repository](https://gitlab.tugraz.at/dbp/web-components/toolkit) @@ -8,20 +8,6 @@ You can install this component via npm: npm i @dbp-toolkit/provider ``` -## Usage - -```html -<provider></provider> -<script type="module" src="node_modules/@dbp-toolkit/provider/dist/dbp-provider.js"></script> -``` - -## Attributes - -- `init` (optional): set your vars to values - - example `<provider init="foo=bar"></provider>` -- `id` (optional): set an id, useful for debugging - - example `<provider id="p-1"></provider>` - ## Local development ```bash @@ -40,3 +26,61 @@ yarn test ``` Jump to <http://localhost:8002> and you should get a demo page. + +## Provider + +### Usage + +You can provide attributes (e.g. `global-name`) for components inside the provider: + +```html +<provider global-name="value" global-name2="value2"> + <dbp-person-select subscribe="local-name:global-name"></dbp-person-select> + <dbp-person-profile subscribe="local-name:global-name,local-name2:global-name2"></dbp-person-profile> +</provider> +<script type="module" src="node_modules/@dbp-toolkit/provider/dist/dbp-provider.js"></script> +``` + +### Attributes + +- `init` (optional): set your vars to values + - example `<provider init="foo=bar"></provider>` +- `id` (optional): set an id, useful for debugging + - example `<provider id="p-1"></provider>` + +## AdapterLitElement + +This is a class you can derive your component class from instead of `LitElement`. + +You can locally "subscribe" to attributes (e.g. `local-name`) that can be provided by a `dbp-provider` (e.g. `global-name`). +You need to make this available attributes as LitElement properties. + +### Example + +Multiple attributes can be subscribed when separated by a comma (`,`). + +```html +<dbp-person-select subscribe="local-name:global-name,local-name2:global-name2"></dbp-person-select> +``` + +If `local-name` and `global-name` are the same you could also instead of `local-name:local-name` just write `local-name`: + +```html +<dbp-person-select subscribe="local-name"></dbp-person-select> +``` + +### Inherent provider + +AdapterLitElement are themselves provider that will provide all their own attributes to all the elements in their shadow dom. + +In this example `dbp-auth-keycloak` would use the `set-property` event to propagate an `auth` property. +`dbp-person-select-demo` would act as provider for `auth`. `dbp-person-select` would subscribe to `auth` to receive +the bearer token via `this.auth.token`. + +```html +<dbp-person-select-demo auth lang="de" entry-point-url="http://127.0.0.1:8000"> + <!-- #shadow-root --> + <dbp-auth-keycloak></dbp-auth-keycloak> + <dbp-person-select subscribe="auth" lang="${this.lang}" entry-point-url="${this.entryPointUrl}"></dbp-person-select> +</dbp-person-select-demo> +``` diff --git a/packages/provider/src/adapter-lit-element.js b/packages/provider/src/adapter-lit-element.js index 78666eb2..9c832aa0 100644 --- a/packages/provider/src/adapter-lit-element.js +++ b/packages/provider/src/adapter-lit-element.js @@ -176,7 +176,7 @@ export class AdapterLitElement extends LitElement { console.log('AdapterLitElement(' + this.tagName + ') subscribeProviderFor( ' + element + ' )'); const pair = element.trim().split(':'); const local = pair[0]; - const global = pair[1]; + const global = pair[1] || local; const that = this; const event = new CustomEvent('subscribe', { @@ -216,7 +216,7 @@ export class AdapterLitElement extends LitElement { unSubscribeProviderFor(element) { console.log('AdapterLitElement(' + this.tagName + ') unSubscribeProviderFor( ' + element + ' )'); const pair = element.trim().split(':'); - const global = pair[1]; + const global = pair[1] || pair[0]; const event = new CustomEvent('unsubscribe', { bubbles: true, -- GitLab