@c8y/ngx-components 1023.52.0 → 1023.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injector, Type, TemplateRef, ElementRef, ViewContainerRef, OnInit, OnChanges, OnDestroy, EventEmitter, SimpleChanges, InjectionToken } from '@angular/core';
3
3
  import * as _c8y_client from '@c8y/client';
4
- import { IManagedObject, IAlarm, IEvent } from '@c8y/client';
5
- import { Observable } from 'rxjs';
4
+ import { IManagedObject, IAlarm, IEvent, Paging } from '@c8y/client';
5
+ import { Observable, BehaviorSubject } from 'rxjs';
6
6
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
7
7
  import { CdkTree } from '@angular/cdk/tree';
8
8
  import { DataSource } from '@angular/cdk/collections';
9
9
  import { BottomDrawerRef, GenericHookType, GenericHookOptions, ExtensionPointForPlugins, PluginsResolveService } from '@c8y/ngx-components';
10
10
  import { Router } from '@angular/router';
11
+ import { ControlValueAccessor } from '@angular/forms';
12
+ import { AssetSelectionChangeEvent } from '@c8y/ngx-components/assets-navigator';
11
13
 
12
14
  interface ComputedPropertyContextMap {
13
15
  device: {
@@ -94,9 +96,10 @@ type AssetPropertyListConfig = {
94
96
  * The mode of the asset property list describing how the properties are selected.
95
97
  * - `single` - only one property can be selected at a time
96
98
  * - `multi` - multiple properties can be selected at a time
99
+ * - `plus` - multiple properties can be selected using add/remove buttons
97
100
  * - `none` - no properties can be selected
98
101
  */
99
- selectMode?: 'single' | 'multi' | 'none';
102
+ selectMode?: 'single' | 'multi' | 'plus' | 'none';
100
103
  /**
101
104
  * The mode of the asset property list describing how the properties are expanded.
102
105
  * - `expandedByDefault` - all properties are expanded by default and collapse button is shown
@@ -141,7 +144,6 @@ type AssetPropertyListConfig = {
141
144
  allowDragAndDrop?: boolean;
142
145
  /**
143
146
  * Tabs to hide in the custom properties drawer.
144
- * At most one tab can be hidden at a time.
145
147
  */
146
148
  hiddenTabs?: HiddenTabs;
147
149
  };
@@ -215,14 +217,9 @@ interface NestedPropertyFields extends BaseProperty {
215
217
  }
216
218
  type AssetPropertyType = BaseProperty | NestedPropertyFields;
217
219
  type HiddenTabs = {
218
- regular: true;
219
- computed?: false;
220
- } | {
221
- computed: true;
222
- regular?: false;
223
- } | {
224
- regular?: false;
225
- computed?: false;
220
+ regular?: boolean;
221
+ computed?: boolean;
222
+ asset?: boolean;
226
223
  };
227
224
  type AssetPropertyTab = keyof Required<HiddenTabs>;
228
225
 
@@ -537,13 +534,13 @@ declare class AssetPropertyListComponent implements OnInit, OnChanges, OnDestroy
537
534
  * @param selected True if the node is selected.
538
535
  * @param node The node to select.
539
536
  */
540
- onSelectSingle(selected: boolean, node: AssetPropertyFlatNode): void;
537
+ onSelectSingle(selected: boolean, node: AssetPropertyFlatNode, emit?: boolean): void;
541
538
  /**
542
539
  * Handles multi-selection mode.
543
540
  * @param selected True if the node is selected.
544
541
  * @param node The node to select.
545
542
  */
546
- onSelectMulti(selected: boolean, node: AssetPropertyFlatNode): void;
543
+ onSelectMulti(selected: boolean, node: AssetPropertyFlatNode, emit?: boolean): void;
547
544
  /**
548
545
  * Initiates a filter operation.
549
546
  */
@@ -653,6 +650,7 @@ declare class AssetPropertyListComponent implements OnInit, OnChanges, OnDestroy
653
650
 
654
651
  /**
655
652
  * Represents a drawer component for selecting asset properties.
653
+ * This is a thin wrapper around AssetPropertySelectorComponent that handles drawer-specific logic.
656
654
  */
657
655
  declare class AssetPropertySelectorDrawerComponent {
658
656
  /**
@@ -662,7 +660,7 @@ declare class AssetPropertySelectorDrawerComponent {
662
660
  /**
663
661
  * Managed object representing the asset.
664
662
  */
665
- asset: IManagedObject;
663
+ contextAsset: IManagedObject;
666
664
  /**
667
665
  * Configuration for the asset property list.
668
666
  */
@@ -672,17 +670,25 @@ declare class AssetPropertySelectorDrawerComponent {
672
670
  */
673
671
  extraProperties: AssetPropertyType[];
674
672
  /**
675
- * Emits the selected properties when saved.
673
+ * List of selected properties.
676
674
  */
677
- savePropertySelection: EventEmitter<AssetPropertyType[]>;
675
+ selectedProperties: AssetPropertyType[];
678
676
  /**
679
- * Emits an event when the selection is canceled.
677
+ * Flag to allow changing the context (asset) within the drawer.
680
678
  */
681
- cancelPropertySelection: EventEmitter<void>;
679
+ allowChangingContext: boolean;
682
680
  /**
683
- * List of selected properties.
681
+ * Flag to hide the selection
682
+ * */
683
+ hideSelection: boolean;
684
+ /**
685
+ * Flag to allow selecting properties from multiple assets (if context change is allowed).
684
686
  */
685
- selectedProperties: AssetPropertyType[];
687
+ allowPropertiesFromMultipleAssets: boolean;
688
+ /**
689
+ * Flag to enable search functionality for asset properties.
690
+ */
691
+ allowSearch: boolean;
686
692
  /**
687
693
  * Reference to the bottom drawer.
688
694
  */
@@ -699,11 +705,12 @@ declare class AssetPropertySelectorDrawerComponent {
699
705
  * Internal cancel handler.
700
706
  */
701
707
  private _cancel;
708
+ ngOnInit(): void;
702
709
  /**
703
- * Updates the selected properties.
704
- * @param properties The selected properties.
710
+ * Handles selection changes from the selector component.
711
+ * @param selection The selected properties.
705
712
  */
706
- onSelectedProperties(properties: AssetPropertyType[]): void;
713
+ selectionChange(selection: AssetPropertyType[]): void;
707
714
  /**
708
715
  * Saves the selected properties and closes the drawer.
709
716
  */
@@ -714,11 +721,11 @@ declare class AssetPropertySelectorDrawerComponent {
714
721
  onCancel(): void;
715
722
  /**
716
723
  * Checks if the select button should be disabled.
717
- * @returns True if all selected properties are inactive.
724
+ * @returns True if no active properties are selected.
718
725
  */
719
726
  selectIsDisabled(): boolean;
720
727
  static ɵfac: i0.ɵɵFactoryDeclaration<AssetPropertySelectorDrawerComponent, never>;
721
- static ɵcmp: i0.ɵɵComponentDeclaration<AssetPropertySelectorDrawerComponent, "c8y-asset-property-selector-drawer-component", never, { "title": { "alias": "title"; "required": false; }; }, { "savePropertySelection": "savePropertySelection"; "cancelPropertySelection": "cancelPropertySelection"; }, never, never, true, never>;
728
+ static ɵcmp: i0.ɵɵComponentDeclaration<AssetPropertySelectorDrawerComponent, "c8y-asset-property-selector-drawer-component", never, { "title": { "alias": "title"; "required": false; }; }, {}, never, never, true, never>;
722
729
  }
723
730
 
724
731
  declare const HOOK_COMPUTED_PROPERTY: InjectionToken<ComputedPropertyDefinition[]>;
@@ -742,6 +749,218 @@ declare class ComputedPropertiesService extends ExtensionPointForPlugins<Compute
742
749
  static ɵprov: i0.ɵɵInjectableDeclaration<ComputedPropertiesService>;
743
750
  }
744
751
 
745
- export { AssetPropertiesService, AssetPropertyActionDirective, AssetPropertyListComponent, AssetPropertySelectorDrawerComponent, ComputedPropertiesService, CustomPropertiesDrawerService, HOOK_COMPUTED_PROPERTY, RESULT_TYPES, defaultAssetProperties, defaultAssetPropertyListConfig, hookComputedProperty };
752
+ /**
753
+ * Represents a reusable component for displaying and managing library properties (regular and computed).
754
+ * This component handles the search, tabs, and property list display logic.
755
+ */
756
+ declare class AssetPropertyTabsComponent implements OnInit, OnChanges, OnDestroy {
757
+ /**
758
+ * The asset context for loading properties.
759
+ */
760
+ asset: IManagedObject;
761
+ /**
762
+ * Configuration for the asset property list.
763
+ */
764
+ config: AssetPropertyListConfig;
765
+ /**
766
+ * Currently selected properties to be highlighted in the list.
767
+ */
768
+ selectedProperties: AssetPropertyType[];
769
+ /**
770
+ * Controls which tabs are hidden.
771
+ */
772
+ hiddenTabs: HiddenTabs;
773
+ /**
774
+ * The name of the tabs outlet.
775
+ */
776
+ tabsOutletName: string;
777
+ /**
778
+ * Whether to show the search input.
779
+ */
780
+ showSearch: boolean;
781
+ /**
782
+ * Emits when the selected properties change.
783
+ */
784
+ selectedPropertiesChange: EventEmitter<AssetPropertyType[]>;
785
+ tabNames: Record<AssetPropertyTab, string>;
786
+ paging: Paging<IManagedObject>;
787
+ inputText: string;
788
+ selectedTab: AssetPropertyTab;
789
+ assetProperties: AssetPropertyType[];
790
+ regularProperties: AssetPropertyType[];
791
+ computedProperties: AssetPropertyType[];
792
+ displayedProperties: AssetPropertyType[];
793
+ assetCount: number;
794
+ regularCount: number;
795
+ computedCount: number;
796
+ allComputedProperties: AssetPropertyType[];
797
+ get showAsset(): boolean;
798
+ get showRegular(): boolean;
799
+ get showComputed(): boolean;
800
+ get showTabBar(): boolean;
801
+ private searchSubject$;
802
+ private destroy$;
803
+ private readonly assetPropertiesService;
804
+ private readonly computedPropertiesService;
805
+ private selectedAssetProperties;
806
+ private selectedRegularProperties;
807
+ private selectedComputedProperties;
808
+ ngOnInit(): Promise<void>;
809
+ ngOnChanges(changes: SimpleChanges): Promise<void>;
810
+ ngOnDestroy(): void;
811
+ /**
812
+ * Updates the selected properties.
813
+ * @param properties The selected properties.
814
+ */
815
+ onSelectedProperties(properties: AssetPropertyType[]): void;
816
+ onTabChange(tabName: keyof typeof this.tabNames): void;
817
+ onSearch(): void;
818
+ clearSearch(): void;
819
+ loadMore(): Promise<void>;
820
+ private loadComputedProperties;
821
+ private loadAssetProperties;
822
+ private updateProperties;
823
+ private updateDisplayedProperties;
824
+ /**
825
+ * Updates the config to show only the current tab's selected properties.
826
+ */
827
+ private updateConfigWithCurrentTabSelections;
828
+ /**
829
+ * Categorizes incoming selectedProperties by matching them against loaded properties.
830
+ */
831
+ private categorizeSelectedProperties;
832
+ /**
833
+ * Categorizes and flattens hierarchical properties.
834
+ * @param properties The properties to categorize.
835
+ * @returns The flattened list of properties.
836
+ */
837
+ private categorizeAndFlattenHierarchicalProperties;
838
+ static ɵfac: i0.ɵɵFactoryDeclaration<AssetPropertyTabsComponent, never>;
839
+ static ɵcmp: i0.ɵɵComponentDeclaration<AssetPropertyTabsComponent, "c8y-asset-property-tabs", never, { "asset": { "alias": "asset"; "required": false; }; "config": { "alias": "config"; "required": false; }; "selectedProperties": { "alias": "selectedProperties"; "required": false; }; "hiddenTabs": { "alias": "hiddenTabs"; "required": false; }; "tabsOutletName": { "alias": "tabsOutletName"; "required": false; }; "showSearch": { "alias": "showSearch"; "required": false; }; }, { "selectedPropertiesChange": "selectedPropertiesChange"; }, never, never, true, never>;
840
+ }
841
+
842
+ /**
843
+ * Represents a component for selecting asset properties.
844
+ * This component handles all selection logic and can be used standalone or within drawer/modal wrappers.
845
+ */
846
+ declare class AssetPropertySelectorComponent implements OnInit, ControlValueAccessor {
847
+ /**
848
+ * Managed object representing the initial/context asset.
849
+ */
850
+ contextAsset: IManagedObject;
851
+ /**
852
+ * Configuration for the asset property list.
853
+ */
854
+ config: AssetPropertyListConfig;
855
+ /**
856
+ * Extra properties to be displayed in the list.
857
+ */
858
+ extraProperties: AssetPropertyType[];
859
+ /**
860
+ * Flag to allow changing the context (asset) within the selector.
861
+ */
862
+ allowChangingContext: boolean;
863
+ /**
864
+ * Flag to allow properties from multiple assets to be selected at once.
865
+ */
866
+ allowPropertiesFromMultipleAssets: boolean;
867
+ /**
868
+ * Flag to hide the selection panel.
869
+ */
870
+ hideSelection: boolean;
871
+ /**
872
+ * Flag to allow search in asset selector.
873
+ */
874
+ allowSearch: boolean;
875
+ /**
876
+ * List of selected properties.
877
+ */
878
+ selectedProperties: AssetPropertyType[];
879
+ /**
880
+ * Current asset selection as observable.
881
+ */
882
+ assetSelection: BehaviorSubject<IManagedObject>;
883
+ hiddenTabs: HiddenTabs;
884
+ private touched;
885
+ private onChange;
886
+ private onTouched;
887
+ private modalService;
888
+ private computedPropertiesService;
889
+ private assetPropertiesService;
890
+ ngOnInit(): void;
891
+ /**
892
+ * ControlValueAccessor implementation - write value from form model.
893
+ */
894
+ writeValue(obj: AssetPropertyType[]): void;
895
+ /**
896
+ * ControlValueAccessor implementation - register onChange callback.
897
+ */
898
+ registerOnChange(fn: (properties: AssetPropertyType[]) => void): void;
899
+ /**
900
+ * ControlValueAccessor implementation - register onTouched callback.
901
+ */
902
+ registerOnTouched(fn: () => void): void;
903
+ /**
904
+ * Updates the selected properties.
905
+ * @param properties The selected properties.
906
+ */
907
+ onSelectedProperties(properties: AssetPropertyType[]): Promise<void>;
908
+ /**
909
+ * Handles asset selection changes.
910
+ * @param evt Asset selection change event.
911
+ */
912
+ selectionChanged(evt: AssetSelectionChangeEvent): void;
913
+ /**
914
+ * Removes a property from the selection.
915
+ * @param property The property to remove.
916
+ */
917
+ propertyRemoved(property: AssetPropertyType): void;
918
+ /**
919
+ * Edits (reconfigures) a computed property.
920
+ * @param property The property to edit.
921
+ */
922
+ editProperty(property: AssetPropertyType): Promise<void>;
923
+ /**
924
+ * Selects an asset and updates the selection.
925
+ * @param asset The asset to select.
926
+ */
927
+ private selectAsset;
928
+ /**
929
+ * Clears all selected properties.
930
+ */
931
+ private clearSelection;
932
+ /**
933
+ * Emits the current selection to the form model.
934
+ */
935
+ private emitCurrentSelection;
936
+ /**
937
+ * Marks the control as touched.
938
+ */
939
+ private markAsTouched;
940
+ /**
941
+ * Handles configuration for newly added computed properties.
942
+ * @param properties The selected properties.
943
+ * @returns The properties with configured ones included.
944
+ */
945
+ private handleComputedPropertiesConfiguration;
946
+ /**
947
+ * Displays the configuration modal for multiple computed properties and updates their configurations.
948
+ * @param properties Properties to configure.
949
+ * @param definitions Computed property definitions including config components.
950
+ * @returns Promise resolving to array of configurations.
951
+ */
952
+ private configureMultipleProperties;
953
+ /**
954
+ * Displays the configuration modal for a single computed property and updates its configuration.
955
+ * @param property Property to configure.
956
+ * @param definition Computed property definition including config component.
957
+ * @returns true if the property was configured, false if cancelled.
958
+ */
959
+ private configureProperty;
960
+ static ɵfac: i0.ɵɵFactoryDeclaration<AssetPropertySelectorComponent, never>;
961
+ static ɵcmp: i0.ɵɵComponentDeclaration<AssetPropertySelectorComponent, "c8y-asset-property-selector", never, { "contextAsset": { "alias": "contextAsset"; "required": false; }; "config": { "alias": "config"; "required": false; }; "extraProperties": { "alias": "extraProperties"; "required": false; }; "allowChangingContext": { "alias": "allowChangingContext"; "required": false; }; "allowPropertiesFromMultipleAssets": { "alias": "allowPropertiesFromMultipleAssets"; "required": false; }; "hideSelection": { "alias": "hideSelection"; "required": false; }; "allowSearch": { "alias": "allowSearch"; "required": false; }; }, {}, never, never, true, never>;
962
+ }
963
+
964
+ export { AssetPropertiesService, AssetPropertyActionDirective, AssetPropertyListComponent, AssetPropertySelectorComponent, AssetPropertySelectorDrawerComponent, AssetPropertyTabsComponent, ComputedPropertiesService, CustomPropertiesDrawerService, HOOK_COMPUTED_PROPERTY, RESULT_TYPES, defaultAssetProperties, defaultAssetPropertyListConfig, hookComputedProperty };
746
965
  export type { AssetPropertyListConfig, AssetPropertyTab, AssetPropertyType, BaseProperty, C8yJsonSchema, C8yJsonSchemaProperty, C8yPropertyType, ComputedPropertyComponent, ComputedPropertyContextType, ComputedPropertyContextValue, ComputedPropertyDefinition, HiddenTabs, NestedPropertyFields, ValueCallbackMetadata };
747
966
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../asset-properties/asset-properties.model.ts","../../asset-properties/asset-properties.service.ts","../../asset-properties/custom-properties-drawer.service.ts","../../asset-properties/asset-property-list/tree-data-source.ts","../../asset-properties/asset-property-list/asset-property-action.directive.ts","../../asset-properties/asset-property-list/asset-property-list.component.ts","../../asset-properties/asset-property-selector-drawer/asset-property-selector-drawer.component.ts","../../asset-properties/computed-properties.service.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../asset-properties/asset-properties.model.ts","../../asset-properties/asset-properties.service.ts","../../asset-properties/custom-properties-drawer.service.ts","../../asset-properties/asset-property-list/tree-data-source.ts","../../asset-properties/asset-property-list/asset-property-action.directive.ts","../../asset-properties/asset-property-list/asset-property-list.component.ts","../../asset-properties/asset-property-selector-drawer/asset-property-selector-drawer.component.ts","../../asset-properties/computed-properties.service.ts","../../asset-properties/asset-property-tabs/asset-property-tabs.component.ts","../../asset-properties/asset-property-selector/asset-property-selector.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}