@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
378 lines (364 loc) • 18.3 kB
TypeScript
import * as _angular_core from '@angular/core';
import { OnInit, PipeTransform, AfterViewInit, QueryList, ElementRef } from '@angular/core';
import { IEvent, IManagedObject, IEventBinary, IResultList, IManagedObjectBinary, IFetchResponse, EventService } from '@c8y/client';
import { EventDetails } from '@c8y/ngx-components/alarm-event-selector';
import { QueryParamsHandling } from '@angular/router';
import { DateTimeContext, CountdownIntervalComponent, LoadMoreMode, SplitViewListComponent, ListItemComponent, ContextData } from '@c8y/ngx-components';
import { AlarmFilterInterval } from '@c8y/ngx-components/interval-picker';
import { BsDropdownDirective } from 'ngx-bootstrap/dropdown';
import * as _angular_forms from '@angular/forms';
import { DateTimeContextPickerService } from '@c8y/ngx-components/global-context';
import { Subject } from 'rxjs';
declare class EventDetailsComponent implements OnInit {
readonly CREATION_TIME_HELP_TEXT: "Time in which the event was created on the server. The time shown corresponds to the server's time.";
readonly EVENT_ICON = "online1";
readonly TIME_HELP_TEXT: "Time in which the event was created on the device. Device time can be different from server time.";
binaryPreviewLoading: _angular_core.WritableSignal<boolean>;
binaryPreviewUrl: _angular_core.WritableSignal<string>;
binaryPreviewFailed: _angular_core.WritableSignal<boolean>;
customFragments: _angular_core.WritableSignal<Record<string, unknown>>;
isDownloading: _angular_core.WritableSignal<boolean>;
isLoading: _angular_core.WritableSignal<boolean>;
selectedEvent: _angular_core.WritableSignal<IEvent>;
selectedEventSource: _angular_core.WritableSignal<IManagedObject>;
typeColor: _angular_core.WritableSignal<string>;
binaryInfo: _angular_core.Signal<IEventBinary>;
hasBinary: _angular_core.Signal<boolean>;
canDownload: _angular_core.Signal<boolean>;
binaryIcon: _angular_core.Signal<string>;
private activatedRoute;
private alertService;
private colorService;
private destroyRef;
private eventBinaryService;
private eventService;
private eventsService;
private inventoryService;
ngOnInit(): void;
isComplexValue(value: unknown): boolean;
downloadBinary(): Promise<void>;
private loadEventDetails;
private loadEventSource;
private loadBinaryPreview;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventDetailsComponent, never>;
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EventDetailsComponent, "c8y-event-details", never, {}, {}, never, never, true, never>;
}
declare class EventIconPipe implements PipeTransform {
private eventsService;
transform(event: IEvent): string;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventIconPipe, never>;
static ɵpipe: _angular_core.ɵɵPipeDeclaration<EventIconPipe, "eventIcon", true>;
}
declare class EventIsImagePipe implements PipeTransform {
private eventsService;
transform(event: IEvent): boolean;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventIsImagePipe, never>;
static ɵpipe: _angular_core.ɵɵPipeDeclaration<EventIsImagePipe, "eventIsImage", true>;
}
declare class EventRouterLinkPipe implements PipeTransform {
private activatedRoute;
private contextRouteService;
private eventsViewService;
transform(event: IEvent, alwaysNavigateToAllEvents?: boolean): string;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventRouterLinkPipe, never>;
static ɵpipe: _angular_core.ɵɵPipeDeclaration<EventRouterLinkPipe, "eventRouterLink", true>;
}
interface EventsFilter {
source?: string | number;
type?: string;
dateFrom?: Date;
dateTo?: Date;
pageSize?: number;
withSourceChildren?: boolean;
}
declare const EVENT_RESERVED_KEYS: string[];
declare const EVENT_STANDARD_KEYS: {
type: "Type";
text: "Text";
lastUpdated: "Last updated";
};
declare const EVENTS_PATH = "events";
/**
* Extended interval titles with an additional title for the case when no date is selected.
*/
declare const INTERVAL_TITLES_EXTENDED: Record<AlarmFilterInterval['id'], string>;
declare const INTERVALS_EXTENDED: AlarmFilterInterval[];
type WidgetTimeContextStateExtended = {
date: DateTimeContext;
interval: AlarmFilterInterval['id'];
};
type EventListFormFilters = {
selectedDates?: DateTimeContext;
interval?: AlarmFilterInterval['id'];
};
/**
* Represents the navigation options for the events list component.
*/
type EventNavigationOptions = {
/**
* Defines if the event should navigate to a detail view when clicked.
*/
allowNavigationToEventsView: boolean;
/**
* Defines if the component should try to determine the context to navigate
* to the correct event detail view or not. If set to true, the component will
* not try to determine the context and will always navigate to the all events view.
*/
alwaysNavigateToAllEvents: boolean;
/**
* Determines how query parameters should be handled during navigation.
*
* - `"merge"` : Merge new parameters with current parameters.
* - `"preserve"` : Preserve current parameters.
* - `""` : Replace current parameters with new parameters. This is the default behavior.
*/
queryParamsHandling: QueryParamsHandling;
};
declare class EventsComponent implements OnInit {
readonly TITLE: "Events";
events: _angular_core.WritableSignal<IResultList<IEvent>>;
isLoading: _angular_core.WritableSignal<boolean>;
shouldShowIntervalToggle: _angular_core.WritableSignal<boolean>;
contextSourceId: string | number | null;
isListScrolled: _angular_core.WritableSignal<boolean>;
typeFilter: EventDetails | null;
private dateFilter;
private dateInterval;
private activatedRoute;
private alertService;
private contextRouteService;
private destroyRef;
private eventsViewService;
constructor();
ngOnInit(): void;
refresh(): void;
changeInterval(value?: boolean): void;
onScrollingStateChange(isScrolling: boolean): void;
onPreviewStateChange(isOpen: boolean): void;
onEventSelected(): void;
applyTypeFilter(filter: EventDetails | null): void;
applyDateFilter(filter: EventListFormFilters): void;
private setupEventListReload;
private loadEvents;
private resolveCurrentDateRange;
private initializeContextSourceId;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventsComponent, never>;
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EventsComponent, "c8y-events", never, {}, {}, never, never, true, never>;
}
declare class EventsDateFilterComponent implements OnInit {
readonly INTERVALS: AlarmFilterInterval[];
readonly INTERVAL_TITLES: Record<"minutes" | "hours" | "days" | "weeks" | "months" | "custom" | "none", string>;
readonly DATE_FORMAT = "short";
readonly defaultInterval: _angular_core.InputSignal<"minutes" | "hours" | "days" | "weeks" | "months" | "custom" | "none">;
readonly updateQueryParams: _angular_core.InputSignal<boolean>;
date: _angular_core.WritableSignal<[string, string]>;
noFilterLabel: "No date filter";
dateFilterChange: _angular_core.OutputEmitterRef<EventListFormFilters>;
dropdown: _angular_core.Signal<BsDropdownDirective>;
private activatedRoute;
private destroyRef;
private eventsViewService;
private formBuilder;
private router;
form: ReturnType<EventsDateFilterComponent['createForm']>;
ngOnInit(): void;
applyDateFilter(): void;
private updateDateTime;
private getDefaultContext;
private subscribeToIntervalChange;
private createForm;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventsDateFilterComponent, never>;
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EventsDateFilterComponent, "c8y-events-date-filter", never, { "defaultInterval": { "alias": "defaultInterval"; "required": false; "isSignal": true; }; "updateQueryParams": { "alias": "updateQueryParams"; "required": false; "isSignal": true; }; }, { "dateFilterChange": "dateFilterChange"; }, never, never, true, never>;
}
declare class EventsIntervalRefreshComponent implements AfterViewInit {
readonly DEFAULT_INTERVAL_VALUES: number[];
readonly DEFAULT_INTERVAL_VALUE = 30000;
readonly DISABLE_AUTO_REFRESH: "Disable auto refresh";
readonly ENABLE_AUTO_REFRESH: "Enable auto refresh";
readonly SECONDS_UNTIL_REFRESH: "{{ seconds }} s";
isLoading: _angular_core.InputSignal<boolean>;
isDisabled: _angular_core.InputSignal<boolean>;
isIntervalToggleEnabled: _angular_core.InputSignal<boolean>;
onCountdownEnded: _angular_core.OutputEmitterRef<void>;
countdownIntervalComponent: _angular_core.Signal<CountdownIntervalComponent>;
private fb;
toggleIntervalForm: _angular_forms.FormGroup<{
intervalEnabled: _angular_forms.FormControl<boolean>;
refreshInterval: _angular_forms.FormControl<number>;
}>;
private destroyRef;
private doesUserCheckedIntervalToggle;
constructor();
get isToggleEnabled(): boolean;
ngAfterViewInit(): void;
resetCountdown(): void;
trackUserClickOnIntervalToggle(target: EventTarget): void;
getTooltip(): string;
private startCountdown;
private onIntervalToggleChange;
private initForm;
private listenToRefreshIntervalChange;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventsIntervalRefreshComponent, never>;
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EventsIntervalRefreshComponent, "c8y-events-interval-refresh", never, { "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "isDisabled": { "alias": "isDisabled"; "required": false; "isSignal": true; }; "isIntervalToggleEnabled": { "alias": "isIntervalToggleEnabled"; "required": false; "isSignal": true; }; }, { "onCountdownEnded": "onCountdownEnded"; }, never, never, true, never>;
}
declare class EventsListComponent implements AfterViewInit {
readonly EMPTY_STATE_TITLE: "No events to display.";
readonly LIST_TITLE: "Events list";
/**
* The paginated result list of events to display.
*/
events: _angular_core.InputSignal<IResultList<IEvent>>;
/**
* Whether the events are currently being fetched.
*/
isLoading: _angular_core.InputSignal<boolean>;
/**
* Controls the "load more" button behavior at the bottom of the list.
*/
loadMoreMode: _angular_core.InputSignal<LoadMoreMode>;
/**
* Whether to show a file preview button for image events.
*/
showPreview: _angular_core.InputSignal<boolean>;
/**
* Defines options for how the events list should navigate when a user clicks on an event.
*/
navigationOptions: _angular_core.InputSignal<EventNavigationOptions>;
/**
* Emits `true` when the list is scrolled past the threshold, `false` when scrolled back.
* Used to hide the countdown interval refresh control.
*/
onScrollingStateChange: _angular_core.OutputEmitterRef<boolean>;
/**
* Emits `true` when a file preview is opened, `false` when closed.
*/
onPreviewStateChange: _angular_core.OutputEmitterRef<boolean>;
/**
* Emits the event that was clicked by the user.
*/
onSelectedEvent: _angular_core.OutputEmitterRef<IEvent>;
activeEvent: _angular_core.WritableSignal<IEvent>;
activeChildParamId: _angular_core.WritableSignal<string>;
pendingActiveCheck: _angular_core.WritableSignal<boolean>;
showEmptyState: _angular_core.Signal<boolean>;
showFilterWarning: _angular_core.Signal<boolean>;
svListComponent: _angular_core.Signal<SplitViewListComponent>;
private isPreviewOpen;
/** Scroll threshold in pixels after which the countdown interval is hidden. */
private readonly HIDE_INTERVAL_COUNTDOWN_SCROLL;
private readonly activatedRoute;
private readonly bsModalService;
private readonly destroyRef;
private readonly eventBinaryService;
private readonly router;
constructor();
ngAfterViewInit(): void;
onEventClick(event: IEvent): void;
activeRouteChanged(isActive: boolean, scrollAnchor: ListItemComponent, event: IEvent): void;
onPreviewClick(mouseEvent: MouseEvent): void;
toBinaryMo(event: IEvent): IManagedObjectBinary;
getEventDownloadFn(event: IEvent): () => Promise<IFetchResponse>;
private setupPreviewModalCloseListener;
private setupActiveChildParamTracking;
private setupScrollListener;
private shouldCountdownIntervalBeHidden;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventsListComponent, never>;
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EventsListComponent, "c8y-events-list", never, { "events": { "alias": "events"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "loadMoreMode": { "alias": "loadMoreMode"; "required": false; "isSignal": true; }; "showPreview": { "alias": "showPreview"; "required": false; "isSignal": true; }; "navigationOptions": { "alias": "navigationOptions"; "required": false; "isSignal": true; }; }, { "onScrollingStateChange": "onScrollingStateChange"; "onPreviewStateChange": "onPreviewStateChange"; "onSelectedEvent": "onSelectedEvent"; }, never, ["*"], true, never>;
}
declare class EventsService {
private filesService;
private fileIconPipe;
resolveFileIcon(fileName: string): string;
getStandardKeys(event: IEvent): any;
getNonStandardKeys(event: IEvent, excluding?: string[]): any;
isImageBinary(binaryInfo: IEventBinary): boolean;
getCustomFragments(event: IEvent): Record<string, unknown> | null;
arrayBufferToBase64(buffer: ArrayBuffer): string;
private getKeys;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventsService, never>;
static ɵprov: _angular_core.ɵɵInjectableDeclaration<EventsService>;
}
declare class EventsTypeFilterComponent implements OnInit {
optionItems: QueryList<ElementRef>;
/** The latest page of events used to derive available filter types. */
events: _angular_core.InputSignal<IResultList<IEvent>>;
/** Emits the selected {@link EventDetails} when the active filter changes, or `null` when cleared. */
onFilterChanged: _angular_core.OutputEmitterRef<EventDetails>;
possibleFilters: _angular_core.WritableSignal<EventDetails[]>;
activeFilter: _angular_core.WritableSignal<EventDetails>;
customEventTypeInput: _angular_core.WritableSignal<string>;
isCustomEventTypeInputInvalid: _angular_core.Signal<boolean>;
readonly queryParamName = "eventTypeFilter";
/**
* localStorage key storing user-added custom event types.
* Schema: `EventDetails[]` serialised as JSON (only entries where `__target === null`).
*/
readonly STORAGE_ACCESS_KEY = "customEventTypes";
private activatedRoute;
private alarmEventSelectorService;
private colorService;
private destroyRef;
private router;
private currentQueryParam;
constructor();
ngOnInit(): void;
setQueryParameterObservable(): void;
selectEventType(eventType: EventDetails): void;
/** Selects an event type, applies the filter, and closes the dropdown in one action. */
selectAndClose(eventType: EventDetails, dropdown: BsDropdownDirective): void;
deselect(): void;
applyFilterChange(): void;
restoreActiveFilter(): void;
removeCustomEvent(eventDetails: EventDetails): void;
navigateOption(event: KeyboardEvent, step: 1 | -1): void;
confirmWithEnter(event: KeyboardEvent): void;
addCustomEventType(): Promise<void>;
private storeCustomEventTypes;
private getCustomEventTypeFromStorage;
private setPossibleFilters;
private setActiveEventFiltersFromQueryParameter;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventsTypeFilterComponent, never>;
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EventsTypeFilterComponent, "c8y-events-type-filter", never, { "events": { "alias": "events"; "required": false; "isSignal": true; }; }, { "onFilterChanged": "onFilterChanged"; }, never, never, true, never>;
}
interface BuildEventsFilterParams {
source?: string | number | null;
type?: string | null;
dateRange?: DateTimeContext | null;
dateTimeContext?: {
dateFrom?: Date | string | null;
dateTo?: Date | string | null;
} | null;
withSourceChildren?: boolean;
}
declare class EventsViewService {
private eventService;
private dateTimeContextPickerService;
readonly DEFAULT_PAGE_SIZE = 50;
readonly DEFAULT_REFRESH_INTERVAL = 30000;
reloadEventsList$: Subject<void>;
constructor(eventService: EventService, dateTimeContextPickerService: DateTimeContextPickerService);
/**
* Emits a subject to trigger events list reload.
*/
updateEventsList(): void;
/**
* Retrieves a list of events with optional filters.
*/
retrieveEvents(filter?: EventsFilter): Promise<IResultList<IEvent>>;
/**
* Returns the correct link based on the provided context data.
*/
getRouterLink(contextData?: ContextData, event?: IEvent): string;
/**
* Returns the correct from and to dates based on the selected interval
* @param intervalId the selected interval. E.g. 'none', 'hours', 'custom' ...
* @returns The calculated date context based on the selected interval.
*/
buildEventsFilter(params: BuildEventsFilterParams): EventsFilter;
getDateTimeContextByInterval(intervalId: AlarmFilterInterval['id']): DateTimeContext;
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventsViewService, never>;
static ɵprov: _angular_core.ɵɵInjectableDeclaration<EventsViewService>;
}
export { EVENTS_PATH, EVENT_RESERVED_KEYS, EVENT_STANDARD_KEYS, EventDetailsComponent, EventIconPipe, EventIsImagePipe, EventRouterLinkPipe, EventsComponent, EventsDateFilterComponent, EventsIntervalRefreshComponent, EventsListComponent, EventsService, EventsTypeFilterComponent, EventsViewService, INTERVALS_EXTENDED, INTERVAL_TITLES_EXTENDED };
export type { BuildEventsFilterParams, EventListFormFilters, EventNavigationOptions, EventsFilter, WidgetTimeContextStateExtended };
//# sourceMappingURL=index.d.ts.map