@rancher/shell 2.0.0 → 2.0.2-rc.1

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 (154) hide show
  1. package/assets/translations/en-us.yaml +69 -29
  2. package/assets/translations/zh-hans.yaml +1 -0
  3. package/components/AlertTable.vue +17 -7
  4. package/components/AssignTo.vue +2 -0
  5. package/components/GrafanaDashboard.vue +6 -4
  6. package/components/PromptRemove.vue +1 -0
  7. package/components/Questions/index.vue +2 -2
  8. package/components/auth/RoleDetailEdit.vue +5 -4
  9. package/components/form/KeyValue.vue +1 -0
  10. package/components/form/Members/ClusterPermissionsEditor.vue +1 -1
  11. package/components/form/ProjectMemberEditor.vue +1 -1
  12. package/components/form/ResourceLabeledSelect.vue +11 -3
  13. package/components/form/Taints.vue +13 -7
  14. package/components/form/__tests__/Taints.test.ts +70 -0
  15. package/components/form/labeled-select-utils/labeled-select.utils.ts +1 -1
  16. package/components/nav/Header.vue +1 -1
  17. package/components/nav/TopLevelMenu.vue +1 -4
  18. package/config/pagination-table-headers.js +5 -4
  19. package/config/product/auth.js +1 -1
  20. package/config/roles.ts +34 -19
  21. package/config/router/navigation-guards/attempt-first-login.js +1 -1
  22. package/config/router/navigation-guards/authentication.js +1 -1
  23. package/config/router/navigation-guards/i18n.js +13 -0
  24. package/config/router/navigation-guards/index.js +3 -1
  25. package/config/router/navigation-guards/load-initial-settings.js +1 -1
  26. package/config/router/navigation-guards/runtime-extension-route.js +31 -0
  27. package/config/router/routes.js +10 -1
  28. package/config/uiplugins.js +130 -61
  29. package/core/plugin.ts +5 -0
  30. package/core/plugins.js +7 -1
  31. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +42 -0
  32. package/detail/provisioning.cattle.io.cluster.vue +4 -4
  33. package/dialog/DeactivateDriverDialog.vue +30 -11
  34. package/edit/auth/__tests__/oidc.test.ts +2 -2
  35. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +86 -13
  36. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +3 -134
  37. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +209 -0
  38. package/edit/provisioning.cattle.io.cluster/index.vue +8 -4
  39. package/edit/provisioning.cattle.io.cluster/rke2.vue +115 -17
  40. package/edit/provisioning.cattle.io.cluster/tabs/AddOnAdditionalManifest.vue +50 -0
  41. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +29 -64
  42. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +42 -3
  43. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +22 -86
  44. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +8 -2
  45. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +61 -0
  46. package/edit/token.vue +2 -1
  47. package/initialize/entry-helpers.js +4 -24
  48. package/list/management.cattle.io.feature.vue +4 -2
  49. package/middleware/authenticated.js +0 -19
  50. package/mixins/__tests__/chart.test.ts +4 -1
  51. package/mixins/auth-config.js +1 -1
  52. package/mixins/chart.js +30 -14
  53. package/models/__tests__/apps.deployment.test.ts +93 -0
  54. package/models/apps.deployment.js +18 -4
  55. package/models/driver.js +3 -2
  56. package/models/kontainerdriver.js +30 -13
  57. package/models/management.cattle.io.authconfig.js +2 -2
  58. package/models/management.cattle.io.cluster.js +2 -2
  59. package/models/management.cattle.io.user.js +3 -3
  60. package/models/nodedriver.js +35 -13
  61. package/models/provisioning.cattle.io.cluster.js +4 -0
  62. package/package.json +3 -2
  63. package/pages/404.vue +15 -0
  64. package/pages/auth/login.vue +4 -1
  65. package/pages/auth/setup.vue +4 -1
  66. package/pages/c/_cluster/apps/charts/install.vue +3 -2
  67. package/pages/c/_cluster/explorer/index.vue +5 -0
  68. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +0 -3
  69. package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +1 -4
  70. package/pages/c/_cluster/manager/jwt.authentication/index.vue +10 -4
  71. package/pages/c/_cluster/settings/performance.vue +2 -2
  72. package/pages/c/_cluster/uiplugins/InstallDialog.vue +2 -1
  73. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +7 -10
  74. package/pages/c/_cluster/uiplugins/index.vue +24 -16
  75. package/pages/home.vue +1 -13
  76. package/plugins/dashboard-store/actions.js +1 -1
  77. package/plugins/dashboard-store/getters.js +1 -1
  78. package/plugins/steve/__tests__/getters.test.ts +5 -5
  79. package/plugins/steve/getters.js +6 -4
  80. package/plugins/steve/hybrid-class.js +1 -5
  81. package/promptRemove/pod.vue +15 -7
  82. package/scripts/extension/helm/charts/ui-plugin-server/Chart.yaml +1 -1
  83. package/scripts/publish-shell.sh +54 -55
  84. package/scripts/test-plugins-build.sh +45 -39
  85. package/shell/types/shell/index.d.ts +2 -0
  86. package/store/auth.js +1 -1
  87. package/store/index.js +1 -1
  88. package/store/type-map.js +4 -2
  89. package/types/store/pagination.types.ts +1 -1
  90. package/utils/__tests__/kontainer.test.ts +89 -1
  91. package/utils/auth.js +1 -1
  92. package/utils/cluster.js +9 -0
  93. package/utils/kontainer.ts +5 -1
  94. package/utils/settings.ts +3 -1
  95. package/utils/version.js +2 -1
  96. package/creators/app/app.package.json +0 -13
  97. package/creators/app/files/.eslintignore +0 -16
  98. package/creators/app/files/.eslintrc.js +0 -173
  99. package/creators/app/files/.gitignore +0 -70
  100. package/creators/app/files/.gitlab-ci.yml +0 -14
  101. package/creators/app/files/.vscode/settings.json +0 -21
  102. package/creators/app/files/babel.config.js +0 -1
  103. package/creators/app/files/tsconfig.json +0 -42
  104. package/creators/app/files/vue.config.js +0 -6
  105. package/creators/app/init +0 -120
  106. package/creators/app/package.json +0 -25
  107. package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +0 -24
  108. package/creators/pkg/files/.github/workflows/build-extension-charts.yml +0 -22
  109. package/creators/pkg/files/babel.config.js +0 -1
  110. package/creators/pkg/files/index.ts +0 -14
  111. package/creators/pkg/files/tsconfig.json +0 -53
  112. package/creators/pkg/files/vue.config.js +0 -1
  113. package/creators/pkg/init +0 -286
  114. package/creators/pkg/package.json +0 -19
  115. package/creators/pkg/pkg.package.json +0 -21
  116. package/creators/pkg/vue-shim.ts +0 -4
  117. package/creators/update/init +0 -56
  118. package/creators/update/package.json +0 -20
  119. package/creators/update/upgrade +0 -56
  120. package/rancher-components/components/Accordion/Accordion.test.ts +0 -45
  121. package/rancher-components/components/Accordion/Accordion.vue +0 -86
  122. package/rancher-components/components/Accordion/index.ts +0 -1
  123. package/rancher-components/components/BadgeState/BadgeState.test.ts +0 -12
  124. package/rancher-components/components/BadgeState/BadgeState.vue +0 -111
  125. package/rancher-components/components/BadgeState/index.ts +0 -1
  126. package/rancher-components/components/Banner/Banner.test.ts +0 -59
  127. package/rancher-components/components/Banner/Banner.vue +0 -244
  128. package/rancher-components/components/Banner/index.ts +0 -1
  129. package/rancher-components/components/Card/Card.test.ts +0 -37
  130. package/rancher-components/components/Card/Card.vue +0 -167
  131. package/rancher-components/components/Card/index.ts +0 -1
  132. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +0 -68
  133. package/rancher-components/components/Form/Checkbox/Checkbox.vue +0 -421
  134. package/rancher-components/components/Form/Checkbox/index.ts +0 -1
  135. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +0 -40
  136. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +0 -402
  137. package/rancher-components/components/Form/LabeledInput/index.ts +0 -1
  138. package/rancher-components/components/Form/Radio/RadioButton.test.ts +0 -33
  139. package/rancher-components/components/Form/Radio/RadioButton.vue +0 -293
  140. package/rancher-components/components/Form/Radio/RadioGroup.test.ts +0 -30
  141. package/rancher-components/components/Form/Radio/RadioGroup.vue +0 -259
  142. package/rancher-components/components/Form/Radio/index.ts +0 -2
  143. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +0 -172
  144. package/rancher-components/components/Form/TextArea/index.ts +0 -1
  145. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +0 -94
  146. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +0 -152
  147. package/rancher-components/components/Form/ToggleSwitch/index.ts +0 -1
  148. package/rancher-components/components/Form/index.ts +0 -5
  149. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +0 -156
  150. package/rancher-components/components/LabeledTooltip/index.ts +0 -1
  151. package/rancher-components/components/StringList/StringList.test.ts +0 -754
  152. package/rancher-components/components/StringList/StringList.vue +0 -650
  153. package/rancher-components/components/StringList/index.ts +0 -1
  154. package/types/shell/index.d.ts +0 -4585
