@rancher/shell 3.0.5-rc.3 → 3.0.5-rc.5

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 (200) hide show
  1. package/assets/images/icons/document.svg +3 -0
  2. package/assets/images/vendor/cognito.svg +1 -0
  3. package/assets/styles/app.scss +1 -0
  4. package/assets/styles/base/_basic.scss +10 -0
  5. package/assets/styles/base/_spacing.scss +29 -0
  6. package/assets/styles/global/_layout.scss +1 -1
  7. package/assets/styles/themes/_dark.scss +25 -0
  8. package/assets/styles/themes/_light.scss +65 -0
  9. package/assets/translations/en-us.yaml +322 -24
  10. package/assets/translations/zh-hans.yaml +8 -5
  11. package/components/Certificates.vue +5 -0
  12. package/components/FilterPanel.vue +156 -0
  13. package/components/{fleet/ForceDirectedTreeChart/index.vue → ForceDirectedTreeChart.vue} +47 -41
  14. package/components/IconOrSvg.vue +14 -35
  15. package/components/PromptRemove.vue +5 -1
  16. package/components/Resource/Detail/Card/PodsCard/Bubble.vue +13 -0
  17. package/components/Resource/Detail/Card/PodsCard/composable.ts +30 -0
  18. package/components/Resource/Detail/Card/PodsCard/index.vue +118 -0
  19. package/components/Resource/Detail/Card/ResourceUsageCard/composable.ts +51 -0
  20. package/components/Resource/Detail/Card/ResourceUsageCard/index.vue +79 -0
  21. package/components/Resource/Detail/Card/Scaler.vue +89 -0
  22. package/components/Resource/Detail/Card/StateCard/composables.ts +112 -0
  23. package/components/Resource/Detail/Card/StateCard/index.vue +39 -0
  24. package/components/Resource/Detail/Card/VerticalGap.vue +11 -0
  25. package/components/Resource/Detail/Card/__tests__/Card.test.ts +36 -0
  26. package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +84 -0
  27. package/components/Resource/Detail/Card/__tests__/ResourceUsageCard.test.ts +72 -0
  28. package/components/Resource/Detail/Card/__tests__/Scaler.test.ts +87 -0
  29. package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +53 -0
  30. package/components/Resource/Detail/Card/__tests__/VerticalGap.test.ts +14 -0
  31. package/components/Resource/Detail/Card/__tests__/index.test.ts +36 -0
  32. package/components/Resource/Detail/Card/index.vue +56 -0
  33. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +19 -0
  34. package/components/Resource/Detail/Metadata/Annotations/composable.ts +12 -0
  35. package/components/Resource/Detail/Metadata/Annotations/index.vue +26 -0
  36. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +103 -0
  37. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +281 -0
  38. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +111 -0
  39. package/components/Resource/Detail/Metadata/KeyValue.vue +130 -0
  40. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +18 -0
  41. package/components/Resource/Detail/Metadata/Labels/composable.ts +12 -0
  42. package/components/Resource/Detail/Metadata/Labels/index.vue +27 -0
  43. package/components/Resource/Detail/Metadata/Rectangle.vue +32 -0
  44. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +107 -0
  45. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +24 -0
  46. package/components/Resource/Detail/Metadata/__tests__/index.test.ts +91 -0
  47. package/components/Resource/Detail/Metadata/composables.ts +29 -0
  48. package/components/Resource/Detail/Metadata/index.vue +66 -0
  49. package/components/Resource/Detail/Page.vue +22 -0
  50. package/components/Resource/Detail/PercentageBar.vue +40 -0
  51. package/components/Resource/Detail/ResourceRow.vue +119 -0
  52. package/components/Resource/Detail/SpacedRow.vue +14 -0
  53. package/components/Resource/Detail/StatusBar.vue +59 -0
  54. package/components/Resource/Detail/StatusRow.vue +61 -0
  55. package/components/Resource/Detail/TitleBar/Title.vue +13 -0
  56. package/components/Resource/Detail/TitleBar/Top.vue +14 -0
  57. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +17 -0
  58. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +17 -0
  59. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +142 -0
  60. package/components/Resource/Detail/TitleBar/composable.ts +31 -0
  61. package/components/Resource/Detail/TitleBar/index.vue +124 -0
  62. package/components/Resource/Detail/Top/index.vue +34 -0
  63. package/components/Resource/Detail/__tests__/Page.test.ts +32 -0
  64. package/components/ResourceDetail/__tests__/index.test.ts +114 -0
  65. package/components/ResourceDetail/index.vue +64 -562
  66. package/components/ResourceDetail/legacy.vue +545 -0
  67. package/components/ResourceTable.vue +41 -7
  68. package/components/SlideInPanelManager.vue +76 -8
  69. package/components/SortableTable/index.vue +13 -2
  70. package/components/SortableTable/selection.js +21 -8
  71. package/components/StatusBadge.vue +6 -4
  72. package/components/SubtleLink.vue +25 -0
  73. package/components/Wizard.vue +12 -1
  74. package/components/YamlEditor.vue +1 -1
  75. package/components/__tests__/FilterPanel.test.ts +81 -0
  76. package/components/auth/AuthBanner.vue +2 -3
  77. package/components/auth/RoleDetailEdit.vue +45 -3
  78. package/components/auth/login/oidc.vue +6 -1
  79. package/components/fleet/FleetApplications.vue +181 -0
  80. package/components/fleet/FleetHelmOps.vue +115 -0
  81. package/components/fleet/FleetIntro.vue +58 -28
  82. package/components/fleet/FleetNoWorkspaces.vue +5 -1
  83. package/components/fleet/FleetOCIStorageSecret.vue +171 -0
  84. package/components/fleet/FleetRepos.vue +38 -76
  85. package/components/fleet/FleetResources.vue +50 -22
  86. package/components/fleet/FleetSummary.vue +26 -51
  87. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +213 -0
  88. package/components/fleet/__tests__/FleetSummary.test.ts +39 -39
  89. package/components/fleet/dashboard/Empty.vue +73 -0
  90. package/components/fleet/dashboard/ResourceCard.vue +183 -0
  91. package/components/fleet/dashboard/ResourceCardSummary.vue +199 -0
  92. package/components/fleet/dashboard/ResourceDetails.vue +196 -0
  93. package/components/fleet/dashboard/ResourcePanel.vue +376 -0
  94. package/components/form/ArrayList.vue +6 -0
  95. package/components/form/SimpleSecretSelector.vue +8 -2
  96. package/components/form/ValueFromResource.vue +31 -19
  97. package/components/formatter/FleetApplicationClustersReady.vue +77 -0
  98. package/components/formatter/FleetApplicationSource.vue +71 -0
  99. package/components/formatter/FleetSummaryGraph.vue +7 -0
  100. package/components/nav/Header.vue +8 -7
  101. package/components/nav/TopLevelMenu.helper.ts +55 -34
  102. package/components/nav/TopLevelMenu.vue +11 -0
  103. package/components/nav/Type.vue +4 -1
  104. package/composables/useI18n.ts +12 -11
  105. package/config/labels-annotations.js +14 -11
  106. package/config/product/auth.js +1 -0
  107. package/config/product/fleet.js +70 -17
  108. package/config/query-params.js +3 -1
  109. package/config/roles.ts +1 -0
  110. package/config/router/routes.js +20 -2
  111. package/config/secret.ts +15 -0
  112. package/config/settings.ts +3 -2
  113. package/config/table-headers.js +52 -22
  114. package/config/types.js +2 -0
  115. package/core/plugin-helpers.ts +3 -2
  116. package/detail/fleet.cattle.io.cluster.vue +28 -15
  117. package/detail/fleet.cattle.io.gitrepo.vue +10 -1
  118. package/detail/fleet.cattle.io.helmop.vue +157 -0
  119. package/dialog/HelmOpForceUpdateDialog.vue +132 -0
  120. package/dialog/RedeployWorkloadDialog.vue +164 -0
  121. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +56 -67
  122. package/edit/auth/oidc.vue +159 -93
  123. package/edit/fleet.cattle.io.gitrepo.vue +26 -33
  124. package/edit/fleet.cattle.io.helmop.vue +997 -0
  125. package/edit/management.cattle.io.fleetworkspace.vue +43 -10
  126. package/list/fleet.cattle.io.gitrepo.vue +1 -1
  127. package/list/fleet.cattle.io.helmop.vue +108 -0
  128. package/list/namespace.vue +5 -2
  129. package/mixins/auth-config.js +8 -1
  130. package/mixins/preset.js +100 -0
  131. package/mixins/resource-fetch-api-pagination.js +2 -0
  132. package/mixins/resource-fetch.js +1 -1
  133. package/mixins/resource-table-watch.js +45 -0
  134. package/models/__tests__/chart.test.ts +273 -0
  135. package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
  136. package/models/chart.js +144 -2
  137. package/models/fleet-application.js +385 -0
  138. package/models/fleet.cattle.io.bundle.js +9 -8
  139. package/models/fleet.cattle.io.gitrepo.js +41 -365
  140. package/models/fleet.cattle.io.helmop.js +228 -0
  141. package/models/management.cattle.io.authconfig.js +1 -0
  142. package/models/management.cattle.io.fleetworkspace.js +12 -0
  143. package/models/workload.js +14 -18
  144. package/package.json +2 -1
  145. package/pages/auth/verify.vue +13 -1
  146. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +37 -0
  147. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +80 -0
  148. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +54 -0
  149. package/pages/c/_cluster/apps/charts/StatusLabel.vue +33 -0
  150. package/pages/c/_cluster/apps/charts/index.vue +302 -484
  151. package/pages/c/_cluster/explorer/EventsTable.vue +1 -1
  152. package/pages/c/_cluster/fleet/__tests__/index.test.ts +426 -0
  153. package/pages/c/_cluster/fleet/application/_resource/_id.vue +14 -0
  154. package/pages/c/_cluster/fleet/application/_resource/create.vue +14 -0
  155. package/pages/c/_cluster/fleet/application/create.vue +340 -0
  156. package/pages/c/_cluster/fleet/application/index.vue +139 -0
  157. package/pages/c/_cluster/fleet/graph/config.js +277 -0
  158. package/pages/c/_cluster/fleet/index.vue +772 -330
  159. package/pages/explorer/resource/detail/configmap.vue +19 -0
  160. package/plugins/dashboard-store/actions.js +31 -9
  161. package/plugins/dashboard-store/getters.js +34 -21
  162. package/plugins/dashboard-store/mutations.js +51 -7
  163. package/plugins/dashboard-store/resource-class.js +14 -2
  164. package/plugins/steve/__tests__/subscribe.spec.ts +66 -1
  165. package/plugins/steve/actions.js +3 -0
  166. package/plugins/steve/steve-pagination-utils.ts +14 -13
  167. package/plugins/steve/subscribe.js +229 -42
  168. package/rancher-components/BadgeState/BadgeState.vue +3 -1
  169. package/rancher-components/Form/Checkbox/Checkbox.vue +2 -2
  170. package/rancher-components/RcItemCard/RcItemCard.test.ts +189 -0
  171. package/rancher-components/RcItemCard/RcItemCard.vue +425 -0
  172. package/rancher-components/RcItemCard/RcItemCardAction.vue +24 -0
  173. package/rancher-components/RcItemCard/index.ts +2 -0
  174. package/store/auth.js +1 -0
  175. package/store/catalog.js +62 -24
  176. package/store/index.js +33 -14
  177. package/store/slideInPanel.ts +6 -0
  178. package/store/type-map.js +1 -0
  179. package/types/fleet.d.ts +35 -0
  180. package/types/resources/settings.d.ts +19 -1
  181. package/types/shell/index.d.ts +339 -272
  182. package/types/store/dashboard-store.types.ts +17 -3
  183. package/types/store/pagination.types.ts +6 -1
  184. package/types/store/subscribe.types.ts +50 -0
  185. package/utils/auth.js +32 -3
  186. package/utils/fleet-types.ts +0 -0
  187. package/utils/fleet.ts +200 -1
  188. package/utils/pagination-utils.ts +26 -1
  189. package/utils/pagination-wrapper.ts +132 -50
  190. package/utils/settings.ts +4 -1
  191. package/utils/style.ts +39 -0
  192. package/utils/validators/formRules/__tests__/index.test.ts +36 -3
  193. package/utils/validators/formRules/index.ts +10 -3
  194. package/utils/window.js +11 -7
  195. package/components/__tests__/ApplicationCard.test.ts +0 -27
  196. package/components/cards/ApplicationCard.vue +0 -145
  197. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +0 -17
  198. package/config/secret.js +0 -14
  199. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +0 -249
  200. /package/{components/form/SSHKnownHosts → dialog}/__tests__/KnownHostsEditDialog.test.ts +0 -0
