@c8y/tutorial 1019.0.3

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.
Files changed (345) hide show
  1. package/.browserslistrc +16 -0
  2. package/NOTICES +41743 -0
  3. package/cumulocity.config.ts +643 -0
  4. package/package.json +22 -0
  5. package/src/__mocks/README.md +73 -0
  6. package/src/__mocks/global-mocks/inventory.interceptor.ts +145 -0
  7. package/src/__mocks/global-mocks/measurements.interceptor.ts +58 -0
  8. package/src/__mocks/index.ts +5 -0
  9. package/src/__mocks/mock.model.ts +76 -0
  10. package/src/__mocks/mock.module.ts +121 -0
  11. package/src/__mocks/mock.realtime-subject.ts +68 -0
  12. package/src/__mocks/mock.realtime.ts +31 -0
  13. package/src/__mocks/mock.service.ts +113 -0
  14. package/src/__mocks/scoped-mocks/boilerplate.ts +54 -0
  15. package/src/__mocks/scoped-mocks/context-dashboard.ts +47 -0
  16. package/src/__mocks/scoped-mocks/device-data-grid.ts +44 -0
  17. package/src/__mocks/scoped-mocks/named-context-dashboard.ts +42 -0
  18. package/src/__mocks/scoped-mocks/server-side-data-grid.ts +47 -0
  19. package/src/__mocks/scoped-mocks/service-dashboard.ts +42 -0
  20. package/src/__mocks/utils/clean.realtime.ts +23 -0
  21. package/src/__mocks/utils/common.ts +114 -0
  22. package/src/__mocks/utils/generators/alarms.ts +30 -0
  23. package/src/__mocks/utils/generators/events.ts +14 -0
  24. package/src/__mocks/utils/generators/managedObjects.ts +208 -0
  25. package/src/__mocks/utils/generators/measurement.ts +22 -0
  26. package/src/__mocks/utils/generators/operations.ts +67 -0
  27. package/src/__mocks/utils/grid.ts +87 -0
  28. package/src/__mocks/utils/realtime.ts +59 -0
  29. package/src/alert/alert-example.components.html +110 -0
  30. package/src/alert/alert-example.components.ts +77 -0
  31. package/src/alert/alert-example.module.ts +21 -0
  32. package/src/app/app.module.ts +72 -0
  33. package/src/bootstrap.ts +19 -0
  34. package/src/branding/branding.less +78 -0
  35. package/src/client-interceptor/client-interceptor.module.ts +12 -0
  36. package/src/client-interceptor/client-interceptor.service.ts +61 -0
  37. package/src/client-interceptor/index.ts +1 -0
  38. package/src/component-styles/cascading-style-sheets-example/cascading-style-sheets-example.component.css +17 -0
  39. package/src/component-styles/cascading-style-sheets-example/cascading-style-sheets-example.component.ts +11 -0
  40. package/src/component-styles/cascading-style-sheets-example/cascading-style-sheets-example.module.ts +26 -0
  41. package/src/component-styles/leaner-style-sheets-example/leaner-style-sheets-example.component.less +14 -0
  42. package/src/component-styles/leaner-style-sheets-example/leaner-style-sheets-example.component.ts +11 -0
  43. package/src/component-styles/leaner-style-sheets-example/leaner-style-sheets-example.module.ts +26 -0
  44. package/src/component-styles/syntactically-awesome-style-sheets-example/syntactically-awesome-style-sheets-example.component.scss +13 -0
  45. package/src/component-styles/syntactically-awesome-style-sheets-example/syntactically-awesome-style-sheets-example.component.ts +11 -0
  46. package/src/component-styles/syntactically-awesome-style-sheets-example/syntactically-awesome-style-sheets-example.module.ts +26 -0
  47. package/src/dashboard/context-dashboard/context-dashboard.component.ts +32 -0
  48. package/src/dashboard/context-dashboard/context-dashboard.module.ts +22 -0
  49. package/src/dashboard/custom-dashboard/custom-dashboard.component.html +180 -0
  50. package/src/dashboard/custom-dashboard/custom-dashboard.component.ts +52 -0
  51. package/src/dashboard/custom-dashboard/custom-dashboard.module.ts +22 -0
  52. package/src/dashboard/index.ts +4 -0
  53. package/src/dashboard/named-context-dashboard/named-context-dashboard.component.ts +51 -0
  54. package/src/dashboard/named-context-dashboard/named-context-dashboard.module.ts +37 -0
  55. package/src/dashboard/service-dashboard/service-dashboard.component.ts +51 -0
  56. package/src/dashboard/service-dashboard/service-dashboard.module.ts +35 -0
  57. package/src/dashboard/widget-dashboard/widget-dashboard.component.ts +65 -0
  58. package/src/dashboard/widget-dashboard/widget-dashboard.module.ts +22 -0
  59. package/src/date-time-range/date-time-range-example.component.ts +109 -0
  60. package/src/date-time-range/date-time-range-example.module.ts +21 -0
  61. package/src/dynamic-forms/custom-element-example/custom-element-example.component.ts +70 -0
  62. package/src/dynamic-forms/custom-element-example/custom-element-example.module.ts +38 -0
  63. package/src/dynamic-forms/custom-element-example/types/checkbox/checkbox.type.component.html +26 -0
  64. package/src/dynamic-forms/custom-element-example/types/checkbox/checkbox.type.component.ts +21 -0
  65. package/src/dynamic-forms/dynamic-forms.module.ts +16 -0
  66. package/src/dynamic-forms/index.ts +2 -0
  67. package/src/dynamic-forms/introduction-example/introduction-example.component.ts +116 -0
  68. package/src/dynamic-forms/introduction-example/introduction-example.module.ts +24 -0
  69. package/src/dynamic-forms/json-schema-example/json-schema-example.component.html +33 -0
  70. package/src/dynamic-forms/json-schema-example/json-schema-example.component.ts +102 -0
  71. package/src/dynamic-forms/json-schema-example/json-schema-example.module.ts +24 -0
  72. package/src/for-of-directive/for-of-example.component.html +19 -0
  73. package/src/for-of-directive/for-of-example.component.ts +39 -0
  74. package/src/for-of-directive/for-of.module.ts +18 -0
  75. package/src/forms/form-validation/forms-validation.component.html +105 -0
  76. package/src/forms/form-validation/forms-validation.component.ts +52 -0
  77. package/src/forms/form-validation/forms.module.ts +22 -0
  78. package/src/forms/index.ts +1 -0
  79. package/src/grids/client-grid-example/client-grid-example.component.html +16 -0
  80. package/src/grids/client-grid-example/client-grid-example.component.ts +166 -0
  81. package/src/grids/client-grid-example/client-grid-example.module.ts +24 -0
  82. package/src/grids/client-grid-example/data.ts +427 -0
  83. package/src/grids/device-grid-example/device-grid-example.component.html +58 -0
  84. package/src/grids/device-grid-example/device-grid-example.component.ts +134 -0
  85. package/src/grids/device-grid-example/device-grid-example.module.ts +24 -0
  86. package/src/grids/grids-tabs.ts +37 -0
  87. package/src/grids/grids.module.ts +17 -0
  88. package/src/grids/index.ts +1 -0
  89. package/src/grids/server-grid-example/server-grid-example.component.html +26 -0
  90. package/src/grids/server-grid-example/server-grid-example.component.ts +121 -0
  91. package/src/grids/server-grid-example/server-grid-example.module.ts +24 -0
  92. package/src/grids/server-grid-example/server-grid-example.service.ts +266 -0
  93. package/src/grids/server-grid-example/type-data-grid-column/type.cell-renderer.component.ts +31 -0
  94. package/src/grids/server-grid-example/type-data-grid-column/type.data-grid-column.ts +47 -0
  95. package/src/grids/server-grid-example/type-data-grid-column/type.filtering-form-renderer.component.ts +107 -0
  96. package/src/grids/server-grid-example/type-data-grid-column/type.header-cell-renderer.component.ts +20 -0
  97. package/src/hello/hello.component.ts +55 -0
  98. package/src/hello/hello.module.ts +20 -0
  99. package/src/hello/index.ts +1 -0
  100. package/src/help/help-example.component.ts +23 -0
  101. package/src/help/help-example.module.ts +20 -0
  102. package/src/hooks/action/action.module.ts +34 -0
  103. package/src/hooks/action/action.ts +41 -0
  104. package/src/hooks/action/basic-view/basic-view.component.html +8 -0
  105. package/src/hooks/action/basic-view/basic-view.component.ts +18 -0
  106. package/src/hooks/action/index.ts +1 -0
  107. package/src/hooks/action/logout-action/logout-action.component.ts +18 -0
  108. package/src/hooks/action-bar/action-bar.module.ts +34 -0
  109. package/src/hooks/action-bar/action-bar.ts +28 -0
  110. package/src/hooks/action-bar/basic-view/basic-view.component.html +8 -0
  111. package/src/hooks/action-bar/basic-view/basic-view.component.ts +18 -0
  112. package/src/hooks/action-bar/index.ts +1 -0
  113. package/src/hooks/action-bar/refresh-element/refresh-element.component.html +15 -0
  114. package/src/hooks/action-bar/refresh-element/refresh-element.component.ts +21 -0
  115. package/src/hooks/breadcrumbs/basic-view/basic-view.component.html +7 -0
  116. package/src/hooks/breadcrumbs/basic-view/basic-view.component.ts +18 -0
  117. package/src/hooks/breadcrumbs/breadcrumbs.module.ts +34 -0
  118. package/src/hooks/breadcrumbs/breadcrumbs.ts +93 -0
  119. package/src/hooks/breadcrumbs/index.ts +1 -0
  120. package/src/hooks/component/basic-view/basic-view.component.html +11 -0
  121. package/src/hooks/component/basic-view/basic-view.component.ts +16 -0
  122. package/src/hooks/component/basic-view/simple.component.ts +8 -0
  123. package/src/hooks/component/component.module.ts +38 -0
  124. package/src/hooks/component/index.ts +1 -0
  125. package/src/hooks/drawer/index.ts +2 -0
  126. package/src/hooks/drawer/left-drawer-tutorial/left-drawer-tutorial.component.ts +8 -0
  127. package/src/hooks/drawer/left-drawer-tutorial/left-drawer.module.ts +10 -0
  128. package/src/hooks/drawer/right-drawer-tutorial/right-drawer-tutorial.component.ts +8 -0
  129. package/src/hooks/drawer/right-drawer-tutorial/right-drawer.module.ts +10 -0
  130. package/src/hooks/generic-wizard/index.ts +1 -0
  131. package/src/hooks/generic-wizard/minimal-setup/minimal-setup.component.ts +12 -0
  132. package/src/hooks/generic-wizard/minimal-setup/multiple-entries-one.component.ts +25 -0
  133. package/src/hooks/generic-wizard/minimal-setup/multiple-entries-two.component.ts +25 -0
  134. package/src/hooks/generic-wizard/minimal-setup/stepper-example.component.html +38 -0
  135. package/src/hooks/generic-wizard/minimal-setup/stepper-example.component.ts +33 -0
  136. package/src/hooks/generic-wizard/wizard-tabs.ts +22 -0
  137. package/src/hooks/generic-wizard/wizard.component.html +51 -0
  138. package/src/hooks/generic-wizard/wizard.component.ts +86 -0
  139. package/src/hooks/generic-wizard/wizard.module.ts +79 -0
  140. package/src/hooks/hooks.module.ts +19 -0
  141. package/src/hooks/index.ts +1 -0
  142. package/src/hooks/navigator/index.ts +1 -0
  143. package/src/hooks/navigator/navigator.module.ts +21 -0
  144. package/src/hooks/navigator/navigator.ts +35 -0
  145. package/src/hooks/navigator/time-navigator-node/time-navigator-node.component.ts +19 -0
  146. package/src/hooks/navigator-route/basic-view/basic-view.component.html +7 -0
  147. package/src/hooks/navigator-route/basic-view/basic-view.component.ts +18 -0
  148. package/src/hooks/navigator-route/index.ts +1 -0
  149. package/src/hooks/navigator-route/navigator-route.module.ts +27 -0
  150. package/src/hooks/route/device/device-info.component.html +2 -0
  151. package/src/hooks/route/device/device-info.component.ts +13 -0
  152. package/src/hooks/route/device/device-tab-context.component.html +15 -0
  153. package/src/hooks/route/device/device-tab-context.component.ts +13 -0
  154. package/src/hooks/route/index.ts +1 -0
  155. package/src/hooks/route/random.guard.ts +12 -0
  156. package/src/hooks/route/route.module.ts +51 -0
  157. package/src/hooks/state/hook-state.module.ts +25 -0
  158. package/src/hooks/state/hook-with-service-example.component.html +29 -0
  159. package/src/hooks/state/hook-with-service-example.component.ts +36 -0
  160. package/src/hooks/stepper/basic-view/basic-view.component.html +17 -0
  161. package/src/hooks/stepper/basic-view/basic-view.component.ts +31 -0
  162. package/src/hooks/stepper/index.ts +4 -0
  163. package/src/hooks/stepper/stepper-hook.module.ts +53 -0
  164. package/src/hooks/stepper/steps/step1.component.html +24 -0
  165. package/src/hooks/stepper/steps/step1.component.ts +18 -0
  166. package/src/hooks/stepper/steps/step2.component.html +7 -0
  167. package/src/hooks/stepper/steps/step2.component.ts +11 -0
  168. package/src/hooks/tabs/awesome/awesome.component.html +7 -0
  169. package/src/hooks/tabs/awesome/awesome.component.ts +21 -0
  170. package/src/hooks/tabs/index.ts +1 -0
  171. package/src/hooks/tabs/outstanding/outstanding.component.html +22 -0
  172. package/src/hooks/tabs/outstanding/outstanding.component.ts +27 -0
  173. package/src/hooks/tabs/tab.ts +44 -0
  174. package/src/hooks/tabs/tabs.module.ts +37 -0
  175. package/src/hooks/version/custom-version-factory.service.ts +49 -0
  176. package/src/hooks/version/index.ts +1 -0
  177. package/src/hooks/version/version.module.ts +11 -0
  178. package/src/i18n.ts +18 -0
  179. package/src/input/range-input-example.component.ts +29 -0
  180. package/src/input/range-input-example.module.ts +19 -0
  181. package/src/lazy/component-one.component.ts +28 -0
  182. package/src/lazy/component-two.component.ts +17 -0
  183. package/src/lazy/index.ts +1 -0
  184. package/src/lazy/lazy-loaded.module.ts +21 -0
  185. package/src/lazy/lazy-routing.module.ts +21 -0
  186. package/src/lazy/lazy.hooks.ts +24 -0
  187. package/src/lazy-widget/index.ts +1 -0
  188. package/src/lazy-widget/lazy-widget-config/index.ts +1 -0
  189. package/src/lazy-widget/lazy-widget-config/lazy-widget-config.component.ts +10 -0
  190. package/src/lazy-widget/lazy-widget-view/index.ts +1 -0
  191. package/src/lazy-widget/lazy-widget-view/lazy-widget-view.component.ts +10 -0
  192. package/src/lazy-widget/lazy-widget.module.ts +27 -0
  193. package/src/list/index.ts +1 -0
  194. package/src/list/list/list-check/list-check.component.html +35 -0
  195. package/src/list/list/list-check/list-check.component.ts +47 -0
  196. package/src/list/list/list-check/list-check.module.ts +21 -0
  197. package/src/list/list/list-timeline/list-timeline.component.html +30 -0
  198. package/src/list/list/list-timeline/list-timeline.component.ts +46 -0
  199. package/src/list/list/list-timeline/list-timeline.module.ts +21 -0
  200. package/src/list/list-virtual-scroll/list-virtual-scroll-check/list-virtual-scroll-check.component.html +105 -0
  201. package/src/list/list-virtual-scroll/list-virtual-scroll-check/list-virtual-scroll-check.component.ts +70 -0
  202. package/src/list/list-virtual-scroll/list-virtual-scroll-check/list-virtual-scroll-check.module.ts +22 -0
  203. package/src/list/list-virtual-scroll/list-virtual-scroll-timeline/list-virtual-scroll-timeline.component.html +37 -0
  204. package/src/list/list-virtual-scroll/list-virtual-scroll-timeline/list-virtual-scroll-timeline.component.ts +69 -0
  205. package/src/list/list-virtual-scroll/list-virtual-scroll-timeline/list-virtual-scroll-timeline.module.ts +24 -0
  206. package/src/list/lists.module.ts +17 -0
  207. package/src/main.ts +23 -0
  208. package/src/maps/cluster-map/cluster-map-example.component.html +60 -0
  209. package/src/maps/cluster-map/cluster-map-example.component.ts +39 -0
  210. package/src/maps/cluster-map/cluster-map-example.module.ts +24 -0
  211. package/src/maps/cluster-map-root-node/cluster-map-root-node-example.component.html +54 -0
  212. package/src/maps/cluster-map-root-node/cluster-map-root-node-example.component.ts +54 -0
  213. package/src/maps/cluster-map-root-node/cluster-map-root-node-example.module.ts +26 -0
  214. package/src/maps/map-examples.module.ts +18 -0
  215. package/src/maps/map-popup/map-popup-example.component.html +34 -0
  216. package/src/maps/map-popup/map-popup-example.component.ts +43 -0
  217. package/src/maps/map-popup/map-popup-example.module.ts +24 -0
  218. package/src/maps/simple-map/simple-map-example.component.html +59 -0
  219. package/src/maps/simple-map/simple-map-example.component.ts +70 -0
  220. package/src/maps/simple-map/simple-map-example.module.ts +24 -0
  221. package/src/modal/confirm-modal/confirm-modal-example.component.ts +69 -0
  222. package/src/modal/confirm-modal/confirm-modal-example.module.ts +22 -0
  223. package/src/modal/ngx-modal/ngx-modal-example.component.ts +34 -0
  224. package/src/modal/ngx-modal/ngx-modal-example.module.ts +22 -0
  225. package/src/modal/simple-modal/modal-example.component.ts +34 -0
  226. package/src/modal/simple-modal/modal.example.module.ts +21 -0
  227. package/src/polyfills.ts +33 -0
  228. package/src/popconfirm/pop-confirm-example.component.ts +61 -0
  229. package/src/popconfirm/pop-confirm-example.module.ts +23 -0
  230. package/src/properties-list/properties-list-example.component.ts +49 -0
  231. package/src/properties-list/properties-list-example.module.ts +21 -0
  232. package/src/provider-configuration/index.ts +3 -0
  233. package/src/provider-configuration/introduction-example/introduction.component.ts +69 -0
  234. package/src/provider-configuration/introduction-example/introduction.module.ts +21 -0
  235. package/src/provider-configuration/provider-configuration-example/demo-provider.guard.ts +9 -0
  236. package/src/provider-configuration/provider-configuration-example/provider-configuration.module.ts +48 -0
  237. package/src/quick-link/quick-link-example.component.ts +39 -0
  238. package/src/quick-link/quick-link-example.module.ts +23 -0
  239. package/src/realtime/index.ts +1 -0
  240. package/src/realtime/realtime-tutorial.component.html +52 -0
  241. package/src/realtime/realtime-tutorial.component.ts +91 -0
  242. package/src/realtime/realtime-tutorial.module.ts +21 -0
  243. package/src/redirect-to-last-route/index.ts +1 -0
  244. package/src/redirect-to-last-route/redirect-to-last-route-guard.service.ts +16 -0
  245. package/src/redirect-to-last-route/redirect-to-last-route.module.ts +20 -0
  246. package/src/redirect-to-last-route/view-context-redirect.service.ts +53 -0
  247. package/src/selector/asset-selector-example/child-devices/asset-selector-child-devices.component.ts +49 -0
  248. package/src/selector/asset-selector-example/child-devices/asset-selector-child-devices.module.ts +24 -0
  249. package/src/selector/asset-selector-example/column-header/asset-selector-column-header.component.ts +46 -0
  250. package/src/selector/asset-selector-example/column-header/asset-selector-column-header.module.ts +24 -0
  251. package/src/selector/asset-selector-example/different-root/asset-selector-different-root.component.ts +87 -0
  252. package/src/selector/asset-selector-example/different-root/asset-selector-different-root.module.ts +24 -0
  253. package/src/selector/asset-selector-example/general-example/asset-selector-example.component.html +342 -0
  254. package/src/selector/asset-selector-example/general-example/asset-selector-example.component.ts +34 -0
  255. package/src/selector/asset-selector-example/general-example/asset-selector-example.module.ts +22 -0
  256. package/src/selector/asset-selector-example/global-search/asset-selector-global-search.component.ts +50 -0
  257. package/src/selector/asset-selector-example/global-search/asset-selector-global-search.module.ts +24 -0
  258. package/src/selector/asset-selector-example/miller-columns-options/asset-selector-miller-example.component.ts +85 -0
  259. package/src/selector/asset-selector-example/miller-columns-options/asset-selector-miller-example.module.ts +26 -0
  260. package/src/selector/asset-selector-example/multi-select/asset-selector-multi-select.component.ts +50 -0
  261. package/src/selector/asset-selector-example/multi-select/asset-selector-multi-select.module.ts +24 -0
  262. package/src/selector/asset-selector-example/only-devices/asset-selector-only-devices.component.ts +44 -0
  263. package/src/selector/asset-selector-example/only-devices/asset-selector-only-devices.module.ts +24 -0
  264. package/src/selector/asset-selector-example/single-search/asset-selector-single-search.component.ts +71 -0
  265. package/src/selector/asset-selector-example/single-search/asset-selector-single-search.module.ts +24 -0
  266. package/src/selector/asset-selector-example/single-select/asset-selector-single-select.component.ts +47 -0
  267. package/src/selector/asset-selector-example/single-select/asset-single-select.module.ts +24 -0
  268. package/src/selector/asset-selector-example/tree-devices/asset-selector-tree-devices.component.ts +62 -0
  269. package/src/selector/asset-selector-example/tree-devices/asset-selector-tree-devices.module.ts +24 -0
  270. package/src/selector/asset-selector-example/tree-options/asset-selector-tree-example.component.ts +83 -0
  271. package/src/selector/asset-selector-example/tree-options/asset-selector-tree-example.module.ts +26 -0
  272. package/src/selector/asset-selector-example/tree-search/asset-selector-tree-search.component.ts +75 -0
  273. package/src/selector/asset-selector-example/tree-search/asset-selector-tree-search.module.ts +24 -0
  274. package/src/selector/asset-selector-example/tree-single/asset-selector-tree-single.component.ts +66 -0
  275. package/src/selector/asset-selector-example/tree-single/asset-selector-tree-single.module.ts +24 -0
  276. package/src/selector/datapoint-selection-example/context-example/datapoint-selection-context-example.component.ts +54 -0
  277. package/src/selector/datapoint-selection-example/context-example/datapoint-selection-context-example.module.ts +24 -0
  278. package/src/selector/datapoint-selection-example/dragdrop-example/datapoint-selection-dragdrop-example.component.ts +43 -0
  279. package/src/selector/datapoint-selection-example/dragdrop-example/datapoint-selection-dragdrop-example.module.ts +24 -0
  280. package/src/selector/datapoint-selection-example/general-example/datapoint-selection-example.component.html +202 -0
  281. package/src/selector/datapoint-selection-example/general-example/datapoint-selection-example.component.ts +51 -0
  282. package/src/selector/datapoint-selection-example/general-example/datapoint-selection-example.module.ts +24 -0
  283. package/src/selector/datapoint-selection-example/list-example/datapoint-selection-list-example.component.ts +42 -0
  284. package/src/selector/datapoint-selection-example/list-example/datapoint-selection-list-example.module.ts +24 -0
  285. package/src/selector/datapoint-selection-example/modal-example/datapoint-selection-modal-example.component.ts +51 -0
  286. package/src/selector/datapoint-selection-example/modal-example/datapoint-selection-modal-example.module.ts +24 -0
  287. package/src/selector/datapoint-selection-example/no-templates-example/datapoint-selection-notemplates-example.component.ts +43 -0
  288. package/src/selector/datapoint-selection-example/no-templates-example/datapoint-selection-notemplates-example.module.ts +24 -0
  289. package/src/selector/datapoint-selection-example/selector/datapoint-selection-selector-example.component.ts +43 -0
  290. package/src/selector/datapoint-selection-example/selector/datapoint-selection-selector-example.module.ts +24 -0
  291. package/src/selector/datapoint-selection-example/validation-example/datapoint-selection-validation-example.component.ts +46 -0
  292. package/src/selector/datapoint-selection-example/validation-example/datapoint-selection-validation-example.module.ts +24 -0
  293. package/src/standalone-demo/index.ts +1 -0
  294. package/src/standalone-demo/standalone-component/standalone-component.component.html +4 -0
  295. package/src/standalone-demo/standalone-component/standalone-component.component.ts +11 -0
  296. package/src/standalone-demo/standalone-demo.module.ts +23 -0
  297. package/src/stepper/device-stepper.component.html +70 -0
  298. package/src/stepper/device-stepper.component.ts +98 -0
  299. package/src/stepper/device.model.ts +5 -0
  300. package/src/stepper/index.ts +1 -0
  301. package/src/stepper/stepper.component.ts +19 -0
  302. package/src/stepper/stepper.module.ts +24 -0
  303. package/src/stepper/stepper.service.ts +32 -0
  304. package/src/time/time-picker-example.component.ts +19 -0
  305. package/src/time/time-picker-example.module.ts +21 -0
  306. package/src/translations/date-translation/c8y-translation/c8y-date-translation.component.ts +23 -0
  307. package/src/translations/date-translation/c8y-translation/c8y-date-translation.module.ts +22 -0
  308. package/src/translations/date-translation/ng-translation/date-translation.component.ts +17 -0
  309. package/src/translations/date-translation/ng-translation/date-translation.module.ts +22 -0
  310. package/src/translations/dynamic-form-translation/dynamic-form-translation.component.ts +58 -0
  311. package/src/translations/dynamic-form-translation/dynamic-form-translation.module.ts +22 -0
  312. package/src/translations/index.ts +1 -0
  313. package/src/translations/locales/it.po +18 -0
  314. package/src/translations/locales/pt_BR.po +33 -0
  315. package/src/translations/new-language/new-language.component.html +45 -0
  316. package/src/translations/new-language/new-language.component.ts +19 -0
  317. package/src/translations/new-language/new-language.module.ts +21 -0
  318. package/src/translations/new-translate/new-translation.component.html +92 -0
  319. package/src/translations/new-translate/new-translation.component.ts +9 -0
  320. package/src/translations/new-translate/new-translation.module.ts +22 -0
  321. package/src/translations/text-translation/gettext-translation/text-translation-gettext.component.ts +18 -0
  322. package/src/translations/text-translation/gettext-translation/text-translation-gettext.module.ts +22 -0
  323. package/src/translations/text-translation/ngNonBindable-translation/text-translation-ngnonbindable.component.ts +22 -0
  324. package/src/translations/text-translation/ngNonBindable-translation/text-translation-ngnonbindable.module.ts +24 -0
  325. package/src/translations/text-translation/service-translation/text-translation-by-service.component.ts +38 -0
  326. package/src/translations/text-translation/service-translation/text-translation-by-service.module.ts +24 -0
  327. package/src/translations/translation-tabs.ts +50 -0
  328. package/src/translations/translations.module.ts +18 -0
  329. package/src/user-menu/index.ts +1 -0
  330. package/src/user-menu/user-menu.module.ts +13 -0
  331. package/src/user-menu/user-menu.ts +26 -0
  332. package/src/widget/demo-widget-config.component.ts +81 -0
  333. package/src/widget/demo-widget.component.ts +35 -0
  334. package/src/widget/demo-widget.module.ts +47 -0
  335. package/src/widget/index.ts +1 -0
  336. package/src/widget-resolvers/alternative-event.resolver.ts +21 -0
  337. package/src/widget-resolvers/event-property.resolver.ts +52 -0
  338. package/src/widget-resolvers/event.resolver.ts +100 -0
  339. package/src/widget-resolvers/index.ts +1 -0
  340. package/src/widget-resolvers/widget-resolvers-config/widget-resolvers-config.component.html +31 -0
  341. package/src/widget-resolvers/widget-resolvers-config/widget-resolvers-config.component.ts +67 -0
  342. package/src/widget-resolvers/widget-resolvers.component.html +13 -0
  343. package/src/widget-resolvers/widget-resolvers.component.ts +37 -0
  344. package/src/widget-resolvers/widget-resolvers.module.ts +50 -0
  345. package/tsconfig.app.json +18 -0
