@c8y/apps
Version:
Cumulocity IoT applications
80 lines (72 loc) • 2.4 kB
text/typescript
import { Component, Input } from '@angular/core';
import { ControlContainer, NgForm } from '@angular/forms';
import { DynamicComponent, OnBeforeSave, AlertService } from '@c8y/ngx-components';
import { omit } from 'lodash';
@Component({
selector: 'c8y-widget-config-demo',
template: `
<div class="form-group">
<c8y-form-group>
<label>Text</label>
<textarea
style="width: 100%"
[(ngModel)]="config.text"
name="text"
[ ]="true"
></textarea>
</c8y-form-group>
<label
>Configuration
<button type="button" (click)="more = !more" class="btn btn-primary btn-xs">
{{ more ? 'Hide' : 'Show' }} settings
</button></label
>
<pre><code>{{ clean(config, more) | json }}</code></pre>
</div>
`,
// We connect our parent Form to this form (for disabling the save button)
// you can also enable the button by using ContextServiceDashboard.formDisabled
// property instead (by default it is enabled).
viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]
})
export class WidgetConfigDemo implements DynamicComponent, OnBeforeSave {
/**
* The configuration which is shared between configuration component and display component.
* Should be searilzabled to allow to save it to the API. The config is saved automatically
* to the API on "save"-button hit. The onBeforeSave handler can be used to change this behavior,
* or to manipulate the object.
*
* Note: The dashboard itself adds certain properties. As such, some properties are not allowed (e.g. device or settings)
*/
@Input() config: any = {};
/**
* An internal component property used to hide/show settings.
*/
more = false;
/**
* Default Angular DI can be used, to use additional services.
*/
constructor(private alert: AlertService) {}
/**
* This example onBeforeSave handler cancels the saving, if the text is only a white-space.
*/
onBeforeSave(config: any): boolean {
if (config.text.trim() === '') {
this.alert.warning('Please enter a valid text.');
return false;
}
return true;
}
/**
* Used to hide/show config settings on toggle.
*/
clean(config, more) {
if (more) {
return config;
}
return omit(config, 'settings');
}
selectionChanged(e) {
console.log(e);
}
}