@rxap/schematic-angular 19.1.1-dev.3 → 19.2.0-dev.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/GUIDES.md +160 -0
  3. package/README.md +164 -0
  4. package/package.json +8 -8
  5. package/src/examples/feature/dashboard/dashboard-accordion/schematics.yaml +226 -0
  6. package/src/examples/feature/dashboard/dashboard-table/schematic.yml +103 -0
  7. package/src/examples/feature/dashboard-template/dashboard-template-table/schematic.yml +95 -0
  8. package/src/examples/feature/machine/machine-accordion/schematic.yaml +83 -0
  9. package/src/examples/feature/machine/machine-table/schematic.yaml +139 -0
  10. package/src/examples/feature/machine-definition/machine-definition-details/data-definition-modbus-tcp-table/schematic.yaml +63 -0
  11. package/src/examples/feature/machine-definition/machine-definition-details/data-definition-opc-ua-table/schematic.yaml +58 -0
  12. package/src/examples/feature/machine-definition/machine-definition-details/data-definition-open-platform-protocol-table/schematic.yaml +49 -0
  13. package/src/examples/feature/machine-definition/machine-definition-details/data-definition-s7-iso-on-tcp-table/schematic.yaml +64 -0
  14. package/src/examples/feature/machine-definition/machine-definition-details/data-trigger-table/schematic.yaml +43 -0
  15. package/src/examples/feature/machine-definition/machine-definition-details/message-group-table/schematic.yaml +41 -0
  16. package/src/examples/feature/machine-definition/machine-definition-details/message-trigger-connection-table/schematic.yaml +38 -0
  17. package/src/examples/feature/machine-definition/machine-definition-details/physical-unit-table/schematic.yaml +41 -0
  18. package/src/examples/feature/machine-definition/machine-definition-table/schematic.yaml +107 -0
  19. package/src/examples/feature/node-red/node-red-table/schematic.yaml +114 -0
  20. package/src/examples/feature/report/report-accordion/schematic.yaml +318 -0
  21. package/src/examples/feature/report/report-table/schematic.yaml +66 -0
  22. package/src/examples/feature/service-network/company-accordion/schematic.yaml +119 -0
  23. package/src/examples/feature/service-network/service-network-accordion/schematic.yml +65 -0
  24. package/src/examples/feature/thing/thing-table/schematic.yml +115 -0
  25. package/src/examples/feature/user/user-table/schematic.yaml +99 -0
  26. package/src/examples/schematics.yaml +18 -0
  27. package/src/guides/backend.md +49 -0
  28. package/src/guides/form-component.md +58 -0
  29. package/src/guides/form-control.md +269 -0
  30. package/src/guides/header-button.md +57 -0
  31. package/src/guides/table-action.md +120 -0
  32. package/src/guides/table-column.md +185 -0
  33. package/src/guides/table-component.md +51 -0
  34. package/src/guides/table-filter.md +69 -0
  35. package/src/guides/table-modifiers.md +22 -0
  36. package/src/guides/upstream.md +49 -0
  37. package/src/lib/angular-options.js +0 -1
  38. package/src/lib/angular-options.js.map +1 -1