@@ -96,8 +96,8 @@ describe('formRules', () => {
96
96
  );
97
97
  });
98
98
 
99
- describe('gitRepository', () => {
100
- const message = JSON.stringify({ message: 'validation.git.repository' });
99
+ describe('urlRepository', () => {
100
+ const message = JSON.stringify({ message: 'validation.git.url' });
101
101
  const testCases = [
102
102
  // Valid HTTP(s)
103
103
  ['https://github.com/rancher/dashboard.git', undefined],
@@ -128,7 +128,40 @@ describe('formRules', () => {
128
128
  it.each(testCases)(
129
129
  'should return undefined or correct message based on the provided Git url: %p',
130
130
  (url, expected) => {
131
- const formRuleResult = formRules.gitRepository(url);
131
+ const formRuleResult = formRules.urlRepository(url);
132
+
133
+ expect(formRuleResult).toStrictEqual(expected);
134
+ }
135
+ );
136
+ });
137
+
138
+ describe('ociRegistry', () => {
139
+ const message = JSON.stringify({ message: 'validation.oci.url' });
140
+ const testCases = [
141
+ // Valid
142
+ ['oci://bucket/object', undefined],
143
+ ['oci://region.objectstorage.example.com/n', undefined],
144
+ ['oci://a', undefined],
145
+ ['oci://UPPERCASE/path', undefined],
146
+
147
+ // Invalid
148
+ ['http://example.com/oci', message],
149
+ ['https://oci.cloud.com', message],
150
+ ['ftp://oci.server.net', message],
151
+ ['/path/to/oci', message],
152
+ ['oci:/missing/slash', message],
153
+ ['oci:', message],
154
+ ['oci://', message],
155
+ ['oci://space between', message],
156
+ ['oci://resource multiple spaces', message],
157
+ ['', message],
158
+ [undefined, message],
159
+ ];
160
+
161
+ it.each(testCases)(
162
+ 'should return undefined or correct message based on the provided OCI url: %p',
163
+ (url, expected) => {
164
+ const formRuleResult = formRules.ociRegistry(url);
132
165
 
133
166
  expect(formRuleResult).toStrictEqual(expected);
134
167
  }
@@ -170,19 +170,25 @@ export default function(
170
170
 
171
171
  const url: Validator = (val: string) => val && !isUrl(val) ? t('validation.setting.serverUrl.url') : undefined;
172
172
 
173
- const gitRepository: Validator = (url: string) => {
173
+ const urlRepository: Validator = (url: string) => {
174
174
  const regexPart1 = /^((http|git|ssh|http(s)|file|\/?)|(git@[\w\.]+))(:(\/\/)?)/gm;
175
175
  const regexPart2 = /^([\w\.@\:\/\-]+)([\d\/\w.-]+?)(.git){0,1}(\/)?$/gm;
176
176
 
177
177
  if (url) {
178
178
  const urlPart2 = url.replaceAll(regexPart1, '');
179
179
 
180
- return !urlPart2 || url === urlPart2 || !regexPart2.test(urlPart2.replaceAll('%20', '')) ? t('validation.git.repository') : undefined;
180
+ return !urlPart2 || url === urlPart2 || !regexPart2.test(urlPart2.replaceAll('%20', '')) ? t('validation.git.url') : undefined;
181
181
  }
182
182
 
183
183
  return undefined;
184
184
  };
185
185
 
186
+ const ociRegistry: Validator = (url: string) => {
187
+ const regex = /^oci:\/\/\S+$/gm;
188
+
189
+ return !regex.test(url) ? t('validation.oci.url') : undefined;
190
+ };
191
+
186
192
  const alphanumeric: Validator = (val: string) => val && !/^[a-zA-Z0-9]+$/.test(val) ? t('validation.alphanumeric', { key }) : undefined;
187
193
 
188
194
  const interval: Validator = (val: string) => !/^\d+[hms]$/.test(val) ? t('validation.monitoring.route.interval', { key }) : undefined;
@@ -527,7 +533,7 @@ export default function(
527
533
  dnsLabelRestricted,
528
534
  externalName,
529
535
  fileRequired,
530
- gitRepository,
536
+ urlRepository,
531
537
  groupsAreValid,
532
538
  hostname,
533
539
  imageUrl,
@@ -542,6 +548,7 @@ export default function(
542
548
  minLength,
543
549
  minValue,
544
550
  noUpperCase,
551
+ ociRegistry,
545
552
  portNumber,
546
553
  registryUrl,
547
554
  required,
package/utils/window.js CHANGED
@@ -28,7 +28,7 @@ export class Popup {
28
28
  this.popup = null;
29
29
  }
30
30
 
31
- open(url, name, opt) {
31
+ open(url, name, opt, doNotPollForClosure) {
32
32
  this.onOpen();
33
33
  this.popup = open(url, name, opt);
34
34
 
@@ -36,11 +36,15 @@ export class Popup {
36
36
  throw new Error('Please disable your popup blocker for this site');
37
37
  }
38
38
 
39
- const timer = setInterval(() => {
40
- if (this.popup.closed) {
41
- clearInterval(timer);
42
- this.onClose();
43
- }
44
- }, 500);
39
+ // In some cases, for example, if the origin policy does not allow, we will think the window has closed
40
+ // when it has not - we will see it as closed, because we don't have access
41
+ if (!doNotPollForClosure) {
42
+ const timer = setInterval(() => {
43
+ if (this.popup.closed) {
44
+ clearInterval(timer);
45
+ this.onClose();
46
+ }
47
+ }, 500);
48
+ }
45
49
  }
46
50
  }
@@ -1,27 +0,0 @@
1
- import { mount } from '@vue/test-utils';
2
- import ApplicationCard from '@shell/components/cards/ApplicationCard.vue';
3
-
4
- describe('component: ApplicationCard', () => {
5
- const wrapper = mount(ApplicationCard, {
6
- slots: {
7
- cardIcon: '<i class="icon icon-fw icon-epinio"></i>',
8
- 'top-left': '<h1>Routes</h1> <ul><li> <a target="_blank" rel="noopener noreferrer nofollow"> route1 </a> </li> <li><a target="_blank" rel="noopener noreferrer nofollow"> route1 </a></li> </ul>',
9
- }
10
- });
11
-
12
- it.each([
13
- 'cardIcon',
14
- 'top-left',
15
- 'top-right',
16
- 'resourcesCount',
17
- ])('should have a populated %p slot', (slot) => {
18
- const content = '<div>text</div>';
19
- const ele = mount(ApplicationCard, { slots: { [slot]: content } });
20
-
21
- expect(ele.find(`[data-testid="${ slot }-section"`).find('div').html()).toContain(content);
22
- });
23
-
24
- it('should have card-icon slot with an icon', () => {
25
- expect(wrapper.find('[data-testid="cardIcon-section"]').find('i').classes()).toContain('icon-epinio');
26
- });
27
- });
@@ -1,145 +0,0 @@
1
- <script>
2
- export default {};
3
- </script>
4
-
5
- <template>
6
- <div class="application-card mt-20">
7
- <div
8
- class="application-card-icon"
9
- data-testid="cardIcon-section"
10
- >
11
- <slot name="cardIcon" />
12
- </div>
13
- <div class="application-card-details">
14
- <div class="application-card-details-top">
15
- <div data-testid="top-left-section">
16
- <slot name="top-left" />
17
- </div>
18
- <div data-testid="top-right-section">
19
- <slot name="top-right" />
20
- </div>
21
- </div>
22
- <div
23
- class="application-card-details-bottom"
24
- data-testid="resourcesCount-section"
25
- >
26
- <slot name="resourcesCount" />
27
- </div>
28
- </div>
29
- </div>
30
- </template>
31
-
32
- <style lang='scss'>
33
- .application-card {
34
- display: flex;
35
- flex-direction: row;
36
- outline: 1px solid var(--border);
37
- border-radius: var(--border-radius);
38
-
39
- @media only screen and (max-width: map-get($breakpoints, '--viewport-9')) {
40
- flex-direction: column;
41
- }
42
-
43
- &-icon {
44
- display: flex;
45
- align-items: center;
46
- justify-content: center;
47
- padding: 20px;
48
-
49
- i {
50
- font-size: 60px;
51
- opacity: 0.7;
52
- }
53
-
54
- @media only screen and (max-width: map-get($breakpoints, '--viewport-9')) {
55
- padding-bottom: 0;
56
- }
57
- }
58
-
59
- &-details {
60
- display: flex;
61
- flex-direction: column;
62
- padding: 20px;
63
- width: 100%;
64
- flex: 1;
65
-
66
- &-top, &-bottom {
67
- display: flex;
68
- flex-direction: row;
69
- justify-content: space-between;
70
- }
71
-
72
- &-top {
73
- display: flex;
74
- align-items: center;
75
- padding: 20px 0;
76
- border-bottom: 1px solid var(--border );
77
-
78
- & > div {
79
- display: flex;
80
- flex-direction: column;
81
- justify-content: center;
82
-
83
- h1 {
84
- margin: 0;
85
- padding: 0;
86
- font-size: $font-size-h2
87
- }
88
-
89
- ul {
90
- margin: 0;
91
- padding: 0;
92
- display: flex;
93
- flex-direction: row;
94
- justify-content: space-between;
95
-
96
- @media only screen and (max-width: map-get($breakpoints, '--viewport-9')) {
97
- flex-direction: column;
98
- }
99
-
100
- li {
101
- list-style: none;
102
- padding-right: 16px;
103
- }
104
- }
105
- }
106
-
107
- & > div:nth-child(2) {
108
- display: flex;
109
- padding: 5px 0;
110
- align-items: flex-end;
111
-
112
- span {
113
- padding: 5px 0;
114
- }
115
- }
116
- }
117
-
118
- &-bottom {
119
- display: grid;
120
- grid-auto-columns: minmax(0, 1fr);
121
- grid-auto-flow: column;
122
- grid-gap: 10px;
123
- padding: 30px 0 15px 0;
124
- font-size: 18px;
125
- font-weight: 300;
126
-
127
- div {
128
- display: flex;
129
- place-content: center;
130
- border-right: 1px solid var(--border);
131
- padding-right: 10px;
132
-
133
- &:last-child {
134
- border-right: 0;
135
- padding-right: 0%;
136
- }
137
- }
138
- }
139
-
140
- @media only screen and (max-width: map-get($breakpoints, '--viewport-9')) {
141
- padding-top: 0;
142
- }
143
- }
144
- }
145
- </style>
@@ -1,17 +0,0 @@
1
- // This is to mitigate an issue where the SVG icons being imported from the project weren't being rendered on Firefox
2
- // To know more about this technique, check this doc: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/defs
3
- export const getChartIcon = (type) => `<defs>
4
- <!-- GIT REPO ICON -->
5
- <svg id="git" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" style="enable-background:new 0 0 96 96" xml:space="preserve"><path class="st0" d="M92.138 43.888 52.018 3.77a5.918 5.918 0 0 0-8.369 0l-8.33 8.332L45.887 22.67a7.025 7.025 0 0 1 7.23 1.684 7.031 7.031 0 0 1 1.67 7.275l10.185 10.185a7.03 7.03 0 0 1 7.275 1.67 7.04 7.04 0 0 1 0 9.958 7.042 7.042 0 0 1-11.492-7.658l-9.5-9.499v24.997a7.09 7.09 0 0 1 1.861 1.331 7.042 7.042 0 1 1-7.65-1.537V35.849a7.04 7.04 0 0 1-3.822-9.234l-10.418-10.42-27.51 27.508a5.921 5.921 0 0 0 0 8.371l40.121 40.118a5.919 5.919 0 0 0 8.37 0l39.93-39.932a5.92 5.92 0 0 0 0-8.37z"/></svg>
6
- <!-- GENERIC BUNDLE ICON -->
7
- <svg id="bundle" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="#FFF"><path d="M16 3.2C8.931 3.2 3.2 8.931 3.2 16S8.931 28.8 16 28.8 28.8 23.069 28.8 16 23.069 3.2 16 3.2zm0 22.4c-5.302 0-9.6-4.298-9.6-9.6s4.298-9.6 9.6-9.6 9.6 4.298 9.6 9.6a9.6 9.6 0 0 1-9.6 9.6z"/><path d="m24.086 16-6.232-1.348.917-1.424-1.424.917-1.348-6.232-1.348 6.232-1.424-.917.917 1.424L7.912 16l6.232 1.348-.917 1.424 1.424-.917 1.348 6.232 1.348-6.232 1.424.917-.917-1.424L24.086 16zM16 16.814a.814.814 0 1 1 0-1.628.814.814 0 0 1 0 1.628z"/></svg>
8
- <!-- HELM BUNDLE ICON -->
9
- <svg id="helm" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500"><defs><style>.cls-1{fill:#fff}</style></defs><path class="cls-1" d="M136.53 121.135c-.573-.543-1.195-1.127-1.81-1.718-12.617-12.121-22.382-26.136-28.28-42.702-1.65-4.636-2.897-9.365-2.675-14.359.02-.473.02-.949.052-1.422.445-6.446 4.759-9.703 11.058-8.176a27.325 27.325 0 0 1 5.732 2.196c6.89 3.456 12.506 8.564 17.67 14.166A112.527 112.527 0 0 1 160 102.55a8.296 8.296 0 0 0 .39.86c.07.13.222.213.559.52a176.357 176.357 0 0 1 81.02-24.861c-.177-.876-.282-1.546-.448-2.2a112.494 112.494 0 0 1-2.653-36.957 84.075 84.075 0 0 1 4.445-21.764 31.326 31.326 0 0 1 5.476-10.17 15.687 15.687 0 0 1 3.164-2.822 7.026 7.026 0 0 1 8.032-.056 17.279 17.279 0 0 1 5.84 6.731 53.054 53.054 0 0 1 5.263 14.677 112.505 112.505 0 0 1 2.122 33.004 95.598 95.598 0 0 1-3.49 19.91c7.121 1.312 14.21 2.33 21.147 3.978a186.38 186.38 0 0 1 20.44 6.003 188.317 188.317 0 0 1 19.77 8.57c6.346 3.163 12.386 6.94 18.718 10.537.206-.433.505-.95.706-1.502a108.66 108.66 0 0 1 32.901-46.762 37.758 37.758 0 0 1 11.822-6.883 17.246 17.246 0 0 1 3.679-.845c6.264-.717 8.893 3.224 9.356 7.932a29.944 29.944 0 0 1-.774 10.354 87.906 87.906 0 0 1-10.73 24.688c-6.79 10.972-14.85 20.855-25.093 28.83-.302.236-.568.519-1.08.99a177.78 177.78 0 0 1 26.593 30.883 10.962 10.962 0 0 1-1.689.298c-10.595.015-21.19-.019-31.786.046a4.004 4.004 0 0 1-3.172-1.69 147.875 147.875 0 0 0-88.178-46.549 143.359 143.359 0 0 0-30.28-1.169 146.407 146.407 0 0 0-82.537 31.81 140.067 140.067 0 0 0-16.976 15.843 4.728 4.728 0 0 1-3.863 1.757c-10.121-.07-20.242-.035-30.363-.035h-2.152c.618-2.408 6.84-10.938 13.883-18.553 5.252-5.679 10.817-11.07 16.468-16.818ZM394.53 347.912a176.639 176.639 0 0 1-23.974 27.164l1.862 1.55a108.315 108.315 0 0 1 33.683 48.146 34.618 34.618 0 0 1 2.202 14.42 14.885 14.885 0 0 1-.748 3.692 7.208 7.208 0 0 1-8.157 5.023 22.233 22.233 0 0 1-6.763-2.006 51.232 51.232 0 0 1-9.182-5.815 107.592 107.592 0 0 1-32.936-46.707c-.187-.514-.392-1.02-.722-1.877a194.65 194.65 0 0 1-25.012 14.008 181.67 181.67 0 0 1-26.687 9.724 187.556 187.556 0 0 1-28.305 5.388c.168.84.265 1.51.438 2.16a109.172 109.172 0 0 1 2.97 36.442 80.804 80.804 0 0 1-4.422 22.478 78.25 78.25 0 0 1-4.165 8.744 13.39 13.39 0 0 1-2.339 2.971c-3.98 4.11-8.732 4.144-12.611-.074a27.28 27.28 0 0 1-3.907-5.617c-3.077-5.776-4.66-12.056-5.791-18.46a116.863 116.863 0 0 1-1.36-26.465 94.48 94.48 0 0 1 2.885-19.186c.14-.532.268-1.07.372-1.61.026-.137-.064-.297-.171-.738a176.121 176.121 0 0 1-80.969-24.994c-.41.91-.762 1.675-1.101 2.446a110.477 110.477 0 0 1-30.901 41.42 38.16 38.16 0 0 1-12.047 6.96 12.09 12.09 0 0 1-6.516.7 7.119 7.119 0 0 1-5.403-4.49c-1.416-3.424-1.165-6.985-.684-10.517a55.453 55.453 0 0 1 4.307-14.25 112.5 112.5 0 0 1 26.512-37.763c.459-.435.93-.857 1.38-1.3a3.76 3.76 0 0 0 .366-.655 178.905 178.905 0 0 1-28.47-31.317c.985-.08 1.644-.18 2.303-.18 10.514-.01 21.029.027 31.543-.044a4.706 4.706 0 0 1 3.703 1.626 146.946 146.946 0 0 0 39.403 28.885 139.947 139.947 0 0 0 49.704 14.774q70.68 6.87 121.6-42.854a7.646 7.646 0 0 1 5.992-2.444c9.802.121 19.605.05 29.408.05h2.534ZM350.736 197.762c2.787 0 5.47.189 8.115-.05 2.995-.271 5.139.8 7.323 2.813 12.613 11.622 25.357 23.1 38.059 34.627.638.58 1.29 1.144 2.11 1.87.764-.657 1.481-1.243 2.165-1.865q19.638-17.878 39.248-35.787a5.448 5.448 0 0 1 4.204-1.646c3.218.13 6.446.038 9.84.038V303.13c-1.722.504-24.875.604-27.638.061V249.83l-.537-.254-27.238 24.841-27.458-24.736-.524.192c-.023 4.454-.008 8.908-.01 13.362q-.005 6.64-.001 13.28v26.871h-27.428c-.514-1.773-.753-99.662-.23-105.623ZM97.634 197.882h27.264c.55 1.753.658 102.972.094 105.525H97.705c-.15-6.703-.048-13.384-.067-20.061-.018-6.623-.004-13.245-.004-20.04H63.847v39.741c-2.06.615-25.334.674-27.648.123V197.894h27.538v37.19c1.968.568 30.924.673 33.872.129.009-2.978.02-6.027.024-9.076q.007-4.744.001-9.487v-18.768ZM157.576 303.368V198.195c1.617-.53 61.545-.736 65.462-.205v22.414c-.879.063-1.786.184-2.693.185q-16.008.02-32.017.009h-2.968v17.433h33.347v23.192h-33.049c-.553 1.985-.705 15.817-.256 19.646.845.057 1.75.17 2.655.17q16.01.019 32.018.009h2.97v22.32ZM254.283 303.409c-.5-2.823-.4-103.602.097-105.518h27.162v77.765c1.172.06 2.092.149 3.011.15q16.128.014 32.256.006h2.908v27.597Z"/></svg>
10
- <!-- RESOURCE DEPLOYMENT ICON -->
11
- <svg id="deployment" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M24.01 20.027v2h-24v-2h4v-1a2.006 2.006 0 0 1-2-2v-10a2.006 2.006 0 0 1 2-2h1.996v2H4.01v10h16v-10h-2.004v-2h2.004a2.006 2.006 0 0 1 2 2l-.01 10a1.997 1.997 0 0 1-1.99 2v1Zm-9-6.012-3-3-3 3h2v2.01h2v-2.01Zm.995-7.991a4 4 0 1 1-4-4 4.001 4.001 0 0 1 4 4Zm-4.4 2.96v-.56a.802.802 0 0 1-.8-.8v-.4L9.06 5.479a2.958 2.958 0 0 0 2.545 3.505Zm2.658-1.007a2.977 2.977 0 0 0-1.068-4.704.797.797 0 0 1-.79.75h-.8v.8a.401.401 0 0 1-.4.4h-.8v.8h2.4a.401.401 0 0 1 .4.4v1.2h.4a.787.787 0 0 1 .658.354Z" fill="#fff"/></svg>
12
- <!-- NODE ICON -->
13
- <svg id="node" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g fill="#fff"><circle cx="12" cy="3" r="1"/><circle cx="20" cy="8" r="1"/><circle cx="20" cy="16" r="1"/><circle cx="4" cy="8" r="1"/><circle cx="4" cy="16" r="1"/><path d="M20 14v-4a1.992 1.992 0 0 1-1.481-3.333l-4.783-2.69a1.983 1.983 0 0 1-3.472 0l-4.783 2.69A1.992 1.992 0 0 1 4 10v4a1.992 1.992 0 0 1 1.481 3.333l4.783 2.69a1.991 1.991 0 0 1 1.236-.952v-5.142a2 2 0 1 1 1 0v5.142a1.991 1.991 0 0 1 1.236.953l4.783-2.69A1.992 1.992 0 0 1 20 14Z"/><circle cx="12" cy="21" r="1"/><circle cx="12" cy="12" r="1"/></g></svg>
14
- <!-- RESOURCE OTHER ICON -->
15
- <svg id="other" xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#FFF"><path d="M27.476 10.22H14.83l-1.558-3.115a1.327 1.327 0 0 0-1.184-.732H4.522c-.731 0-1.324.593-1.324 1.324v16.606c0 .731.593 1.324 1.324 1.324h22.953c.731 0 1.324-.593 1.324-1.324v-12.76c0-.731-.593-1.324-1.324-1.324z"/></svg>
16
- </defs>
17
- <use id="customIcon" href="#${ type }" fill="#fff" />`;
package/config/secret.js DELETED
@@ -1,14 +0,0 @@
1
- export const SECRET_TYPES = {
2
- OPAQUE: 'Opaque',
3
- SERVICE_ACCT: 'kubernetes.io/service-account-token',
4
- DOCKER_JSON: 'kubernetes.io/dockerconfigjson',
5
- BASIC: 'kubernetes.io/basic-auth',
6
- SSH: 'kubernetes.io/ssh-auth',
7
- TLS: 'kubernetes.io/tls',
8
- BOOTSTRAP: 'bootstrap.kubernetes.io/token',
9
- ISTIO_TLS: 'istio.io/key-and-cert',
10
- HELM_RELEASE: 'helm.sh/release.v1',
11
- FLEET_CLUSTER: 'fleet.cattle.io/cluster-registration-values',
12
- CLOUD_CREDENTIAL: 'provisioning.cattle.io/cloud-credential',
13
- RKE_AUTH_CONFIG: 'rke.cattle.io/auth-config'
14
- };
@@ -1,249 +0,0 @@
1
- import { STATES } from '@shell/plugins/dashboard-store/resource-class';
2
- import { FLEET } from '@shell/config/types';
3
-
4
- // some default values
5
- const defaultNodeRadius = 20;
6
- const defaultNodePadding = 15;
7
- const chartWidth = 800;
8
- const chartHeight = 500;
9
- const fdcStrength = -300;
10
- const fdcDistanceMax = 500;
11
- const fdcForceCollide = 80;
12
- const fdcAlphaDecay = 0.05;
13
-
14
- // setting up default sim params
15
- // check documentation here: https://github.com/d3/d3-force#forceSimulation
16
- const simulationParams = {
17
- fdcStrength,
18
- fdcDistanceMax,
19
- fdcForceCollide,
20
- fdcAlphaDecay
21
- };
22
-
23
- /**
24
- * Represents a config object for FDC type
25
- * @param {Function} parseData - Parses the specific data for each chart. Format must be compliant with d3 data format
26
- * @example data format => { parent: {..., children: [ {..., children: []} ] } }
27
- * @param {Function} extendNodeClass - Extends the classes for each node so that the styling is correctly applied
28
- * @param {Function} nodeDimensions - Sets the radius of the nodes according each data type
29
- * @param {Function} infoDetails - Prepares the data to be displayed in the info box on the right-side of the ForceDirectedTreeChart component
30
- */
31
- export const gitRepoGraphConfig = {
32
- chartWidth,
33
- chartHeight,
34
- simulationParams,
35
- /**
36
- * data prop that is used to trigger the watcher in the component. Should follow format "data.xxxxxx"
37
- */
38
- watcherProp: 'data.bundles',
39
- /**
40
- * Mandatory params for a child object in parseData (for statuses to work)
41
- * @param {String} state
42
- * @param {String} stateDisplay
43
- * @param {String} stateColor
44
- * @param {String} matchingId (this can be different than the actual ID, depends on the usecase)
45
- */
46
- parseData: (data) => {
47
- const bundles = data.bundles.map((bundle, i) => {
48
- const bundleLowercaseState = bundle.state ? bundle.state.toLowerCase() : 'unknown';
49
- const bundleStateColor = STATES[bundleLowercaseState].color;
50
-
51
- const repoChild = {
52
- id: bundle.id,
53
- matchingId: bundle.id,
54
- type: bundle.type,
55
- state: bundle.state,
56
- stateLabel: bundle.stateDisplay,
57
- stateColor: bundleStateColor,
58
- isBundle: true,
59
- errorMsg: bundle.stateDescription,
60
- detailLocation: bundle.detailLocation,
61
- children: []
62
- };
63
-
64
- const bds = data.bundleDeployments.filter((bd) => bundle.id === `${ bd.metadata?.labels?.['fleet.cattle.io/bundle-namespace'] }/${ bd.metadata?.labels?.['fleet.cattle.io/bundle-name'] }`);
65
-
66
- bds.forEach((bd) => {
67
- const bdLowercaseState = bd.state ? bd.state.toLowerCase() : 'unknown';
68
- const bdStateColor = STATES[bdLowercaseState]?.color;
69
-
70
- const cluster = data.clustersList.find((cluster) => {
71
- const clusterString = `${ cluster.namespace }-${ cluster.name }`;
72
-
73
- return bd.id.includes(clusterString);
74
- });
75
-
76
- repoChild.children.push({
77
- id: bd.id,
78
- matchingId: bd.id,
79
- type: bd.type,
80
- clusterLabel: cluster ? cluster.namespacedName : undefined,
81
- clusterDetailLocation: cluster ? cluster.detailLocation : undefined,
82
- state: bd.state,
83
- stateLabel: bd.stateDisplay,
84
- stateColor: bdStateColor,
85
- isBundleDeployment: true,
86
- errorMsg: bd.stateDescription,
87
- detailLocation: bd.detailLocation,
88
- });
89
- });
90
-
91
- return repoChild;
92
- });
93
-
94
- const repoLowercaseState = data.state ? data.state.toLowerCase() : 'unknown';
95
- const repoStateColor = STATES[repoLowercaseState].color;
96
-
97
- const finalData = {
98
- id: data.id,
99
- matchingId: data.id,
100
- type: data.type,
101
- state: data.state,
102
- stateLabel: data.stateDisplay,
103
- stateColor: repoStateColor,
104
- isRepo: true,
105
- errorMsg: data.stateDescription,
106
- detailLocation: data.detailLocation,
107
- children: bundles
108
- };
109
-
110
- return finalData;
111
- },
112
- /**
113
- * Used to add relevant classes to each main node instance
114
- */
115
- extendNodeClass: ({ data }) => {
116
- const classArray = [];
117
-
118
- // node type
119
- data?.isRepo ? classArray.push('repo') : data?.isBundle ? classArray.push('bundle') : classArray.push('bundle-deployment');
120
-
121
- return classArray;
122
- },
123
- /**
124
- * Used to add the correct icon to each node
125
- */
126
- fetchNodeIcon: ({ data }) => {
127
- if (data?.isRepo) {
128
- return 'git';
129
- }
130
-
131
- if ( data?.isBundle) {
132
- if (data?.id.indexOf('helm') !== -1) {
133
- return 'helm';
134
- }
135
-
136
- return 'bundle';
137
- }
138
-
139
- if (data?.isBundleDeployment) {
140
- return 'node';
141
- }
142
- },
143
- /**
144
- * Used to set node dimensions
145
- */
146
- nodeDimensions: ({ data }) => {
147
- if (data?.isRepo) {
148
- const radius = defaultNodeRadius * 3;
149
- const padding = defaultNodePadding * 2.5;
150
-
151
- return {
152
- radius,
153
- size: (radius * 2) - padding,
154
- position: -(((radius * 2) - padding) / 2)
155
- };
156
- }
157
- if (data?.isBundle) {
158
- const radius = defaultNodeRadius * 2;
159
- const padding = defaultNodePadding;
160
-
161
- if (data?.id.indexOf('helm') !== -1) {
162
- return {
163
- radius,
164
- size: (radius * 1.5) - padding,
165
- position: -(((radius * 1.5) - padding) / 2)
166
- };
167
- }
168
-
169
- return {
170
- radius,
171
- size: (radius * 1.7) - padding,
172
- position: -(((radius * 1.7) - padding) / 2)
173
- };
174
- }
175
-
176
- return {
177
- radius: defaultNodeRadius,
178
- size: (defaultNodeRadius * 2) - defaultNodePadding,
179
- position: -(((defaultNodeRadius * 2) - defaultNodePadding) / 2)
180
- };
181
- },
182
- /**
183
- * Use @param {Obj} valueObj for compound values (usually associated with a template of some sort on the actual component)
184
- * or @param value for a simple straightforward value
185
- */
186
- infoDetails: (data) => {
187
- let dataType;
188
-
189
- switch (data.type) {
190
- case FLEET.GIT_REPO:
191
- dataType = 'GitRepo';
192
- break;
193
- case FLEET.BUNDLE:
194
- dataType = 'Bundle';
195
- break;
196
- case FLEET.BUNDLE_DEPLOYMENT:
197
- dataType = 'BundleDeployment';
198
- break;
199
- default:
200
- dataType = data.type;
201
- break;
202
- }
203
-
204
- const moreInfo = [
205
- {
206
- labelKey: 'fleet.fdc.type',
207
- value: dataType
208
- },
209
- {
210
- type: 'title-link',
211
- labelKey: 'fleet.fdc.id',
212
- valueObj: {
213
- label: data.id,
214
- detailLocation: data.detailLocation
215
- }
216
- }
217
- ];
218
-
219
- if (data.isBundleDeployment) {
220
- moreInfo.push({
221
- type: 'title-link',
222
- labelKey: 'fleet.fdc.cluster',
223
- valueObj: {
224
- label: data.clusterLabel,
225
- detailLocation: data.clusterDetailLocation
226
- }
227
- });
228
- }
229
-
230
- moreInfo.push({
231
- type: 'state-badge',
232
- labelKey: 'fleet.fdc.state',
233
- valueObj: {
234
- stateColor: data.stateColor,
235
- stateLabel: data.stateLabel
236
- }
237
- });
238
-
239
- if (data.errorMsg) {
240
- moreInfo.push({
241
- type: 'single-error',
242
- labelKey: 'fleet.fdc.error',
243
- value: data.errorMsg
244
- });
245
- }
246
-
247
- return moreInfo;
248
- }
249
- };