@@ -0,0 +1,26 @@
1
+ <c8y-title>Data grid examples</c8y-title>
2
+
3
+ <c8y-data-grid
4
+ [title]="title"
5
+ [loadMoreItemsLabel]="loadMoreItemsLabel"
6
+ [loadingItemsLabel]="loadingItemsLabel"
7
+ [displayOptions]="displayOptions"
8
+ [columns]="columns"
9
+ [pagination]="pagination"
10
+ [infiniteScroll]="infiniteScroll"
11
+ [serverSideDataCallback]="serverSideDataCallback"
12
+ [refresh]="refresh"
13
+ (rowClick)="onRowClick($event)"
14
+ [actionControls]="actionControls"
15
+ [selectable]="selectable"
16
+ (itemsSelect)="onItemsSelect($event)"
17
+ [bulkActionControls]="bulkActionControls"
18
+ (onConfigChange)="onConfigChange($event)"
19
+ >
20
+ <c8y-ui-empty-state
21
+ [icon]="'search'"
22
+ [title]="'No results to display.' | translate"
23
+ [subtitle]="'Refine your search terms or check your spelling.' | translate"
24
+ [horizontal]="true"
25
+ ></c8y-ui-empty-state>
26
+ </c8y-data-grid>
@@ -0,0 +1,121 @@
1
+ import { Component, EventEmitter } from '@angular/core';
2
+ import { RouterModule } from '@angular/router';
3
+
4
+ import {
5
+ ActionControl,
6
+ BulkActionControl,
7
+ Column,
8
+ Pagination,
9
+ GridConfig,
10
+ LoadMoreMode,
11
+ DataSourceModifier,
12
+ ServerSideDataResult,
13
+ Row,
14
+ DisplayOptions,
15
+ CoreModule
16
+ } from '@c8y/ngx-components';
17
+ import { DeviceGridModule } from '@c8y/ngx-components/device-grid';
18
+ import { ServerGridExampleService } from './server-grid-example.service';
19
+ import { TypeCellRendererComponent } from './type-data-grid-column/type.cell-renderer.component';
20
+ import { TypeFilteringFormRendererComponent } from './type-data-grid-column/type.filtering-form-renderer.component';
21
+ import { TypeHeaderCellRendererComponent } from './type-data-grid-column/type.header-cell-renderer.component';
22
+
23
+ /**
24
+ * This is an example of using DataGridComponent for displaying, filtering and sorting managed objects
25
+ * using customized columns and dynamically built inventory queries.
26
+ */
27
+ @Component({
28
+ selector: 'c8y-server-grid-example',
29
+ templateUrl: './server-grid-example.component.html',
30
+ standalone: true,
31
+ imports: [
32
+ CoreModule,
33
+ DeviceGridModule,
34
+ RouterModule,
35
+ TypeCellRendererComponent,
36
+ TypeFilteringFormRendererComponent,
37
+ TypeHeaderCellRendererComponent
38
+ ],
39
+ providers: [ServerGridExampleService]
40
+ })
41
+ export class ServerGridExampleComponent {
42
+ title = 'Managed objects';
43
+ loadMoreItemsLabel = 'Load more managed objects';
44
+ loadingItemsLabel = 'Loading managed objects…';
45
+
46
+ displayOptions: DisplayOptions = {
47
+ bordered: true,
48
+ striped: true,
49
+ filter: true,
50
+ gridHeader: true
51
+ };
52
+
53
+ columns: Column[] = this.service.getColumns();
54
+ pagination: Pagination = this.service.getPagination();
55
+ infiniteScroll: LoadMoreMode = 'auto';
56
+ serverSideDataCallback: any;
57
+
58
+ refresh: EventEmitter<any> = new EventEmitter<any>();
59
+
60
+ selectable = true;
61
+ actionControls: ActionControl[] = this.service.getActionControls();
62
+ bulkActionControls: BulkActionControl[] = this.service.getBulkActionControls();
63
+
64
+ constructor(private service: ServerGridExampleService) {
65
+ // we're setting up `serverSideDataCallback` to execute a method from this component with bound `this`
66
+ this.serverSideDataCallback = this.onDataSourceModifier.bind(this);
67
+ // we're setting up `onRefreshClick` to be executed on refresh event
68
+ this.refresh.subscribe(() => this.onRefreshClick());
69
+ }
70
+
71
+ /** Used in ngFor for columns iteration. */
72
+ trackByName(_index, column: Column): string {
73
+ return column.name;
74
+ }
75
+
76
+ /**
77
+ * This method loads data when data grid requests it (e.g. on initial load or on column settings change).
78
+ * It gets the object with current data grid setup and is supposed to return:
79
+ * full response, list of items, paging object, the number of items in the filtered subset, the number of all items.
80
+ */
81
+ async onDataSourceModifier(
82
+ dataSourceModifier: DataSourceModifier
83
+ ): Promise<ServerSideDataResult> {
84
+ const { res, data, paging } = await this.service.getData(
85
+ dataSourceModifier.columns,
86
+ dataSourceModifier.pagination
87
+ );
88
+ const filteredSize: number = await this.service.getCount(
89
+ dataSourceModifier.columns,
90
+ dataSourceModifier.pagination
91
+ );
92
+ const size: number = await this.service.getTotal();
93
+
94
+ const serverSideDataResult: ServerSideDataResult = { res, data, paging, filteredSize, size };
95
+
96
+ return serverSideDataResult;
97
+ }
98
+
99
+ /** Executes an action on row click. */
100
+ onRowClick(row: Row) {
101
+ console.log('row clicked:');
102
+ console.dir(row);
103
+ }
104
+
105
+ /** Executes an action on the selected items. */
106
+ onItemsSelect(selectedItemIds: string[]) {
107
+ console.log('selected item ids:');
108
+ console.dir(selectedItemIds);
109
+ }
110
+
111
+ /** Executes an action on grid config change. */
112
+ onConfigChange(gridConfig: GridConfig) {
113
+ console.log('grid config changed:');
114
+ console.dir(gridConfig);
115
+ }
116
+
117
+ /** Executes an action on refresh event. */
118
+ onRefreshClick() {
119
+ console.log('refresh clicked');
120
+ }
121
+ }
@@ -0,0 +1,24 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NavigatorNode, hookNavigator, hookRoute } from '@c8y/ngx-components';
4
+
5
+ @NgModule({
6
+ imports: [CommonModule],
7
+ providers: [
8
+ hookRoute({
9
+ path: 'grids/server-grid-example',
10
+ loadComponent: () =>
11
+ import('./server-grid-example.component').then(m => m.ServerGridExampleComponent)
12
+ }),
13
+ hookNavigator(
14
+ new NavigatorNode({
15
+ priority: 20,
16
+ path: 'grids/server-grid-example',
17
+ icon: 'table',
18
+ label: 'Server grid',
19
+ parent: 'Data grid examples'
20
+ })
21
+ )
22
+ ]
23
+ })
24
+ export class ServerGridExampleModule {}
@@ -0,0 +1,266 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { transform } from 'lodash-es';
3
+
4
+ import { IManagedObject, InventoryService, QueriesUtil } from '@c8y/client';
5
+ import {
6
+ ActionControl,
7
+ BuiltInActionType,
8
+ BulkActionControl,
9
+ Column,
10
+ Pagination
11
+ } from '@c8y/ngx-components';
12
+
13
+ import { TypeDataGridColumn } from './type-data-grid-column/type.data-grid-column';
14
+
15
+ /** Model for custom type filtering form. */
16
+ export interface TypeFilteringModel {
17
+ group?: boolean;
18
+ device?: boolean;
19
+ smartRule?: boolean;
20
+ dashboard?: boolean;
21
+ file?: boolean;
22
+ application?: boolean;
23
+ }
24
+
25
+ /**
26
+ * This is the example service for a data grid:
27
+ * provides the list of columns, initial pagination object, actions;
28
+ * as well as performs the query for data based on the current grid setup.
29
+ */
30
+ @Injectable()
31
+ export class ServerGridExampleService {
32
+ /** This will be used to build the inventory queries. */
33
+ protected queriesUtil: QueriesUtil;
34
+
35
+ constructor(protected inventoryService: InventoryService) {
36
+ this.queriesUtil = new QueriesUtil();
37
+ }
38
+
39
+ /**
40
+ * Returns a list of columns.
41
+ * We define 2 columns with inline objects (they display simple properties
42
+ * and use default header, cell and filtring form).
43
+ * The last column is defined via a class instance (it displays a value based on
44
+ * several properties of the row item and has custom header, cell and filtering form).
45
+ */
46
+ getColumns(): Column[] {
47
+ const columns = [
48
+ {
49
+ name: 'id',
50
+ header: 'ID',
51
+ path: 'id',
52
+ filterable: true,
53
+ sortable: true
54
+ },
55
+ {
56
+ name: 'name',
57
+ header: 'Name',
58
+ path: 'name',
59
+ filterable: true,
60
+ sortable: true
61
+ },
62
+ new TypeDataGridColumn()
63
+ ];
64
+
65
+ return columns;
66
+ }
67
+
68
+ /** Returns initial pagination object. */
69
+ getPagination(): Pagination {
70
+ return {
71
+ pageSize: 10,
72
+ currentPage: 1
73
+ };
74
+ }
75
+
76
+ /** Returns an array of individual row actions. */
77
+ getActionControls(): ActionControl[] {
78
+ return [
79
+ { type: BuiltInActionType.Edit, callback: item => console.dir(item) },
80
+ { type: BuiltInActionType.Export, callback: item => console.dir(item) },
81
+ { type: BuiltInActionType.Delete, callback: item => console.dir(item) },
82
+ {
83
+ type: 'customAction',
84
+ icon: 'online',
85
+ text: 'Custom action',
86
+ callback: item => console.dir(item)
87
+ }
88
+ ];
89
+ }
90
+
91
+ /** Returns an array of bulk row actions. */
92
+ getBulkActionControls(): BulkActionControl[] {
93
+ return [
94
+ {
95
+ type: BuiltInActionType.Export,
96
+ callback: selectedItemIds => console.dir(selectedItemIds)
97
+ },
98
+ {
99
+ type: BuiltInActionType.Delete,
100
+ callback: selectedItemIds => console.dir(selectedItemIds)
101
+ },
102
+ {
103
+ type: 'customAction',
104
+ icon: 'online',
105
+ text: 'Custom action',
106
+ callback: selectedItemIds => console.dir(selectedItemIds)
107
+ }
108
+ ];
109
+ }
110
+
111
+ /** Returns data for current columns and pagination setup. */
112
+ async getData(columns: Column[], pagination: Pagination) {
113
+ // build filters based on columns and pagination
114
+ const filters = this.getFilters(columns, pagination);
115
+ // execute inventory query for the list of managed objects
116
+ return this.inventoryService.list(filters);
117
+ }
118
+
119
+ /** Returns the number of items matching current columns and pagination setup. */
120
+ async getCount(columns: Column[], pagination: Pagination) {
121
+ const filters = {
122
+ // build filters based on columns and pagination
123
+ ...this.getFilters(columns, pagination),
124
+ // but we only need the number of items, not the items themselves
125
+ pageSize: 1,
126
+ currentPage: 1
127
+ };
128
+ return (await this.inventoryService.list(filters)).paging.totalPages;
129
+ }
130
+
131
+ /** Returns the total number of items (with no filters). */
132
+ async getTotal(): Promise<number> {
133
+ const filters = {
134
+ pageSize: 1,
135
+ withTotalPages: true
136
+ };
137
+ return (await this.inventoryService.list(filters)).paging.totalPages;
138
+ }
139
+
140
+ /** Returns an icon and label representing the type of the managed object. */
141
+ getTypeIconAndLabel(mo: IManagedObject): { icon: string; label: string } {
142
+ let icon = 'question';
143
+ let label = 'Other';
144
+
145
+ if (mo.type === 'c8y_DeviceGroup') {
146
+ icon = 'c8y-group';
147
+ label = 'Group';
148
+ }
149
+
150
+ if (mo.c8y_IsDevice !== undefined) {
151
+ icon = 'exchange';
152
+ label = 'Device';
153
+ }
154
+
155
+ if (mo.type === 'c8y_SmartRule' || mo.type === 'c8y_PrivateSmartRule') {
156
+ icon = 'c8y-smart-rules';
157
+ label = 'Smart rule';
158
+ }
159
+
160
+ if (mo.c8y_Dashboard !== undefined) {
161
+ icon = 'th';
162
+ label = 'Dashboard';
163
+ }
164
+
165
+ if (mo.c8y_IsBinary !== undefined) {
166
+ icon = 'file';
167
+ label = 'File';
168
+ }
169
+
170
+ if (mo.type && mo.type.startsWith('c8y_Application')) {
171
+ icon = 'c8y-atom';
172
+ label = 'Application';
173
+ }
174
+
175
+ return { icon, label };
176
+ }
177
+
178
+ /** Returns a query object for given settings of filtering by type. */
179
+ getTypeQuery(model: TypeFilteringModel): any {
180
+ let query: any = {};
181
+
182
+ if (model.group) {
183
+ query = this.queriesUtil.addOrFilter(query, { type: 'c8y_DeviceGroup' });
184
+ }
185
+
186
+ if (model.device) {
187
+ query = this.queriesUtil.addOrFilter(query, { __has: 'c8y_IsDevice' });
188
+ }
189
+
190
+ if (model.smartRule) {
191
+ query = this.queriesUtil.addOrFilter(query, {
192
+ type: { __in: ['c8y_SmartRule', 'c8y_PrivateSmartRule'] }
193
+ });
194
+ }
195
+
196
+ if (model.dashboard) {
197
+ query = this.queriesUtil.addOrFilter(query, {
198
+ type: { __has: 'c8y_Dashboard' }
199
+ });
200
+ }
201
+
202
+ if (model.file) {
203
+ query = this.queriesUtil.addOrFilter(query, {
204
+ type: { __has: 'c8y_IsBinary' }
205
+ });
206
+ }
207
+
208
+ if (model.application) {
209
+ query = this.queriesUtil.addOrFilter(query, { type: 'c8y_Application_*' });
210
+ }
211
+
212
+ return query;
213
+ }
214
+
215
+ /** Returns filters for given columns and pagination setup. */
216
+ private getFilters(columns: Column[], pagination: Pagination) {
217
+ return {
218
+ query: this.getQueryString(columns),
219
+ pageSize: pagination.pageSize,
220
+ currentPage: pagination.currentPage,
221
+ withChildren: false,
222
+ withTotalPages: true
223
+ };
224
+ }
225
+
226
+ /** Returns a query string based on columns setup. */
227
+ private getQueryString(columns: Column[]): string {
228
+ const fullQuery = this.getQueryObj(columns);
229
+ return this.queriesUtil.buildQuery(fullQuery);
230
+ }
231
+
232
+ /** Returns a query object based on columns setup. */
233
+ private getQueryObj(columns: Column[]): any {
234
+ return transform(columns, (query, column) => this.addColumnQuery(query, column), {
235
+ __filter: {},
236
+ __orderby: []
237
+ });
238
+ }
239
+
240
+ /** Extends given query with a part based on the setup of given column. */
241
+ private addColumnQuery(query: any, column: Column): void {
242
+ // when a column is marked as filterable
243
+ if (column.filterable) {
244
+ // in the case of default filtering form, `filterPredicate` will contain the string entered by a user
245
+ if (column.filterPredicate) {
246
+ // so we use it as the expected value, * allow to search for it anywhere in the property
247
+ query.__filter[column.path] = `*${column.filterPredicate}*`;
248
+ }
249
+
250
+ // in the case of custom filtering form, we're storing the query in `externalFilterQuery.query`
251
+ if (column.externalFilterQuery) {
252
+ query = this.queriesUtil.addAndFilter(query, column.externalFilterQuery.query);
253
+ }
254
+ }
255
+
256
+ // when a column is sortable and has a specified sorting order
257
+ if (column.sortable && column.sortOrder) {
258
+ // add sorting condition for the configured column `path`
259
+ query.__orderby.push({
260
+ [column.path]: column.sortOrder === 'asc' ? 1 : -1
261
+ });
262
+ }
263
+
264
+ return query;
265
+ }
266
+ }
@@ -0,0 +1,31 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { CellRendererContext, CoreModule } from '@c8y/ngx-components';
3
+ import { ServerGridExampleService } from '../server-grid-example.service';
4
+
5
+ /**
6
+ * The example component for custom cell renderer.
7
+ * It gets `context` with the current row item and the column.
8
+ * Additionally, a service is injected to provide a helper method.
9
+ * The template displays the icon and the label with additional styling.
10
+ */
11
+ @Component({
12
+ template: `
13
+ <span>
14
+ <i class="m-r-5" [c8yIcon]="value.icon"></i>
15
+ <code>{{ value.label }}</code>
16
+ </span>
17
+ `,
18
+ standalone: true,
19
+ imports: [CoreModule]
20
+ })
21
+ export class TypeCellRendererComponent {
22
+ /** Returns the icon and label for the current item. */
23
+ get value() {
24
+ return this.service.getTypeIconAndLabel(this.context.item);
25
+ }
26
+
27
+ constructor(
28
+ public context: CellRendererContext,
29
+ @Inject(ServerGridExampleService) public service: ServerGridExampleService
30
+ ) {}
31
+ }
@@ -0,0 +1,47 @@
1
+ import { Type } from '@angular/core';
2
+ import { Column, ColumnDataType, SortOrder, FilterPredicateFunction } from '@c8y/ngx-components';
3
+ import { TypeHeaderCellRendererComponent } from './type.header-cell-renderer.component';
4
+ import { TypeCellRendererComponent } from './type.cell-renderer.component';
5
+ import { TypeFilteringFormRendererComponent } from './type.filtering-form-renderer.component';
6
+
7
+ /**
8
+ * Defines a class for custom Type column.
9
+ * Implements `Column` interface and sets basic properties, as well as custom components.
10
+ */
11
+ export class TypeDataGridColumn implements Column {
12
+ name: string;
13
+ path?: string;
14
+ header?: string;
15
+ dataType?: ColumnDataType;
16
+
17
+ visible?: boolean;
18
+ positionFixed?: boolean;
19
+ gridTrackSize?: string;
20
+
21
+ headerCSSClassName?: string | string[];
22
+ headerCellRendererComponent?: Type<any>;
23
+
24
+ cellCSSClassName?: string | string[];
25
+ cellRendererComponent?: Type<any>;
26
+
27
+ sortable?: boolean;
28
+ sortOrder?: SortOrder;
29
+
30
+ filterable?: boolean;
31
+ filteringFormRendererComponent?: Type<any>;
32
+ filterPredicate?: string | FilterPredicateFunction;
33
+ externalFilterQuery?: string | object;
34
+
35
+ constructor() {
36
+ this.name = 'type';
37
+ this.header = 'Type';
38
+
39
+ this.headerCellRendererComponent = TypeHeaderCellRendererComponent;
40
+ this.cellRendererComponent = TypeCellRendererComponent;
41
+
42
+ this.filterable = true;
43
+ this.filteringFormRendererComponent = TypeFilteringFormRendererComponent;
44
+
45
+ this.sortable = false;
46
+ }
47
+ }
@@ -0,0 +1,107 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { FilteringFormRendererContext, FormsModule } from '@c8y/ngx-components';
3
+ import { ServerGridExampleService, TypeFilteringModel } from '../server-grid-example.service';
4
+
5
+ /**
6
+ * This is the example component for custom filtering form.
7
+ * The form can contain any inputs you want.
8
+ * The important thing is to invoke one of the 2 methods:
9
+ *
10
+ * - `applyFilter` which sets `filterPredicate` or `externalFilterQuery` in the column,
11
+ * these values will later be used to generate the query
12
+ * - `resetFilter` which resets filter settings in the column
13
+ *
14
+ * Our example shows the list of checkboxes. Selecting them modifies the query being sent.
15
+ */
16
+ @Component({
17
+ template: `
18
+ <form #filterForm="ngForm">
19
+ <strong>Show managed objects of type:</strong>
20
+ <c8y-form-group class="m-b-0">
21
+ <label class="c8y-checkbox">
22
+ <input name="group" type="checkbox" [(ngModel)]="model.group" />
23
+ <span></span>
24
+ <span>Group</span>
25
+ </label>
26
+ </c8y-form-group>
27
+ <c8y-form-group class="m-b-0">
28
+ <label class="c8y-checkbox">
29
+ <input name="device" type="checkbox" [(ngModel)]="model.device" />
30
+ <span></span>
31
+ <span>Device</span>
32
+ </label>
33
+ </c8y-form-group>
34
+ <c8y-form-group class="m-b-0">
35
+ <label class="c8y-checkbox">
36
+ <input name="dashboard" type="checkbox" [(ngModel)]="model.dashboard" />
37
+ <span></span>
38
+ <span>Dashboard</span>
39
+ </label>
40
+ </c8y-form-group>
41
+ <c8y-form-group class="m-b-0">
42
+ <label class="c8y-checkbox">
43
+ <input name="smartRule" type="checkbox" [(ngModel)]="model.smartRule" />
44
+ <span></span>
45
+ <span>Smart rule</span>
46
+ </label>
47
+ </c8y-form-group>
48
+ <c8y-form-group class="m-b-0">
49
+ <label class="c8y-checkbox">
50
+ <input name="file" type="checkbox" [(ngModel)]="model.file" />
51
+ <span></span>
52
+ <span>File</span>
53
+ </label>
54
+ </c8y-form-group>
55
+ <c8y-form-group class="m-b-0">
56
+ <label class="c8y-checkbox">
57
+ <input name="application" type="checkbox" [(ngModel)]="model.application" />
58
+ <span></span>
59
+ <span>Application</span>
60
+ </label>
61
+ </c8y-form-group>
62
+ </form>
63
+
64
+ <div class="data-grid__dropdown__footer d-flex separator-top">
65
+ <button class="btn btn-default btn-sm m-r-8 flex-grow" (click)="resetFilter()">Reset</button>
66
+ <button
67
+ class="btn btn-primary btn-sm flex-grow"
68
+ [disabled]="filterForm.invalid"
69
+ (click)="applyFilter()"
70
+ >
71
+ Apply
72
+ </button>
73
+ </div>
74
+ `,
75
+ standalone: true,
76
+ imports: [FormsModule]
77
+ })
78
+ export class TypeFilteringFormRendererComponent {
79
+ model: TypeFilteringModel;
80
+
81
+ constructor(
82
+ public context: FilteringFormRendererContext,
83
+ @Inject(ServerGridExampleService) public service: ServerGridExampleService
84
+ ) {
85
+ // restores the settings from current column setup
86
+ this.model = (this.context.property.externalFilterQuery || {}).model || {};
87
+ }
88
+
89
+ /**
90
+ * Applies the filter.
91
+ * Sets `externalFilterQuery.model` to restore the same settings the next time the form is displayed.
92
+ * Sets `externalFilterQuery.query` to pass the query object to be included in the final data grid query.
93
+ */
94
+ applyFilter() {
95
+ this.context.applyFilter({
96
+ externalFilterQuery: {
97
+ model: this.model,
98
+ query: this.service.getTypeQuery(this.model)
99
+ }
100
+ });
101
+ }
102
+
103
+ /** Restes the filter, just call the method from context. */
104
+ resetFilter() {
105
+ this.context.resetFilter();
106
+ }
107
+ }
@@ -0,0 +1,20 @@
1
+ import { Component } from '@angular/core';
2
+ import { CellRendererContext } from '@c8y/ngx-components';
3
+
4
+ /**
5
+ * The example component for custom header renderer.
6
+ * The header text is taken from `this.context.property` which contains current column object.
7
+ * Additionally the header has custom icon element and styled span element.
8
+ */
9
+ @Component({
10
+ template: `
11
+ <i c8yIcon="rocket"></i>
12
+ <span style="text-transform: uppercase; font-variant: small-caps; text-decoration: underline;">
13
+ {{ context.property.header }}
14
+ </span>
15
+ `,
16
+ standalone: true
17
+ })
18
+ export class TypeHeaderCellRendererComponent {
19
+ constructor(public context: CellRendererContext) {}
20
+ }