package/creators/pkg/init DELETED
@@ -1,286 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- const fs = require('fs-extra');
4
- const path = require('path');
5
- const https = require('https');
6
-
7
- const targets = {
8
- dev: './node_modules/.bin/nuxt dev',
9
- nuxt: './node_modules/.bin/nuxt',
10
- };
11
-
12
- const files = [
13
- 'tsconfig.json',
14
- 'vue.config.js',
15
- 'babel.config.js',
16
- 'index.ts'
17
- ];
18
-
19
- const topLevelScripts = {
20
- 'build-pkg': './node_modules/@rancher/shell/scripts/build-pkg.sh',
21
- 'serve-pkgs': './node_modules/@rancher/shell/scripts/serve-pkgs',
22
- 'publish-pkgs': './node_modules/@rancher/shell/scripts/extension/publish',
23
- 'parse-tag-name': './node_modules/@rancher/shell/scripts/extension/parse-tag-name'
24
- };
25
-
26
- const typeFolders = [
27
- 'l10n',
28
- 'models',
29
- 'edit',
30
- 'list',
31
- 'detail'
32
- ];
33
-
34
- const shellPkgPath = 'node_modules/@rancher/shell';
35
-
36
- console.log('');
37
- console.log('Creating Skeleton UI Package');
38
-
39
- const args = process.argv;
40
-
41
- if (args.length !== 3) {
42
- console.log('Expected single argument of package name');
43
- }
44
-
45
- const name = args[2];
46
- const folder = path.resolve('.');
47
- const pkgFolder = path.join(folder, 'pkg', name);
48
-
49
- let addTypeFolders = false;
50
- let addWorkflowFolder = false;
51
- let ignoreShellPkgPathCheck = false;
52
-
53
- if (args.length > 3) {
54
- for (let i = 3; i < args.length; i++) {
55
- switch (args[i]) {
56
- case '-t':
57
- addTypeFolders = true;
58
- break;
59
- case '-w':
60
- addWorkflowFolder = true;
61
- break;
62
- case '-i':
63
- ignoreShellPkgPathCheck = true;
64
- break;
65
- default:
66
- break;
67
- }
68
- }
69
- }
70
-
71
-
72
- if (!ignoreShellPkgPathCheck && !fs.existsSync(path.join(pkgFolder, `../../${ shellPkgPath }/package.json`))) {
73
- console.log('');
74
- console.log('@rancher/shell not found in node_modules! Please do "yarn install" and make sure you run this command from the base folder of your app');
75
- process.exit(1);
76
- }
77
-
78
- const isNodeModulesShell = !fs.existsSync(path.join(folder, 'shell'));
79
-
80
- if (!isNodeModulesShell) {
81
- Object.keys(topLevelScripts).forEach((script) => {
82
- topLevelScripts[script] = topLevelScripts[script].replace('./node_modules/@rancher/shell', './shell');
83
- });
84
- }
85
-
86
- console.log(` Creating package folder: ${ pkgFolder }`);
87
-
88
- fs.ensureDirSync(pkgFolder);
89
-
90
- console.log(' Creating package.json');
91
- fs.copySync(path.join(__dirname, 'pkg.package.json'), path.join(pkgFolder, 'package.json'));
92
-
93
- const rawdata = fs.readFileSync(path.join(pkgFolder, 'package.json'));
94
- const pkg = JSON.parse(rawdata);
95
-
96
- pkg.name = name;
97
- pkg.description = `${ name } plugin`;
98
-
99
- Object.keys(targets).forEach((target) => {
100
- if (!pkg.scripts[target]) {
101
- pkg.scripts[target] = targets[target];
102
- console.log(` Adding script '${ target }' to package.json`);
103
- }
104
- });
105
-
106
- // Add annotation for the latest Rancher version by default
107
- function fetchLatestVersion() {
108
- console.log(' Fetching latest Rancher Version');
109
- const options = { headers: { 'User-Agent': 'nodejs' } };
110
-
111
- https.get('https://api.github.com/repos/rancher/rancher/releases/latest', options, (res) => {
112
- const { statusCode } = res;
113
- const contentType = res.headers['content-type'];
114
-
115
- let error;
116
-
117
- if ( statusCode !== 200 ) {
118
- error = new Error(' Request Failed.\n' +
119
- ` Status Code: ${ statusCode }`);
120
- } else if ( !/^application\/json/.test(contentType) ) {
121
- error = new Error(' Invalid content-type.\n' +
122
- ` Expected application/json but received ${ contentType }`);
123
- }
124
-
125
- if ( error ) {
126
- console.log(error.message);
127
-
128
- res.resume();
129
-
130
- return;
131
- }
132
-
133
- res.setEncoding('utf8');
134
- let rawData = '';
135
-
136
- res.on('data', (chunk) => {
137
- rawData += chunk;
138
- });
139
- res.on('end', () => {
140
- try {
141
- const release = JSON.parse(rawData);
142
-
143
- if ( release.tag_name ) {
144
- console.log(` Adding rancher-version annotation '>= ${ release.tag_name }' to package.json`);
145
-
146
- pkg.rancher = { annotations: { 'catalog.cattle.io/rancher-version': `>= ${ release.tag_name }` } };
147
-
148
- // read shell version from node_modules/@rancher/shell/package.json
149
- const shellPkgRawData = fs.readFileSync(path.join(pkgFolder, `../../${ shellPkgPath }/package.json`));
150
- const shellPkg = JSON.parse(shellPkgRawData);
151
- const latestShellVersion = shellPkg.version || null;
152
-
153
- if (!latestShellVersion) {
154
- console.log('Could not get a shell version from node_modules/@rancher/shell/package.json in app');
155
- } else {
156
- const splitShellVersion = latestShellVersion.split('.');
157
- const majorVersion = splitShellVersion[0];
158
- const minorVersion = splitShellVersion[1];
159
- const parsedShellVersion = `${majorVersion}.${minorVersion}.0`;
160
-
161
- console.log(` Adding catalog.cattle.io/ui-extensions-version '>= ${parsedShellVersion }' to package.json`);
162
-
163
- pkg.rancher.annotations['catalog.cattle.io/ui-extensions-version'] = `>= ${ parsedShellVersion }`;
164
- }
165
-
166
- writePackageJson();
167
- }
168
- } catch (e) {
169
- console.log(' Error parsing release data', e);
170
- }
171
- });
172
- }).on('error', (e) => {
173
- console.log(' Error fetching latest Rancher Version', e);
174
- });
175
- }
176
-
177
- fetchLatestVersion();
178
- writePackageJson();
179
-
180
- // Add dependencies
181
- // pkg.dependencies['@rancher/shell'] = '^0.6.2';
182
- // pkg.dependencies['core-js'] = '3.18.3';
183
-
184
- function writePackageJson() {
185
- fs.writeFileSync(path.join(pkgFolder, 'package.json'), JSON.stringify(pkg, null, 2));
186
- }
187
-
188
- // Create type folders if needed
189
- if (addTypeFolders) {
190
- typeFolders.forEach((dir) => {
191
- const dest = path.join(path.join(pkgFolder, dir));
192
-
193
- if (!fs.existsSync(dest)) {
194
- console.log(` Creating folder: ${ dir }`);
195
- fs.mkdirSync(dest);
196
- }
197
- });
198
- }
199
-
200
- // Add workflow folder if needed
201
- if (addWorkflowFolder) {
202
- const workflowDir = path.join(folder, '.github/workflows');
203
-
204
- if (!fs.existsSync(workflowDir)) {
205
- fs.mkdirSync(workflowDir, { recursive: true });
206
- }
207
-
208
- const files = [
209
- 'build-extension-catalog.yml',
210
- 'build-extension-charts.yml'
211
- ];
212
-
213
- files.forEach((fileName) => {
214
- const file = path.join(workflowDir, fileName);
215
-
216
- if (!fs.existsSync(file)) {
217
- const src = path.join(__dirname, 'files/.github/workflows', fileName);
218
-
219
- console.log(` Adding file ${ fileName } to root workflows`);
220
- fs.copySync(src, file);
221
- }
222
- });
223
- }
224
-
225
- // Copy base files
226
- files.forEach((file) => {
227
- const src = path.join(__dirname, 'files', file);
228
- const dest = path.join(path.join(pkgFolder, file));
229
-
230
- if (!fs.existsSync(dest)) {
231
- console.log(` Adding file: ${ file }`);
232
- fs.copySync(src, dest);
233
- }
234
- });
235
-
236
- // require("child_process").spawn('yarn', ['install'], {
237
- // cwd: process.cwd(),
238
- // stdio: "inherit"
239
- // });
240
-
241
- // Update tsconfig
242
-
243
- const topLevelRawdata = fs.readFileSync(path.join(folder, 'package.json'));
244
- const topLevelPkg = JSON.parse(topLevelRawdata);
245
- let updated = false;
246
-
247
- Object.keys(topLevelScripts).forEach((target) => {
248
- if (!topLevelPkg.scripts[target]) {
249
- topLevelPkg.scripts[target] = topLevelScripts[target];
250
- console.log(` Adding script '${ target }' to top-level package.json`);
251
- updated = true;
252
- }
253
- });
254
-
255
- if (updated) {
256
- fs.writeFileSync(path.join(folder, 'package.json'), JSON.stringify(topLevelPkg, null, 2));
257
- }
258
-
259
- // Update tsconfig if needed
260
- if (!isNodeModulesShell) {
261
- const tsconfig = require(path.join(pkgFolder, 'tsconfig.json'));
262
-
263
- tsconfig.include = updateArray(tsconfig.include);
264
-
265
- Object.keys(tsconfig.compilerOptions.paths).forEach((p) => {
266
- tsconfig.compilerOptions.paths[p] = updateArray(tsconfig.compilerOptions.paths[p]);
267
- });
268
-
269
- // Update typeRoots
270
- tsconfig.compilerOptions.typeRoots = updateArray(tsconfig.compilerOptions.typeRoots);
271
-
272
- fs.writeFileSync(path.join(pkgFolder, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2));
273
- console.log(' Updated tsconfig.json for shell folder location');
274
- }
275
-
276
- console.log('');
277
-
278
- function updateArray(data) {
279
- const updated = [];
280
-
281
- data.forEach((inc) => {
282
- updated.push(inc.replace('../../node_modules/@rancher/shell', '../../shell'));
283
- });
284
-
285
- return updated;
286
- }
@@ -1,19 +0,0 @@
1
- {
2
- "name": "@rancher/create-pkg",
3
- "description": "Rancher UI Package generator",
4
- "version": "0.0.1",
5
- "license": "Apache-2.0",
6
- "author": "SUSE",
7
- "private": false,
8
- "bin": "./init",
9
- "files": [
10
- "**/*.*",
11
- "init"
12
- ],
13
- "engines": {
14
- "node": ">=12"
15
- },
16
- "dependencies": {
17
- "fs-extra": "^10.0.0"
18
- }
19
- }
@@ -1,21 +0,0 @@
1
- {
2
- "name": "NAME",
3
- "description": "NAME plugin",
4
- "version": "0.1.0",
5
- "private": false,
6
- "rancher": true,
7
- "scripts": {},
8
- "engines": {
9
- "node": ">=12"
10
- },
11
- "devDependencies": {
12
- "@vue/cli-plugin-babel": "4.5.18",
13
- "@vue/cli-service": "4.5.18",
14
- "@vue/cli-plugin-typescript": "4.5.18"
15
- },
16
- "browserslist": [
17
- "> 1%",
18
- "last 2 versions",
19
- "not dead"
20
- ]
21
- }
@@ -1,4 +0,0 @@
1
- declare module '*.vue' {
2
- import Vue from 'vue';
3
- export default Vue;
4
- }
@@ -1,56 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- const path = require('path');
4
- const fs = require('fs-extra');
5
- const { spawnSync } = require('child_process');
6
-
7
- const scriptFolder = __dirname;
8
- const dest = path.resolve('.');
9
-
10
- // Remove first two args
11
- let args = process.argv;
12
- args.splice(0, 2);
13
-
14
- const res = spawnSync(`${__dirname}/upgrade`, args, {
15
- cwd: dest,
16
- shell: false,
17
- stdio: [ 'ignore', process.stdout, process.stderr ],
18
- });
19
-
20
- if (res.status !== 0) {
21
- process.exit(res.status);
22
- }
23
-
24
- // Read the existing package.json
25
- let rawdata = fs.readFileSync(path.join(dest, 'package.json'));
26
- const appPackage = JSON.parse(rawdata);
27
-
28
- // Read the package.json from the app creator
29
- rawdata = fs.readFileSync(path.join(scriptFolder, 'app', 'package.json'));
30
- const latestPackage = JSON.parse(rawdata);
31
-
32
- // Read the package.json from the upgrade creator
33
- rawdata = fs.readFileSync(path.join(scriptFolder, 'package.json'));
34
- const upgradePackage = JSON.parse(rawdata);
35
-
36
- // Update dependency versions to match the latest from the creator
37
- Object.keys(latestPackage._pkgs).forEach((key) => {
38
- appPackage.dependencies[key] = latestPackage._pkgs[key];
39
- });
40
-
41
- // Add in the webpack resolution
42
- appPackage.resolutions = appPackage.resolutions || {};
43
- appPackage.resolutions['**/webpack'] = '4';
44
-
45
- // Update the version of @rancher/shell
46
- const shellVersion = upgradePackage.version;
47
-
48
- appPackage.dependencies['@rancher/shell'] = shellVersion;
49
-
50
- fs.writeFileSync(path.join(dest, 'package.json'), JSON.stringify(appPackage, null, 2) + '\n');
51
-
52
- spawnSync(`yarn`, ['install'], {
53
- cwd: dest,
54
- shell: false,
55
- stdio: [ 'ignore', process.stdout, process.stderr ],
56
- });
@@ -1,20 +0,0 @@
1
- {
2
- "name": "@rancher/create-update",
3
- "description": "Rancher UI Update helper",
4
- "version": "0.0.0",
5
- "license": "Apache-2.0",
6
- "author": "SUSE",
7
- "private": false,
8
- "bin": "./init",
9
- "files": [
10
- "**/*.*",
11
- "init",
12
- "upgrade"
13
- ],
14
- "engines": {
15
- "node": ">=12"
16
- },
17
- "dependencies": {
18
- "fs-extra": "^10.0.0"
19
- }
20
- }
@@ -1,56 +0,0 @@
1
- #!/usr/bin/env sh
2
-
3
- SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
4
-
5
- echo "Upgrading Rancher Shell"
6
-
7
- # Get the version number from the package.json file
8
- VERSION=$(node -p -e "require('${SCRIPT_DIR}/package.json').version")
9
-
10
- echo "Updating to version: ${VERSION}"
11
- echo ""
12
-
13
- FORCE="false"
14
-
15
- if [ "$1" == "-f" ]; then
16
- FORCE="true"
17
- fi
18
-
19
- # Check for a clean git repository
20
- if [ ! -d ".git" ] && [ "${FORCE}" == "false" ]; then
21
- echo "Not runnning in a git repository. Re-run with -f to ignore this check"
22
- echo "Note: This action will update yuor files - running in a git repsository will ensure you have visibility over changes made"
23
- exit 1
24
- fi
25
-
26
- if [[ $(git diff --stat) != '' ]] && [ "${FORCE}" == "false" ]; then
27
- echo "Git repository is not clean. Re-run with -f to ignore this check"
28
- echo "Note: This action will update yuor files - running in a clean git repsository will ensure you have visibility over changes made"
29
- exit 1
30
- fi
31
-
32
- # Check this is a Rancher Extension
33
- if [ ! -f "./package.json" ]; then
34
- echo "Can't find package.json - check you're running from the correct folder"
35
- exit 1
36
- fi
37
-
38
- HAS_SHELL=$(grep "\"@rancher/shell\"" package.json -c )
39
- if [ "${HAS_SHELL}" != "1" ]; then
40
- echo "package.json does not reference @rancher/shell - check you're running from the correct folder"
41
- exit 1
42
- fi
43
-
44
- # Copy files for the top-level folder (from the app creator)
45
- rsync --exclude nuxt.config.js ${SCRIPT_DIR}/app/files/* .
46
-
47
- # Go through each folder in the pkg folder and update their files
48
- for pkg in ./pkg/*
49
- do
50
- if [ -d "${pkg}" ]; then
51
- pkgName=$(basename $pkg)
52
- echo "Updating package ${pkgName}"
53
-
54
- cp ${SCRIPT_DIR}/pkg/files/* ${pkg}
55
- fi
56
- done
@@ -1,45 +0,0 @@
1
- import { shallowMount } from '@vue/test-utils';
2
- import { Accordion } from './index';
3
-
4
- describe('component: Accordion', () => {
5
- it('is closed initially by default', () => {
6
- const title = 'Test Title';
7
-
8
- const wrapper = shallowMount(Accordion, { propsData: { title } });
9
-
10
- expect(wrapper.find('[data-testid="accordion-body"]').isVisible()).toBe(false);
11
- expect(wrapper.find('[data-testid="accordion-header"]').text()).toBe(title);
12
- });
13
-
14
- it('is opened initially when openInitially prop is true', () => {
15
- const wrapper = shallowMount(Accordion, { propsData: { openInitially: true } });
16
-
17
- expect(wrapper.find('[data-testid="accordion-body"]').isVisible()).toBe(true);
18
- });
19
-
20
- it('when closed, opens when the header is clicked', async() => {
21
- const wrapper = shallowMount(Accordion, { });
22
-
23
- await wrapper.find('[data-testid="accordion-header"]').trigger('click');
24
- expect(wrapper.find('[data-testid="accordion-body"]').isVisible()).toBe(true);
25
- });
26
-
27
- it('when open, closes when the header is clicked', async() => {
28
- const wrapper = shallowMount(Accordion, { propsData: { openInitially: true } });
29
-
30
- await wrapper.find('[data-testid="accordion-header"]').trigger('click');
31
- expect(wrapper.find('[data-testid="accordion-body"]').isVisible()).toBe(false);
32
- });
33
-
34
- it('displays a chevron when closed', async() => {
35
- const wrapper = shallowMount(Accordion, { propsData: { } });
36
-
37
- expect(wrapper.find('[data-testid="accordion-header"] .icon-chevron-up').exists()).toBe(true);
38
- });
39
-
40
- it('displays an inverted chevron when open', async() => {
41
- const wrapper = shallowMount(Accordion, { propsData: { openInitially: true } });
42
-
43
- expect(wrapper.find('[data-testid="accordion-header"] .icon-chevron-down').exists()).toBe(true);
44
- });
45
- });
@@ -1,86 +0,0 @@
1
- <script lang="ts">
2
- import { defineComponent } from 'vue';
3
- import { mapGetters } from 'vuex';
4
-
5
- export default defineComponent({
6
- props: {
7
- title: {
8
- type: String,
9
- default: ''
10
- },
11
-
12
- titleKey: {
13
- type: String,
14
- default: null
15
- },
16
-
17
- openInitially: {
18
- type: Boolean,
19
- default: false
20
- }
21
- },
22
-
23
- data() {
24
- return { isOpen: this.openInitially };
25
- },
26
-
27
- computed: { ...mapGetters({ t: 'i18n/t' }) },
28
-
29
- methods: {
30
- toggle() {
31
- this.isOpen = !this.isOpen;
32
- }
33
- }
34
- });
35
- </script>
36
-
37
- <template>
38
- <div class="accordion-container">
39
- <div
40
- class="accordion-header"
41
- data-testid="accordion-header"
42
- @click="toggle"
43
- >
44
- <i
45
- class="icon text-primary"
46
- :class="{'icon-chevron-down':isOpen, 'icon-chevron-up':!isOpen}"
47
- data-testid="accordion-chevron"
48
- />
49
- <slot name="header">
50
- <h4
51
- data-testid="accordion-title-slot-content"
52
- class="mb-0"
53
- >
54
- {{ titleKey ? t(titleKey) : title }}
55
- </h4>
56
- </slot>
57
- </div>
58
- <div
59
- v-show="isOpen"
60
- class="accordion-body"
61
- data-testid="accordion-body"
62
- >
63
- <slot />
64
- </div>
65
- </div>
66
- </template>
67
-
68
- <style lang="scss" scoped>
69
- .accordion-container {
70
- border: 1px solid var(--border)
71
- }
72
- .accordion-header {
73
- padding: 5px;
74
- display: flex;
75
- align-items: center;
76
- &>*{
77
- padding: 5px 0px 5px 0px;
78
- }
79
- I {
80
- margin: 0px 10px 0px 10px;
81
- }
82
- }
83
- .accordion-body {
84
- padding: 10px;
85
- }
86
- </style>
@@ -1 +0,0 @@
1
- export { default as Accordion } from './Accordion.vue';
@@ -1,12 +0,0 @@
1
- import { shallowMount } from '@vue/test-utils';
2
- import { BadgeState } from './index';
3
-
4
- describe('BadgeState.vue', () => {
5
- it('renders props.msg when passed', () => {
6
- const label = 'Hello, World!';
7
-
8
- const wrapper = shallowMount(BadgeState, { propsData: { label } });
9
-
10
- expect(wrapper.find('span').text()).toMatch(label);
11
- });
12
- });