@@ -0,0 +1,66 @@
1
+ package: "@rxap/schematic-angular"
2
+ name: table-component
3
+ options:
4
+ name: report
5
+ backend: nestjs
6
+ sortable: true
7
+ rowId:
8
+ name: uuid
9
+ modifiers:
10
+ - show-archived-slide
11
+ headerButton:
12
+ role: form
13
+ permission: report.create
14
+ options:
15
+ customComponent: true
16
+ formComponent: CreateForm
17
+ propertyList:
18
+ - name: __archived
19
+ type: boolean
20
+ columnList:
21
+ - name: __removedAt
22
+ kind: date
23
+ inactive: true
24
+ hidden: true
25
+ - name: resultType
26
+ kind: icon
27
+ - name: name
28
+ type: string
29
+ hasFilter: true
30
+ - name: companyName
31
+ type: string
32
+ hasFilter: true
33
+ - name: locationName
34
+ type: string
35
+ hasFilter: true
36
+ actionList:
37
+ - type: details
38
+ icon: visibility
39
+ permission: report.get
40
+ role: navigation
41
+ checkFunction: "!element.__archived"
42
+ options:
43
+ route: "/report/{{rowId}}/details"
44
+ - type: delete
45
+ icon: delete
46
+ refresh: true
47
+ confirm: true
48
+ inHeader: true
49
+ permission: report.delete
50
+ checkFunction: "!!element.__archived"
51
+ role: operation
52
+ color: warn
53
+ - type: archive
54
+ role: operation
55
+ refresh: true
56
+ confirm: true
57
+ inHeader: true
58
+ permission: report.archive
59
+ checkFunction: "!element.__archived"
60
+ - type: restore
61
+ role: operation
62
+ refresh: true
63
+ inHeader: true
64
+ confirm: true
65
+ permission: report.archive
66
+ checkFunction: "!!element.__archived"
@@ -0,0 +1,119 @@
1
+ package: "@rxap/schematic-angular"
2
+ name: accordion-component
3
+ options:
4
+ name: company
5
+ backend: nestjs
6
+ multiple: true
7
+ header:
8
+ property:
9
+ name: name
10
+ identifier:
11
+ source: route
12
+ property:
13
+ name: uuid
14
+ upstream:
15
+ kind: open-api
16
+ operationId: company-gui-controller-getByUuid@legacy
17
+ itemList:
18
+ - name: servicenetworks
19
+ kind: table
20
+ title: Service Networks
21
+ table:
22
+ sortable: true
23
+ rowId:
24
+ name: uuid
25
+ upstream:
26
+ kind: open-api
27
+ operationId: get_api_companies_inherited_routers@service-server
28
+ mapper:
29
+ kind: paged
30
+ total: meta?.pages
31
+ list: routers
32
+ pageIndex: page
33
+ pageSize: per_page
34
+ sortBy: sort
35
+ sortDirection: order
36
+ filter:
37
+ property: filters
38
+ map:
39
+ filter: value
40
+ sort:
41
+ direction: asc
42
+ active: name
43
+ columnList:
44
+ - name: name
45
+ kind: default
46
+ filterControl:
47
+ kind: input
48
+ - name: vpn-server-ip
49
+ kind: copy-to-clipboard
50
+ isOptional: true
51
+ source: subnet?.server_ip
52
+ filterControl:
53
+ kind: input
54
+ formField:
55
+ cssClass: 'w-[160px]'
56
+ - name: netmask-server
57
+ kind: copy-to-clipboard
58
+ source: subnet?.netmask
59
+ filterControl:
60
+ kind: input
61
+ formField:
62
+ cssClass: 'w-[180px]'
63
+ - name: vpn-router-ip
64
+ isOptional: true
65
+ source: ip
66
+ kind: copy-to-clipboard
67
+ filterControl:
68
+ kind: input
69
+ formField:
70
+ cssClass: 'w-[160px]'
71
+ - name: vpn-port
72
+ kind: default
73
+ source: subnet?.port
74
+ filterControl:
75
+ kind: input
76
+ formField:
77
+ cssClass: 'w-[140px]'
78
+ - name: vpn-proto
79
+ kind: default
80
+ source: subnet?.protocol
81
+ filterControl:
82
+ kind: input
83
+ formField:
84
+ cssClass: 'w-[160px]'
85
+ - name: vpn-dhcp-start
86
+ kind: copy-to-clipboard
87
+ source: subnet?.dhcp_start
88
+ filterControl:
89
+ kind: input
90
+ formField:
91
+ cssClass: 'w-[170px]'
92
+ - name: vpn-dhcp-end
93
+ kind: copy-to-clipboard
94
+ source: subnet?.dhcp_end
95
+ filterControl:
96
+ kind: input
97
+ formField:
98
+ cssClass: 'w-[160px]'
99
+ - name: ip-servicenet
100
+ kind: copy-to-clipboard
101
+ source: subnet?.plantnet_ip
102
+ filterControl:
103
+ kind: input
104
+ formField:
105
+ cssClass: 'w-[160px]'
106
+ - name: netmask-servicenet
107
+ kind: copy-to-clipboard
108
+ isOptional: true
109
+ source: subnet?.plantnet_mask
110
+ filterControl:
111
+ kind: input
112
+ formField:
113
+ cssClass: 'w-[210px]'
114
+ - name: comment
115
+ kind: default
116
+ isOptional: true
117
+ source: subnet?.comment
118
+ filterControl:
119
+ kind: input
@@ -0,0 +1,65 @@
1
+ package: "@rxap/schematic-angular"
2
+ name: accordion-component
3
+ options:
4
+ name: service-network
5
+ backend: nestjs
6
+ multiple: true
7
+ header:
8
+ property:
9
+ name: name
10
+ persistent:
11
+ property:
12
+ name: uuid
13
+ identifier:
14
+ source: route
15
+ property:
16
+ name: uuid
17
+ upstream:
18
+ kind: open-api
19
+ operationId: vpn-router-controller-getByUuid@legacy
20
+ itemList:
21
+ - name: log-viewer
22
+ upstream:
23
+ kind: open-api
24
+ operationId: get_api_logs_retrieve_log@service-server
25
+ - name: connection-log
26
+ kind: table
27
+ table:
28
+ sortable:
29
+ enabled: true
30
+ default:
31
+ active: router
32
+ direction: asc
33
+ upstream:
34
+ kind: open-api
35
+ operationId: get_api_logs_connection_logs_get_connectionlogs_for_subnet@service-server
36
+ mapper:
37
+ kind: paged
38
+ pageIndex: page
39
+ pageSize: per_page
40
+ sortBy: sort
41
+ sortDirection: order
42
+ total: meta.total
43
+ list: connection_logs
44
+ columnList:
45
+ - name: router
46
+ filterControl:
47
+ kind: input
48
+ - name: username
49
+ filterControl:
50
+ kind: input
51
+ - name: clientIp
52
+ filterControl:
53
+ kind: input
54
+ - name: reason
55
+ filterControl:
56
+ kind: input
57
+ - name: begin
58
+ type: string
59
+ kind: date
60
+ - name: end
61
+ type: string
62
+ kind: date
63
+ - name: duration
64
+ - name: bytesSent
65
+ - name: bytesReceived
@@ -0,0 +1,115 @@
1
+ package: "@rxap/schematic-angular"
2
+ name: table-component
3
+ options:
4
+ name: thing
5
+ backend: open-api
6
+ title: Router
7
+ sortable: true
8
+ modifiers:
9
+ - show-archived-slide
10
+ headerButton:
11
+ role: form
12
+ permission: thing.create
13
+ options:
14
+ customComponent: true
15
+ formComponent: ThingCreateForm
16
+ openApi:
17
+ operationId: thing-gui-controller-getByFilter
18
+ adapter:
19
+ name: TableAdapterFactory
20
+ moduleSpecifier: "@digitaix/eurogard-table-system"
21
+ columnList:
22
+ - name: __removedAt
23
+ kind: date
24
+ inactive: true
25
+ hidden: true
26
+ - name: name
27
+ hasFilter: true
28
+ - name: macAddress
29
+ hasFilter: true
30
+ - name: uuid
31
+ kind: copy-to-clipboard
32
+ hasFilter: true
33
+ inactive: true
34
+ - name: accessKey
35
+ kind: copy-to-clipboard
36
+ hasFilter: true
37
+ inactive: true
38
+ - name: locationName
39
+ hasFilter: true
40
+ - name: lastConnection
41
+ kind: date
42
+ - name: online
43
+ kind: boolean
44
+ - name: companyName
45
+ hasFilter: true
46
+ - name: type
47
+ pipeList:
48
+ - name: thingTyp
49
+ namedImport: ThingTypPipe
50
+ moduleSpecifier: "@digitaix/eurogard-pipes"
51
+ actionList:
52
+ - type: edit
53
+ role: form
54
+ permission: thing.update
55
+ checkFunction: "!element.__archived"
56
+ refresh: true
57
+ options:
58
+ customComponent: true
59
+ formComponent: ThingEditForm
60
+ loadFrom:
61
+ operationId: thing-gui-controller-getByUuid
62
+ parameters:
63
+ uuid: rowId
64
+ formInitial:
65
+ name: name
66
+ macAddress: macAddress
67
+ token: token
68
+ onlineInterval: onlineInterval
69
+ location:
70
+ uuid: locationUuid
71
+ name: locationName
72
+ type: type
73
+ nodeRedExist: nodeRedExist
74
+ - type: vpn
75
+ icon: vpn_lock
76
+ checkFunction: "element['subnet'] !== null && !element.__archived"
77
+ role: navigation
78
+ options:
79
+ route: "/vpn/{{uuid}}/details"
80
+ - type: delete
81
+ icon: delete
82
+ refresh: true
83
+ confirm: true
84
+ inHeader: true
85
+ permission: thing.archive
86
+ checkFunction: "!!element.__archived"
87
+ role: open-api
88
+ color: warn
89
+ options:
90
+ operationId: thing-controller-delete
91
+ parameters:
92
+ uuid: rowId
93
+ - type: archive
94
+ role: open-api
95
+ refresh: true
96
+ confirm: true
97
+ inHeader: true
98
+ permission: thing.archive
99
+ checkFunction: "!element.__archived"
100
+ options:
101
+ operationId: thing-controller-archive
102
+ parameters:
103
+ uuid: rowId
104
+ - type: restore
105
+ role: open-api
106
+ refresh: true
107
+ inHeader: true
108
+ confirm: true
109
+ permission: thing.archive
110
+ checkFunction: "!!element.__archived"
111
+ options:
112
+ operationId: thing-controller-unarchive
113
+ parameters:
114
+ uuid: rowId
115
+
@@ -0,0 +1,99 @@
1
+ package: "@rxap/schematic-angular"
2
+ name: table-component
3
+ options:
4
+ name: user
5
+ backend: open-api
6
+ sortable: true
7
+ modifiers:
8
+ - show-archived-slide
9
+ headerButton:
10
+ role: form
11
+ permission: user.create
12
+ options:
13
+ customComponent: true
14
+ formComponent: UserCreateForm
15
+ openApi:
16
+ operationId: user-controller-getByFilter
17
+ adapter:
18
+ name: TableAdapterFactory
19
+ moduleSpecifier: "@digitaix/eurogard-table-system"
20
+ columnList:
21
+ - name: __removedAt
22
+ kind: date
23
+ inactive: true
24
+ hidden: true
25
+ - name: username
26
+ hasFilter: true
27
+ type: string
28
+ - name: firstname
29
+ hasFilter: true
30
+ type: string
31
+ - name: lastname
32
+ hasFilter: true
33
+ type: string
34
+ - name: role
35
+ pipeList:
36
+ - name: toRolesEnumValue
37
+ namedImport: ToRolesEnumValuePipe
38
+ moduleSpecifier: enum
39
+ - async
40
+ - name: lastConnection
41
+ kind: date
42
+ - name: receiveMessages
43
+ kind: boolean
44
+ - name: companyName
45
+ type: string
46
+ hasFilter: true
47
+ actionList:
48
+ - type: edit
49
+ role: form
50
+ permission: user.update
51
+ checkFunction: "!element.__archived"
52
+ refresh: true
53
+ options:
54
+ customComponent: true
55
+ formComponent: UserEditForm
56
+ loadFrom:
57
+ operationId: user-controller-getByUuid
58
+ parameters:
59
+ uuid: rowId
60
+ - type: delete
61
+ icon: delete
62
+ refresh: true
63
+ confirm: true
64
+ inHeader: true
65
+ permission: user.archive
66
+ checkFunction: "!!element.__archived"
67
+ role: open-api
68
+ color: warn
69
+ options:
70
+ operationId: user-controller-delete
71
+ parameters:
72
+ uuid: rowId
73
+ - type: archive
74
+ role: open-api
75
+ refresh: true
76
+ confirm: true
77
+ inHeader: true
78
+ permission: user.archive
79
+ checkFunction: "!element.__archived"
80
+ options:
81
+ operationId: user-controller-archive
82
+ parameters:
83
+ uuid: rowId
84
+ - type: restore
85
+ role: open-api
86
+ refresh: true
87
+ inHeader: true
88
+ confirm: true
89
+ permission: user.archive
90
+ checkFunction: "!!element.__archived"
91
+ options:
92
+ operationId: user-controller-unarchive
93
+ parameters:
94
+ uuid: rowId
95
+ - type: set-password
96
+ permission: user.set-password
97
+ checkFunction: "!element.__archived"
98
+ svgIcon: lock-reset
99
+
@@ -0,0 +1,18 @@
1
+ - package: '@rxap/plugin-workspace'
2
+ name: init
3
+ options:
4
+ packages: false
5
+ standalone: false
6
+ skipLicense: true
7
+ - package: '@rxap/plugin-gitlab-ci'
8
+ name: init
9
+ options:
10
+ onlyPackages: false
11
+ dte: true
12
+ skipFormat: false
13
+ - package: '@rxap/plugin-gitlab-ci'
14
+ name: docker
15
+ options:
16
+ tags:
17
+ - kaniko
18
+ skipFormat: false
@@ -0,0 +1,49 @@
1
+ # Backend Configuration Guide
2
+
3
+ The `backend` property defines how the table component retrieves data and whether a backend controller should be generated.
4
+
5
+ ## Backend Kinds
6
+
7
+ | Kind | Description |
8
+ | :--- | :--- |
9
+ | `none` | No backend integration. Uses mock data (default). |
10
+ | `nestjs` | Generates a NestJS controller and connects the table to it. |
11
+ | `open-api` | Connects the table to an existing OpenAPI-generated client. |
12
+ | `local` | Uses local data (static or from a local service). |
13
+ | `data-source` | Uses a custom data source implementation. |
14
+
15
+ ## NestJS Backend
16
+
17
+ When using `kind: nestjs`, the schematic will generate a controller in the specified `nestModule`.
18
+
19
+ ```yaml
20
+ backend:
21
+ kind: nestjs
22
+ project: api-app # Optional: Backend project name
23
+ nestModule: api-user
24
+ ```
25
+
26
+ ### Generated Controller
27
+ The generated controller will include a `getPage` method that handles:
28
+ - Pagination
29
+ - Sorting
30
+ - Filtering
31
+
32
+ ## OpenAPI Backend
33
+
34
+ When using `kind: open-api`, you must specify the `operationId` of the API endpoint.
35
+
36
+ ```yaml
37
+ backend:
38
+ kind: open-api
39
+ serverId: main # Optional: Server ID from OpenAPI spec
40
+ openApi:
41
+ operationId: listUsers
42
+ ```
43
+
44
+ ## Global Backend Options
45
+
46
+ | Property | Type | Description |
47
+ | :--- | :--- | :--- |
48
+ | `project` | `string` | The target project for the backend code. |
49
+ | `serverId` | `string` | The OpenAPI server ID to use. |
@@ -0,0 +1,58 @@
1
+ # Form Component Guide
2
+
3
+ The `form-component` schematic generates a reactive Angular form component, which can be used as a standalone page, a dialog, or integrated into other components like tables.
4
+
5
+ ## Basic Usage
6
+
7
+ To generate a form component, define it in your schematic configuration:
8
+
9
+ ```yaml
10
+ - package: "@rxap/schematic-angular"
11
+ name: form-component
12
+ options:
13
+ name: user-edit
14
+ project: admin-panel
15
+ feature: user
16
+ controlList:
17
+ - name: email
18
+ kind: input
19
+ label: Email Address
20
+ required: true
21
+ - name: role
22
+ kind: select
23
+ label: Role
24
+ options:
25
+ - value: admin
26
+ label: Admin
27
+ - value: user
28
+ label: User
29
+ ```
30
+
31
+ ## Properties
32
+
33
+ | Property | Type | Description |
34
+ | :--- | :--- | :--- |
35
+ | `name` | `string` | The name of the form component. |
36
+ | `project` | `string` | The target project. |
37
+ | `feature` | `string` | The feature module. |
38
+ | `controlList` | `array` | [Control Definitions](./form-control.md) |
39
+ | `window` | `boolean` | If `true`, the form is designed to open in a window/dialog. |
40
+ | `role` | `string` | The role of the form (e.g., `form`, `search`). |
41
+ | `matFormFieldDefaultOptions` | `object` | Default options for Material form fields (e.g., `appearance`). |
42
+
43
+ ## Usage in Tables
44
+
45
+ Forms are often used as actions within a [Table Component](./table-component.md). You can define a form inline using the `formOptions` property in a table action.
46
+
47
+ ```yaml
48
+ actionList:
49
+ - type: create
50
+ kind: form
51
+ icon: add
52
+ formOptions:
53
+ controlList:
54
+ - name: title
55
+ required: true
56
+ ```
57
+
58
+ For more details on integrating forms with tables, see the [Table Action Guide](./table-action.md#form-actions).