External WebComponent
ExternalWebComponent jest wyspecjalizowanym komponentem, umożliwiającym tworzenie kontrolek spoza zestawu dostępnego na palecie. Wystarczy napisać własny WebComponent korzystając z języka HTML i JavaScript oraz zwrócić namiary na plik z taką zawartością za pomocą usługi (ScriptService lub ServiceProxy).
Parametry wejściowe komponentu
componentUrl
pełen link do źródła WebComponentu
tag
znacznik, jakim ma się identyfikować
inputs
lista parametrów wejściowych dla Componentu jako JSON
Lista parametrów modelu wejściowego do WebComponentu
name
*
Nazwa parametru
value
*
Stała wartość lub nazwa komponentu na wniosku
type
CONSTANT / FIELD
Typ przekazywanej wartości
deliveryType
ATTRIBUTE / PROPERTY
Sposób dostarczenia wartości do WebComponentu
Komunikacja
Wszelkie parametry do komponentu (zdefiniowane w designerze) są przekazywane do komponentu za pomocą atrybutów. Jeżeli z serwera otrzymamy nową wartość, wartość atrybutu zostanie zmieniona.
W przypadku pustych wartości atrybuty nie będą tworzone.
Jeżeli update wartości wyczyści wartość danego atrybutu to platforma usunie ten atrybut z elementu.
Komponent może korzystać z dowolnych metod wystawionych przez API eximee w obiekcie window
export interface ExWebformsWindow extends Window { getComponentValue: (componentId: string) => unknown; setComponentValue: (sourceComponentId: string, componentId: string, newValue: string) => unknown; updateExternalSectionValue: (externalSectionId: string, newValue: string) => unknown; finishApplication: () => void; applicationSetTitle: () => void; goForward: () => void; goBackward: () => void; returnToOriginalForm: () => boolean; }Komponent może zmienić własną wartość emitując event change z polem details zawierającym obiekt spełniający interfejs
{ value: string }. Można to uzyskać na przykład tworząc obiekt typuCustomEvent(np:new CustomEvent('change', {detail: {value: event.target.value}})). Dodatkowo komponent może wyemitować eventy focus oraz blur - nie będą one miały wpływu na logikę wniosku, ale zostaną odnotowane w statystykach. UWAGA! Kod powinien respektować fakt usunięcia komponentu z DOM - wszelkie eventy wysyłane po usunięciu komponentu mogą uniemożliwić złożenie wniosku.Poza zdefiniowanymi atrybutami platforma ustawi na komponencie następujące atrybuty:
id - identyfikator elementu w strukturze DOM. Platforma zapewnia jego unikalność i zgodność ze specyfikacją HTML
component-id - identyfikator komponentu - tego identyfikatora należy używać podczas komunikacji z platformą
value - aktualna wartość komponentu
translations - JSON z tłumaczeniami (klucz-wartość) dla literałów w webcomponencie
Atrybut może być ustawiony przez platformę po connectedCallback - trzeba wpiąć się w attributeChangedCallback
Konfiguracja
Stała konfiguracja może wyglądać następująco:
<p1:GesExternalWebComponent id="GesExternalWebComponent2" mid="GesExternalWebComponent2" inheritLayout="false" tag="img-only" componentUrl="https://dev.bank.eximee.consdata.local/bank-demo-ewc/imgonly.js">
<data:ListeningOn/>
<data:ClearOn/>
<p1:GesExternalWebComponent.layoutData>
<ns6:GridData horizontalAlignment="FILL" horizontalSpan="17" verticalAlignment="CENTER"/>
</p1:GesExternalWebComponent.layoutData>
<data:ExternalWebComponentInputMapping>
<data:ExternalWebComponentMapping value="some-value" name="name1" type="CONSTANT" deliveryType="ATTRIBUTE"/>
<data:ExternalWebComponentMapping value="GesTextField1" name="name2" type="FIELD" deliveryType="PROPERTY"/>
</data:ExternalWebComponentInputMapping>
</p1:GesExternalWebComponent>W przypadku podania wartości @GesTextField1 oraz typu FIELD, platforma odpowiednio rozwiąże zagnieżdżone komponenty.
Można również podpiąć ServiceProxy (ScriptService), który zwróci powyższe dane.
<p1:GesExternalWebComponent id="GesExternalWebComponent1" mid="GesExternalWebComponent1" inheritLayout="false">
<data:ExternalDataSource name="demo_cross_sell_ewc" type="SCRIPT_SERVICE" changesWidgetAttributes="false" version="*">
<data:OutputFields>
<data:Field localName="componentUrl" serviceName="url_to_webcomponent"/>
<data:Field localName="tag" serviceName="webcomponent_tag"/>
</data:OutputFields>
</data:ExternalDataSource>
<data:ListeningOn/>
<data:ClearOn/>
<p1:GesExternalWebComponent.layoutData>
<ns6:GridData horizontalAlignment="FILL" horizontalSpan="17" verticalAlignment="CENTER"/>
</p1:GesExternalWebComponent.layoutData>
</p1:GesExternalWebComponent>Podpięcie EDSa (źródla danych zewnętrznych) do ExternalWebComponentu spowoduje nadpisanie wszystkich pierwotnych wartości.
Oznacza to, że trzeba dostarczyć wszystkie parametry wejściowe (url, tag, inputs).
Przykładowy WebComponent
Last updated
Was this helpful?
