@rancher/shell 0.5.3 → 1.2.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.
- package/.DS_Store +0 -0
- package/assets/images/providers/aks-black.svg +28 -0
- package/assets/images/providers/aks.svg +31 -0
- package/assets/styles/global/_labeled-input.scss +1 -0
- package/assets/styles/global/_layout.scss +0 -99
- package/assets/translations/en-us.yaml +76 -74
- package/assets/translations/zh-hans.yaml +25 -23
- package/babel.config.js +1 -7
- package/chart/gatekeeper.vue +11 -2
- package/chart/istio.vue +10 -1
- package/chart/logging/index.vue +11 -2
- package/chart/monitoring/alerting/index.vue +21 -7
- package/chart/monitoring/grafana/index.vue +2 -57
- package/chart/monitoring/index.vue +26 -52
- package/chart/monitoring/prometheus/index.vue +43 -37
- package/chart/rancher-backup/index.vue +10 -3
- package/cloud-credential/azure.vue +17 -4
- package/components/AsyncButton.vue +0 -9
- package/components/Carousel.vue +0 -1
- package/components/ChartPsp.vue +76 -0
- package/components/ClusterIconMenu.vue +9 -24
- package/components/CodeMirror.vue +16 -75
- package/components/CopyCode.vue +2 -6
- package/components/CopyToClipboard.vue +1 -2
- package/components/CopyToClipboardText.vue +9 -14
- package/components/CruResource.vue +0 -1
- package/components/EtcdInfoBanner.vue +5 -5
- package/components/ExplorerProjectsNamespaces.vue +1 -25
- package/components/FixedBanner.vue +0 -1
- package/components/IconOrSvg.vue +1 -1
- package/components/Markdown.vue +12 -16
- package/components/Questions/index.vue +1 -1
- package/components/ResourceDetail/Masthead.vue +9 -25
- package/components/ResourceDetail/index.vue +4 -1
- package/components/ResourceList/Masthead.vue +18 -1
- package/components/ResourceTable.vue +2 -14
- package/components/ResourceYaml.vue +5 -34
- package/components/SideNav.vue +65 -43
- package/components/SortableTable/THead.vue +9 -7
- package/components/SortableTable/index.vue +2 -1
- package/components/StatusTable.vue +1 -5
- package/components/TabTitle.vue +84 -0
- package/components/Tabbed/index.vue +0 -12
- package/components/YamlEditor.vue +0 -1
- package/components/__tests__/ChartPsp.test.ts +75 -0
- package/components/__tests__/CopyCode.test.ts +4 -5
- package/components/fleet/FleetBundles.vue +11 -5
- package/components/fleet/FleetRepos.vue +27 -62
- package/components/fleet/FleetResources.vue +1 -6
- package/components/fleet/FleetStatus.vue +3 -3
- package/components/fleet/FleetSummary.vue +30 -35
- package/components/form/ArrayList.vue +8 -1
- package/components/form/ArrayListSelect.vue +9 -9
- package/components/form/BannerSettings.vue +0 -3
- package/components/form/FileSelector.vue +0 -1
- package/components/form/KeyValue.vue +0 -2
- package/components/form/LabeledSelect.vue +0 -4
- package/components/form/Password.vue +1 -3
- package/components/form/Select.vue +1 -1
- package/components/form/SelectOrCreateAuthSecret.vue +4 -4
- package/components/form/__tests__/KeyValue.test.ts +1 -1
- package/components/formatter/Checked.vue +3 -11
- package/components/formatter/ClusterProvider.vue +18 -1
- package/components/formatter/FleetSummaryGraph.vue +11 -23
- package/components/formatter/LiveDate.vue +16 -0
- package/components/formatter/LiveDuration.vue +1 -1
- package/components/formatter/PercentageBar.vue +1 -1
- package/components/formatter/WorkloadDetailEndpoints.vue +22 -12
- package/components/formatter/__tests__/ClusterProvider.test.ts +28 -0
- package/components/nav/Group.vue +2 -2
- package/components/nav/Header.vue +2 -2
- package/components/nav/Jump.vue +9 -19
- package/components/nav/TopLevelMenu.vue +18 -66
- package/components/nav/Type.vue +7 -16
- package/components/nav/WindowManager/ContainerLogs.vue +19 -120
- package/components/nav/WindowManager/ContainerShell.vue +1 -6
- package/components/nav/WindowManager/index.vue +10 -11
- package/components/nav/__tests__/TopLevelMenu.test.ts +1 -34
- package/components/nav/__tests__/Type.test.ts +1 -31
- package/components/nuxt/nuxt-child.js +78 -14
- package/components/nuxt/nuxt.js +1 -1
- package/components/user.retention/user-retention-header.vue +34 -0
- package/composables/useI18n.ts +26 -0
- package/composables/useStore.ts +16 -0
- package/config/harvester-manager-types.js +0 -2
- package/config/home-links.js +32 -2
- package/config/private-label.js +0 -22
- package/config/product/explorer.js +4 -4
- package/config/product/fleet.js +1 -6
- package/config/product/legacy.js +1 -84
- package/config/product/manager.js +15 -8
- package/config/query-params.js +0 -1
- package/config/router.js +368 -385
- package/config/settings.ts +9 -2
- package/config/store.js +1 -1
- package/config/system-namespaces.js +0 -3
- package/config/table-headers.js +27 -47
- package/config/types.js +5 -0
- package/config/uiplugins.js +1 -1
- package/core/plugin-helpers.js +5 -3
- package/core/plugin-routes.ts +114 -56
- package/core/plugin.ts +10 -16
- package/core/plugins-loader.js +9 -7
- package/core/plugins.js +3 -0
- package/core/types-provisioning.ts +0 -7
- package/creators/app/init +0 -19
- package/detail/fleet.cattle.io.bundle.vue +1 -1
- package/detail/fleet.cattle.io.cluster.vue +1 -11
- package/detail/node.vue +0 -42
- package/detail/pod.vue +1 -68
- package/detail/provisioning.cattle.io.cluster.vue +8 -25
- package/detail/workload/index.vue +1 -15
- package/dialog/ScaleMachineDownDialog.vue +17 -34
- package/edit/auth/googleoauth.vue +5 -1
- package/edit/catalog.cattle.io.clusterrepo.vue +7 -20
- package/edit/cloudcredential.vue +0 -2
- package/edit/fleet.cattle.io.gitrepo.vue +4 -3
- package/edit/management.cattle.io.project.vue +52 -1
- package/edit/management.cattle.io.setting.vue +2 -32
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -12
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +1 -2
- package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/{tabs/Basics.vue → Basics.vue} +125 -106
- package/edit/provisioning.cattle.io.cluster/{tabs/MachinePool.vue → MachinePool.vue} +7 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +7 -15
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +237 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.test.ts → CustomCommand.tests.ts} +0 -6
- package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +1 -7
- package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/index.vue +40 -109
- package/edit/provisioning.cattle.io.cluster/rke2.vue +689 -152
- package/edit/service.vue +0 -12
- package/edit/token.vue +0 -1
- package/edit/workload/Upgrading.vue +2 -3
- package/edit/workload/index.vue +1 -2
- package/edit/workload/mixins/workload.js +1 -1
- package/initialize/App.js +71 -25
- package/initialize/client.js +162 -21
- package/initialize/index.js +124 -47
- package/initialize/layouts.ts +26 -0
- package/{components/templates → layouts}/blank.vue +1 -1
- package/{components/templates → layouts}/default.vue +98 -8
- package/{components/templates → layouts}/error.vue +19 -10
- package/{components/templates → layouts}/home.vue +1 -4
- package/{components/templates → layouts}/plain.vue +1 -4
- package/{components/templates → layouts}/standalone.vue +1 -1
- package/{components/templates → layouts}/unauthenticated.vue +1 -1
- package/list/catalog.cattle.io.app.vue +0 -1
- package/list/management.cattle.io.feature.vue +7 -1
- package/list/management.cattle.io.setting.vue +0 -1
- package/list/management.cattle.io.user.vue +25 -1
- package/list/node.vue +0 -1
- package/machine-config/__tests__/vmwarevsphere.test.ts +161 -56
- package/machine-config/azure.vue +37 -21
- package/machine-config/vmwarevsphere.vue +47 -42
- package/middleware/authenticated.js +19 -14
- package/mixins/auth-config.js +7 -2
- package/mixins/brand.js +41 -29
- package/mixins/fetch.server.js +73 -0
- package/mixins/labeled-form-element.ts +1 -6
- package/models/__tests__/management.cattle.io.node.ts +0 -85
- package/models/__tests__/namespace.test.ts +9 -49
- package/models/cluster/node.js +4 -4
- package/models/cluster.x-k8s.io.machine.js +1 -1
- package/models/cluster.x-k8s.io.machinedeployment.js +0 -14
- package/models/fleet.cattle.io.cluster.js +0 -4
- package/models/fleet.cattle.io.gitrepo.js +13 -56
- package/models/management.cattle.io.cluster.js +3 -11
- package/models/management.cattle.io.kontainerdriver.js +0 -1
- package/models/management.cattle.io.node.js +14 -18
- package/models/management.cattle.io.nodepool.js +0 -17
- package/models/management.cattle.io.project.js +36 -0
- package/models/management.cattle.io.setting.js +7 -11
- package/models/management.cattle.io.user.js +65 -0
- package/models/namespace.js +1 -1
- package/models/pod.js +0 -20
- package/models/provisioning.cattle.io.cluster.js +9 -91
- package/models/secret.js +18 -126
- package/models/storage.k8s.io.storageclass.js +1 -1
- package/models/workload.js +0 -16
- package/models/workload.service.js +0 -18
- package/package.json +10 -12
- package/pages/about.vue +1 -0
- package/pages/account/create-key.vue +1 -0
- package/pages/account/index.vue +1 -0
- package/pages/auth/login.vue +1 -0
- package/pages/auth/logout.vue +2 -0
- package/pages/auth/setup.vue +4 -37
- package/pages/auth/verify.vue +8 -14
- package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +17 -2
- package/pages/c/_cluster/apps/charts/index.vue +58 -64
- package/pages/c/_cluster/apps/charts/install.helpers.js +13 -2
- package/pages/c/_cluster/apps/charts/install.vue +5 -5
- package/pages/c/_cluster/apps/index.vue +2 -0
- package/pages/c/_cluster/auth/index.vue +2 -0
- package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
- package/pages/c/_cluster/ecm/index.vue +2 -0
- package/pages/c/_cluster/explorer/index.vue +53 -56
- package/pages/c/_cluster/explorer/tools/index.vue +3 -171
- package/pages/c/_cluster/fleet/index.vue +1 -1
- package/pages/c/_cluster/index.vue +2 -0
- package/pages/c/_cluster/manager/pages/_page.vue +5 -4
- package/pages/c/_cluster/monitoring/index.vue +1 -17
- package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -1
- package/pages/c/_cluster/settings/banners.vue +2 -0
- package/pages/c/_cluster/settings/brand.vue +2 -3
- package/pages/c/_cluster/settings/index.vue +2 -0
- package/pages/c/_cluster/settings/links.vue +3 -2
- package/pages/c/_cluster/settings/performance.vue +1 -0
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +1 -2
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +46 -10
- package/pages/c/_cluster/uiplugins/index.vue +2 -0
- package/pages/c/index.vue +9 -0
- package/pages/diagnostic.vue +2 -1
- package/pages/fail-whale.vue +1 -0
- package/pages/prefs.vue +1 -0
- package/pages/rio/mesh.vue +508 -0
- package/pages/support/index.vue +8 -2
- package/pkg/auto-import.js +1 -1
- package/plugins/axios.js +36 -0
- package/plugins/back-button.js +5 -3
- package/plugins/clean-html-directive.js +19 -1
- package/plugins/clean-tooltip-directive.js +1 -1
- package/plugins/codemirror-loader.js +1 -1
- package/plugins/codemirror.js +0 -41
- package/plugins/dashboard-store/__tests__/{mutations.test.ts → mutations.spec.ts} +1 -1
- package/plugins/dashboard-store/actions.js +17 -16
- package/plugins/dashboard-store/classify.js +18 -1
- package/plugins/dashboard-store/getters.js +7 -70
- package/plugins/dashboard-store/index.js +12 -0
- package/plugins/dashboard-store/mutations.js +4 -0
- package/plugins/dashboard-store/resource-class.js +20 -65
- package/plugins/i18n.js +1 -1
- package/plugins/steve/__tests__/getters.spec.ts +48 -26
- package/plugins/steve/__tests__/subscribe.spec.ts +106 -0
- package/plugins/steve/actions.js +37 -3
- package/plugins/steve/getters.js +24 -7
- package/plugins/steve/mutations.js +5 -2
- package/plugins/steve/norman-class.js +0 -19
- package/plugins/steve/steve-class.js +0 -22
- package/plugins/steve/subscribe.js +34 -13
- package/plugins/transitions.js +4 -0
- package/plugins/vue-clipboard2.js +4 -0
- package/rancher-components/Accordion/Accordion.vue +3 -2
- package/rancher-components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/Banner/Banner.test.ts +1 -5
- package/rancher-components/Banner/Banner.vue +2 -2
- package/rancher-components/Card/Card.vue +4 -4
- package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +55 -24
- package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
- package/rancher-components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/StringList/StringList.vue +8 -8
- package/rancher-components/components/Accordion/Accordion.vue +3 -2
- package/rancher-components/components/BadgeState/BadgeState.test.ts +12 -0
- package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +2 -19
- package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +14 -11
- package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -1
- package/rancher-components/components/StringList/StringList.test.ts +0 -270
- package/rancher-components/components/StringList/StringList.vue +18 -57
- package/scripts/extension/bundle +7 -19
- package/scripts/extension/helm/scripts/package +3 -11
- package/scripts/extension/parse-tag-name +4 -4
- package/scripts/extension/publish +9 -20
- package/scripts/publish-shell.sh +1 -11
- package/scripts/test-plugins-build.sh +9 -85
- package/store/catalog.js +1 -1
- package/store/features.js +0 -1
- package/store/i18n.js +0 -11
- package/store/index.js +13 -11
- package/store/prefs.js +38 -33
- package/store/type-map.js +82 -157
- package/tsconfig.default.json +46 -0
- package/tsconfig.json +9 -35
- package/types/shell/index.d.ts +407 -468
- package/utils/axios.js +19 -0
- package/utils/create-yaml.js +1 -5
- package/utils/custom-validators.js +2 -0
- package/utils/error.js +1 -16
- package/utils/monitoring.js +2 -37
- package/utils/nuxt.js +39 -18
- package/utils/object.js +0 -24
- package/utils/router.scrollBehavior.js +14 -12
- package/utils/socket.js +1 -0
- package/utils/time.js +1 -1
- package/utils/title.ts +3 -0
- package/utils/url.ts +1 -1
- package/utils/validators/formRules/__tests__/index.test.ts +4 -49
- package/utils/validators/formRules/index.ts +9 -12
- package/utils/validators/setting.js +10 -6
- package/vue.config.js +3 -24
- package/chart/monitoring/steps/uninstall-v1.vue +0 -135
- package/components/Certificates.vue +0 -164
- package/components/__tests__/CodeMirror.spec.ts +0 -99
- package/components/fleet/__tests__/FleetSummary.test.ts +0 -316
- package/components/formatter/FleetClusterSummaryGraph.vue +0 -27
- package/components/formatter/__tests__/Checked.test.ts +0 -19
- package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +0 -81
- package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +0 -186
- package/composables/useCompactInput.ts +0 -20
- package/composables/useLabeledFormElement.ts +0 -138
- package/creators/app/files/.gitlab-ci.yml +0 -14
- package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +0 -77
- package/edit/__tests__/service.test.ts +0 -89
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +0 -112
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +0 -473
- package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +0 -73
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +0 -386
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +0 -137
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +0 -157
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +0 -135
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +0 -189
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +0 -147
- package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +0 -76
- package/mixins/v1-workload-metrics.js +0 -43
- package/models/__tests__/management.cattle.io.cluster.test.ts +0 -23
- package/models/__tests__/management.cattle.io.nodepool.ts +0 -83
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -241
- package/models/__tests__/secret.test.ts +0 -37
- package/models/__tests__/storage.k8s.io.storageclass.test.ts +0 -22
- package/models/__tests__/workload.test.ts +0 -91
- package/plugins/clean-html.js +0 -53
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +0 -49
- package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +0 -7
- package/plugins/index.js +0 -11
- package/plugins/steve/__tests__/resource-utils.test.ts +0 -159
- package/plugins/steve/__tests__/steve-class.spec.ts +0 -59
- package/plugins/steve/__tests__/utils/steve-mocks.ts +0 -31
- package/plugins/steve/resource-utils.ts +0 -38
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +0 -50
- package/server/har-file.js +0 -183
- package/store/__tests__/type-map.test.ts +0 -1122
- package/tsconfig.paths.json +0 -18
- package/utils/azure.js +0 -24
- package/utils/clipboard.js +0 -5
- /package/components/form/__tests__/{NameNsDescription.test.ts → NameNsDescription.ts} +0 -0
- /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.test.ts → selectors.ts} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/networking/ACE.vue → ACE.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/AgentConfiguration.vue → AgentConfiguration.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/upgrade/DrainOptions.vue → DrainOptions.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/MemberRoles.vue → MemberRoles.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryConfigs.vue → RegistryConfigs.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryMirrors.vue → RegistryMirrors.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/etcd/S3Config.vue → S3Config.vue} +0 -0
- /package/plugins/dashboard-store/__tests__/{actions.test.ts → actions.spec.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{getters.test.ts → getters.spec.ts} +0 -0
- /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import
|
|
2
|
+
import { defineComponent } from 'vue';
|
|
3
3
|
import { _VIEW } from '@shell/config/query-params';
|
|
4
|
+
import { randomStr } from '@shell/utils/string';
|
|
4
5
|
|
|
5
|
-
export default
|
|
6
|
+
export default defineComponent({
|
|
6
7
|
props: {
|
|
7
8
|
/**
|
|
8
9
|
* The name of the input, for grouping.
|
|
@@ -71,7 +72,10 @@ export default Vue.extend({
|
|
|
71
72
|
},
|
|
72
73
|
|
|
73
74
|
data() {
|
|
74
|
-
return {
|
|
75
|
+
return {
|
|
76
|
+
isChecked: this.value === this.val,
|
|
77
|
+
randomString: `${ randomStr() }-radio`,
|
|
78
|
+
};
|
|
75
79
|
},
|
|
76
80
|
|
|
77
81
|
computed: {
|
|
@@ -115,13 +119,15 @@ export default Vue.extend({
|
|
|
115
119
|
/**
|
|
116
120
|
* Emits the input event.
|
|
117
121
|
*/
|
|
118
|
-
clicked(
|
|
119
|
-
|
|
122
|
+
clicked(event: MouseEvent | KeyboardEvent) {
|
|
123
|
+
const target = event.target;
|
|
124
|
+
|
|
125
|
+
if (this.isDisabled || (target instanceof HTMLElement && target.tagName === 'A')) {
|
|
120
126
|
return;
|
|
121
127
|
}
|
|
122
128
|
|
|
123
129
|
this.$emit('input', this.val);
|
|
124
|
-
}
|
|
130
|
+
},
|
|
125
131
|
}
|
|
126
132
|
});
|
|
127
133
|
</script>
|
|
@@ -134,7 +140,7 @@ export default Vue.extend({
|
|
|
134
140
|
@click.stop="clicked($event)"
|
|
135
141
|
>
|
|
136
142
|
<input
|
|
137
|
-
:id="
|
|
143
|
+
:id="randomString"
|
|
138
144
|
:disabled="isDisabled"
|
|
139
145
|
:name="name"
|
|
140
146
|
:value="''+val"
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import
|
|
2
|
+
import { PropType, defineComponent } from 'vue';
|
|
3
3
|
import { _VIEW } from '@shell/config/query-params';
|
|
4
4
|
import RadioButton from '@components/Form/Radio/RadioButton.vue';
|
|
5
5
|
|
|
6
6
|
interface Option {
|
|
7
7
|
value: unknown,
|
|
8
|
-
label: string
|
|
8
|
+
label: string,
|
|
9
|
+
description?: string,
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
export default
|
|
12
|
+
export default defineComponent({
|
|
12
13
|
components: { RadioButton },
|
|
13
14
|
props: {
|
|
14
15
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import
|
|
2
|
+
import { defineComponent } from 'vue';
|
|
3
3
|
import debounce from 'lodash/debounce';
|
|
4
4
|
import { _EDIT, _VIEW } from '@shell/config/query-params';
|
|
5
5
|
|
|
@@ -10,7 +10,7 @@ declare module 'vue/types/vue' {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export default
|
|
13
|
+
export default defineComponent({
|
|
14
14
|
inheritAttrs: false,
|
|
15
15
|
|
|
16
16
|
props: {
|
|
@@ -115,7 +115,9 @@ export default Vue.extend({
|
|
|
115
115
|
/**
|
|
116
116
|
* Emits the input event and resizes the Text Area.
|
|
117
117
|
*/
|
|
118
|
-
onInput(
|
|
118
|
+
onInput(event: Event): void {
|
|
119
|
+
const val = (event?.target as HTMLInputElement)?.value;
|
|
120
|
+
|
|
119
121
|
this.$emit('input', val);
|
|
120
122
|
this.queueResize();
|
|
121
123
|
},
|
|
@@ -155,7 +157,7 @@ export default Vue.extend({
|
|
|
155
157
|
<template>
|
|
156
158
|
<textarea
|
|
157
159
|
ref="ta"
|
|
158
|
-
data-testid="text-area-auto-grow"
|
|
160
|
+
:data-testid="$attrs['data-testid'] ? $attrs['data-testid'] : 'text-area-auto-grow'"
|
|
159
161
|
:disabled="isDisabled"
|
|
160
162
|
:style="style"
|
|
161
163
|
:placeholder="placeholder"
|
|
@@ -163,7 +165,7 @@ export default Vue.extend({
|
|
|
163
165
|
v-bind="$attrs"
|
|
164
166
|
:spellcheck="spellcheck"
|
|
165
167
|
@paste="$emit('paste', $event)"
|
|
166
|
-
@input="onInput($event
|
|
168
|
+
@input="onInput($event)"
|
|
167
169
|
@focus="$emit('focus', $event)"
|
|
168
170
|
@blur="$emit('blur', $event)"
|
|
169
171
|
/>
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import
|
|
3
|
-
|
|
2
|
+
import { defineComponent } from 'vue';
|
|
3
|
+
|
|
4
|
+
type StateType = boolean | 'true' | 'false' | undefined;
|
|
5
|
+
|
|
6
|
+
export default defineComponent({
|
|
4
7
|
props: {
|
|
5
8
|
value: {
|
|
6
9
|
type: [Boolean, String, Number],
|
|
@@ -28,7 +31,7 @@ export default Vue.extend({
|
|
|
28
31
|
},
|
|
29
32
|
},
|
|
30
33
|
data() {
|
|
31
|
-
return { state: false as
|
|
34
|
+
return { state: false as StateType };
|
|
32
35
|
},
|
|
33
36
|
|
|
34
37
|
watch: {
|
|
@@ -41,7 +44,7 @@ export default Vue.extend({
|
|
|
41
44
|
},
|
|
42
45
|
|
|
43
46
|
methods: {
|
|
44
|
-
toggle(neu:
|
|
47
|
+
toggle(neu: StateType | null) {
|
|
45
48
|
this.state = neu === null ? !this.state : neu;
|
|
46
49
|
this.$emit('input', this.state ? this.onValue : this.offValue);
|
|
47
50
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import
|
|
2
|
+
import { defineComponent } from 'vue';
|
|
3
3
|
|
|
4
|
-
export default
|
|
4
|
+
export default defineComponent({
|
|
5
5
|
props: {
|
|
6
6
|
/**
|
|
7
7
|
* The Labeled Tooltip value.
|
|
@@ -29,9 +29,14 @@ export default Vue.extend({
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
computed: {
|
|
32
|
-
iconClass() {
|
|
32
|
+
iconClass(): string {
|
|
33
33
|
return this.status === 'error' ? 'icon-warning' : 'icon-info';
|
|
34
34
|
}
|
|
35
|
+
},
|
|
36
|
+
methods: {
|
|
37
|
+
isObject(value: string | Record<string, unknown>): value is Record<string, unknown> {
|
|
38
|
+
return typeof value === 'object' && value !== null && !!value.content;
|
|
39
|
+
}
|
|
35
40
|
}
|
|
36
41
|
});
|
|
37
42
|
</script>
|
|
@@ -44,7 +49,7 @@ export default Vue.extend({
|
|
|
44
49
|
>
|
|
45
50
|
<template v-if="hover">
|
|
46
51
|
<i
|
|
47
|
-
v-clean-tooltip="value
|
|
52
|
+
v-clean-tooltip="isObject(value) ? { ...{content: value.content, classes: [`tooltip-${status}`]}, ...value } : value"
|
|
48
53
|
:class="{'hover':!value, [iconClass]: true}"
|
|
49
54
|
class="icon status-icon"
|
|
50
55
|
/>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import Vue, { PropType } from 'vue';
|
|
2
|
+
import Vue, { PropType, defineComponent } from 'vue';
|
|
3
3
|
|
|
4
4
|
import LabeledInput from '@components/Form/LabeledInput/LabeledInput.vue';
|
|
5
5
|
import { findStringIndex, hasDuplicatedStrings } from '@shell/utils/array';
|
|
@@ -29,7 +29,7 @@ const CLASS = {
|
|
|
29
29
|
/**
|
|
30
30
|
* Manage a list of strings
|
|
31
31
|
*/
|
|
32
|
-
export default
|
|
32
|
+
export default defineComponent({
|
|
33
33
|
|
|
34
34
|
name: 'StringList',
|
|
35
35
|
components: { LabeledInput },
|
|
@@ -92,9 +92,9 @@ export default Vue.extend({
|
|
|
92
92
|
},
|
|
93
93
|
data() {
|
|
94
94
|
return {
|
|
95
|
-
value:
|
|
95
|
+
value: undefined as string | undefined,
|
|
96
96
|
selected: null as string | null,
|
|
97
|
-
editedItem:
|
|
97
|
+
editedItem: undefined as string | undefined,
|
|
98
98
|
isCreateItem: false,
|
|
99
99
|
errors: { duplicate: false } as Record<Error, boolean>
|
|
100
100
|
};
|
|
@@ -281,7 +281,7 @@ export default Vue.extend({
|
|
|
281
281
|
this.isCreateItem = true;
|
|
282
282
|
this.setFocus(INPUT.create);
|
|
283
283
|
} else {
|
|
284
|
-
this.value =
|
|
284
|
+
this.value = undefined;
|
|
285
285
|
this.toggleError('duplicate', false);
|
|
286
286
|
this.onSelectLeave();
|
|
287
287
|
|
|
@@ -303,11 +303,11 @@ export default Vue.extend({
|
|
|
303
303
|
this.editedItem = item || '';
|
|
304
304
|
this.setFocus(INPUT.edit);
|
|
305
305
|
} else {
|
|
306
|
-
this.value =
|
|
306
|
+
this.value = undefined;
|
|
307
307
|
this.toggleError('duplicate', false);
|
|
308
308
|
this.onSelectLeave();
|
|
309
309
|
|
|
310
|
-
this.editedItem =
|
|
310
|
+
this.editedItem = undefined;
|
|
311
311
|
}
|
|
312
312
|
},
|
|
313
313
|
|
|
@@ -502,7 +502,7 @@ export default Vue.extend({
|
|
|
502
502
|
<button
|
|
503
503
|
data-testid="button-add"
|
|
504
504
|
class="btn btn-sm role-tertiary add-button"
|
|
505
|
-
:disabled="isCreateItem || editedItem"
|
|
505
|
+
:disabled="!!isCreateItem || !!editedItem"
|
|
506
506
|
@click.prevent="onClickPlusButton"
|
|
507
507
|
>
|
|
508
508
|
<span class="icon icon-plus icon-sm" />
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
import { mount } from '@vue/test-utils';
|
|
2
3
|
import { LabeledInput } from './index';
|
|
3
4
|
|
|
@@ -5,7 +6,7 @@ describe('component: LabeledInput', () => {
|
|
|
5
6
|
it('should emit input only once', () => {
|
|
6
7
|
const value = '2';
|
|
7
8
|
const delay = 1;
|
|
8
|
-
const wrapper = mount(LabeledInput
|
|
9
|
+
const wrapper = mount(LabeledInput, {
|
|
9
10
|
propsData: { delay },
|
|
10
11
|
mocks: { $store: { getters: { 'i18n/t': jest.fn() } } }
|
|
11
12
|
});
|
|
@@ -19,22 +20,4 @@ describe('component: LabeledInput', () => {
|
|
|
19
20
|
expect(wrapper.emitted('input')).toHaveLength(1);
|
|
20
21
|
expect(wrapper.emitted('input')![0][0]).toBe(value);
|
|
21
22
|
});
|
|
22
|
-
|
|
23
|
-
it('using mode "multiline" should emit input value correctly', () => {
|
|
24
|
-
const value = 'any-string';
|
|
25
|
-
const delay = 1;
|
|
26
|
-
const wrapper = mount(LabeledInput as any, {
|
|
27
|
-
propsData: { delay, multiline: true },
|
|
28
|
-
mocks: { $store: { getters: { 'i18n/t': jest.fn() } } }
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
jest.useFakeTimers();
|
|
32
|
-
wrapper.find('input').setValue('1');
|
|
33
|
-
wrapper.find('input').setValue(value);
|
|
34
|
-
jest.advanceTimersByTime(delay);
|
|
35
|
-
jest.useRealTimers();
|
|
36
|
-
|
|
37
|
-
expect(wrapper.emitted('input')).toHaveLength(1);
|
|
38
|
-
expect(wrapper.emitted('input')![0][0]).toBe(value);
|
|
39
|
-
});
|
|
40
23
|
});
|
|
@@ -90,7 +90,7 @@ export default (
|
|
|
90
90
|
delay: {
|
|
91
91
|
type: Number,
|
|
92
92
|
default: 0
|
|
93
|
-
}
|
|
93
|
+
}
|
|
94
94
|
},
|
|
95
95
|
|
|
96
96
|
data() {
|
|
@@ -216,9 +216,6 @@ export default (
|
|
|
216
216
|
/**
|
|
217
217
|
* Emit on input with delay. Note: Arrow function is avoided due context
|
|
218
218
|
* binding.
|
|
219
|
-
*
|
|
220
|
-
* NOTE: In multiline, TextAreaAutoGrow emits a string with the value
|
|
221
|
-
* https://github.com/rancher/dashboard/issues/10249
|
|
222
219
|
*/
|
|
223
220
|
delayInput(value: string): void {
|
|
224
221
|
this.$emit('input', value);
|
|
@@ -325,14 +322,20 @@ export default (
|
|
|
325
322
|
:hover="hoverTooltip"
|
|
326
323
|
:value="validationMessage"
|
|
327
324
|
/>
|
|
328
|
-
<
|
|
329
|
-
v-if="cronHint"
|
|
330
|
-
class="cron-label"
|
|
331
|
-
>{{ cronHint }}</label>
|
|
332
|
-
<label
|
|
333
|
-
v-if="subLabel"
|
|
325
|
+
<div
|
|
326
|
+
v-if="cronHint || subLabel"
|
|
334
327
|
class="sub-label"
|
|
335
|
-
>
|
|
328
|
+
>
|
|
329
|
+
<div
|
|
330
|
+
v-if="cronHint"
|
|
331
|
+
>
|
|
332
|
+
{{ cronHint }}
|
|
333
|
+
</div>
|
|
334
|
+
<div
|
|
335
|
+
v-if="subLabel"
|
|
336
|
+
v-clean-html="subLabel"
|
|
337
|
+
/>
|
|
338
|
+
</div>
|
|
336
339
|
</div>
|
|
337
340
|
</template>
|
|
338
341
|
<style scoped lang="scss">
|
|
@@ -155,7 +155,7 @@ export default Vue.extend({
|
|
|
155
155
|
<template>
|
|
156
156
|
<textarea
|
|
157
157
|
ref="ta"
|
|
158
|
-
data-testid="text-area-auto-grow"
|
|
158
|
+
:data-testid="$attrs['data-testid'] ? $attrs['data-testid'] : 'text-area-auto-grow'"
|
|
159
159
|
:disabled="isDisabled"
|
|
160
160
|
:style="style"
|
|
161
161
|
:placeholder="placeholder"
|
|
@@ -398,276 +398,6 @@ describe('stringList.vue', () => {
|
|
|
398
398
|
});
|
|
399
399
|
});
|
|
400
400
|
|
|
401
|
-
describe('bulk delimiter', () => {
|
|
402
|
-
const delimiter = /;/;
|
|
403
|
-
|
|
404
|
-
describe('add', () => {
|
|
405
|
-
const items: string[] = [];
|
|
406
|
-
|
|
407
|
-
beforeEach(() => {
|
|
408
|
-
wrapper = mount(StringList, {
|
|
409
|
-
propsData: {
|
|
410
|
-
items,
|
|
411
|
-
bulkAdditionDelimiter: delimiter,
|
|
412
|
-
errorMessages: { duplicate: 'error, item is duplicate.' },
|
|
413
|
-
}
|
|
414
|
-
});
|
|
415
|
-
});
|
|
416
|
-
|
|
417
|
-
it('should split values if delimiter set', async() => {
|
|
418
|
-
const value = 'test;test1;test2';
|
|
419
|
-
const result = ['test', 'test1', 'test2'];
|
|
420
|
-
|
|
421
|
-
// activate create mode
|
|
422
|
-
await wrapper.setData({ isCreateItem: true });
|
|
423
|
-
const inputField = wrapper.find('[data-testid="item-create"]');
|
|
424
|
-
|
|
425
|
-
await inputField.setValue(value);
|
|
426
|
-
|
|
427
|
-
// press enter
|
|
428
|
-
await inputField.trigger('keydown.enter');
|
|
429
|
-
await wrapper.vm.$nextTick();
|
|
430
|
-
|
|
431
|
-
const itemsResult = (wrapper.emitted('change') || [])[0][0];
|
|
432
|
-
|
|
433
|
-
expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
it('should show warning if one of the values is a duplicate', async() => {
|
|
437
|
-
const value = 'test;test1;test2';
|
|
438
|
-
|
|
439
|
-
await wrapper.setProps({ items: ['test1'] });
|
|
440
|
-
|
|
441
|
-
// activate create mode
|
|
442
|
-
await wrapper.setData({ isCreateItem: true });
|
|
443
|
-
const inputField = wrapper.find('[data-testid="item-create"]');
|
|
444
|
-
|
|
445
|
-
await inputField.setValue(value);
|
|
446
|
-
|
|
447
|
-
// press enter
|
|
448
|
-
await inputField.trigger('keydown.enter');
|
|
449
|
-
await wrapper.vm.$nextTick();
|
|
450
|
-
|
|
451
|
-
const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
|
|
452
|
-
|
|
453
|
-
expect(isDuplicate).toBe(true);
|
|
454
|
-
});
|
|
455
|
-
|
|
456
|
-
it('should show a warning if the new values are all duplicates', async() => {
|
|
457
|
-
const value = 'test;test';
|
|
458
|
-
|
|
459
|
-
// activate create mode
|
|
460
|
-
await wrapper.setData({ isCreateItem: true });
|
|
461
|
-
const inputField = wrapper.find('[data-testid="item-create"]');
|
|
462
|
-
|
|
463
|
-
await inputField.setValue(value);
|
|
464
|
-
|
|
465
|
-
// press enter
|
|
466
|
-
await inputField.trigger('keydown.enter');
|
|
467
|
-
await wrapper.vm.$nextTick();
|
|
468
|
-
|
|
469
|
-
const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
|
|
470
|
-
|
|
471
|
-
expect(isDuplicate).toBe(true);
|
|
472
|
-
});
|
|
473
|
-
|
|
474
|
-
it('should not consider empty strings at the beginning', async() => {
|
|
475
|
-
const value = ';test;test1;test2';
|
|
476
|
-
const result = ['test', 'test1', 'test2'];
|
|
477
|
-
|
|
478
|
-
// activate create mode
|
|
479
|
-
await wrapper.setData({ isCreateItem: true });
|
|
480
|
-
const inputField = wrapper.find('[data-testid="item-create"]');
|
|
481
|
-
|
|
482
|
-
await inputField.setValue(value);
|
|
483
|
-
|
|
484
|
-
// press enter
|
|
485
|
-
await inputField.trigger('keydown.enter');
|
|
486
|
-
await wrapper.vm.$nextTick();
|
|
487
|
-
|
|
488
|
-
const itemsResult = (wrapper.emitted('change') || [])[0][0];
|
|
489
|
-
|
|
490
|
-
expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
|
|
491
|
-
});
|
|
492
|
-
|
|
493
|
-
it('should not consider empty strings in the middle', async() => {
|
|
494
|
-
const value = 'test;test1;;test2';
|
|
495
|
-
const result = ['test', 'test1', 'test2'];
|
|
496
|
-
|
|
497
|
-
// activate create mode
|
|
498
|
-
await wrapper.setData({ isCreateItem: true });
|
|
499
|
-
const inputField = wrapper.find('[data-testid="item-create"]');
|
|
500
|
-
|
|
501
|
-
await inputField.setValue(value);
|
|
502
|
-
|
|
503
|
-
// press enter
|
|
504
|
-
await inputField.trigger('keydown.enter');
|
|
505
|
-
await wrapper.vm.$nextTick();
|
|
506
|
-
|
|
507
|
-
const itemsResult = (wrapper.emitted('change') || [])[0][0];
|
|
508
|
-
|
|
509
|
-
expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
|
|
510
|
-
});
|
|
511
|
-
|
|
512
|
-
it('should not consider empty strings at the end', async() => {
|
|
513
|
-
const value = 'test;test1;test2;';
|
|
514
|
-
const result = ['test', 'test1', 'test2'];
|
|
515
|
-
|
|
516
|
-
// activate create mode
|
|
517
|
-
await wrapper.setData({ isCreateItem: true });
|
|
518
|
-
const inputField = wrapper.find('[data-testid="item-create"]');
|
|
519
|
-
|
|
520
|
-
await inputField.setValue(value);
|
|
521
|
-
|
|
522
|
-
// press enter
|
|
523
|
-
await inputField.trigger('keydown.enter');
|
|
524
|
-
await wrapper.vm.$nextTick();
|
|
525
|
-
|
|
526
|
-
const itemsResult = (wrapper.emitted('change') || [])[0][0];
|
|
527
|
-
|
|
528
|
-
expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
|
|
529
|
-
});
|
|
530
|
-
});
|
|
531
|
-
|
|
532
|
-
describe('edit', () => {
|
|
533
|
-
const items = ['test1', 'test2'];
|
|
534
|
-
|
|
535
|
-
beforeEach(() => {
|
|
536
|
-
wrapper = mount(StringList, {
|
|
537
|
-
propsData: {
|
|
538
|
-
items,
|
|
539
|
-
bulkAdditionDelimiter: delimiter,
|
|
540
|
-
errorMessages: { duplicate: 'error, item is duplicate.' },
|
|
541
|
-
}
|
|
542
|
-
});
|
|
543
|
-
});
|
|
544
|
-
|
|
545
|
-
it('should split values if delimiter set', async() => {
|
|
546
|
-
const newValue = 'test1;new;values';
|
|
547
|
-
const result = ['test1', 'new', 'values', 'test2'];
|
|
548
|
-
|
|
549
|
-
await wrapper.setData({ editedItem: items[0] });
|
|
550
|
-
const inputField = wrapper.find('[data-testid^="item-edit"]');
|
|
551
|
-
|
|
552
|
-
await inputField.setValue(newValue);
|
|
553
|
-
|
|
554
|
-
// press enter
|
|
555
|
-
await inputField.trigger('keydown.enter');
|
|
556
|
-
await wrapper.vm.$nextTick();
|
|
557
|
-
|
|
558
|
-
const itemsResult = (wrapper.emitted('change') || [])[0][0];
|
|
559
|
-
|
|
560
|
-
expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
|
|
561
|
-
});
|
|
562
|
-
|
|
563
|
-
it('should show warning if one of the values is a duplicate', async() => {
|
|
564
|
-
const newValue = 'test1;test2';
|
|
565
|
-
|
|
566
|
-
await wrapper.setData({ editedItem: items[0] });
|
|
567
|
-
const inputField = wrapper.find('[data-testid^="item-edit"]');
|
|
568
|
-
|
|
569
|
-
await inputField.setValue(newValue);
|
|
570
|
-
|
|
571
|
-
// press enter
|
|
572
|
-
await inputField.trigger('keydown.enter');
|
|
573
|
-
await wrapper.vm.$nextTick();
|
|
574
|
-
|
|
575
|
-
const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
|
|
576
|
-
|
|
577
|
-
expect(isDuplicate).toBe(true);
|
|
578
|
-
});
|
|
579
|
-
|
|
580
|
-
it('should show a warning if the new values are all duplicates', async() => {
|
|
581
|
-
const newValue = 'test;test';
|
|
582
|
-
|
|
583
|
-
await wrapper.setData({ editedItem: items[0] });
|
|
584
|
-
const inputField = wrapper.find('[data-testid^="item-edit"]');
|
|
585
|
-
|
|
586
|
-
await inputField.setValue(newValue);
|
|
587
|
-
|
|
588
|
-
// press enter
|
|
589
|
-
await inputField.trigger('keydown.enter');
|
|
590
|
-
await wrapper.vm.$nextTick();
|
|
591
|
-
|
|
592
|
-
const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
|
|
593
|
-
|
|
594
|
-
expect(isDuplicate).toBe(true);
|
|
595
|
-
});
|
|
596
|
-
|
|
597
|
-
it('should not consider empty strings at the beginning', async() => {
|
|
598
|
-
const newValue = ';test1;new;value';
|
|
599
|
-
const result = ['test1', 'new', 'value', 'test2'];
|
|
600
|
-
|
|
601
|
-
await wrapper.setData({ editedItem: items[0] });
|
|
602
|
-
const inputField = wrapper.find('[data-testid^="item-edit"]');
|
|
603
|
-
|
|
604
|
-
await inputField.setValue(newValue);
|
|
605
|
-
|
|
606
|
-
// press enter
|
|
607
|
-
await inputField.trigger('keydown.enter');
|
|
608
|
-
await wrapper.vm.$nextTick();
|
|
609
|
-
|
|
610
|
-
const itemsResult = (wrapper.emitted('change') || [])[0][0];
|
|
611
|
-
|
|
612
|
-
expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
|
|
613
|
-
});
|
|
614
|
-
|
|
615
|
-
it('should not consider empty strings in the middle 1', async() => {
|
|
616
|
-
const newValue = 'test1; ;new;value';
|
|
617
|
-
const result = ['test1', 'new', 'value', 'test2'];
|
|
618
|
-
|
|
619
|
-
await wrapper.setData({ editedItem: items[0] });
|
|
620
|
-
const inputField = wrapper.find('[data-testid^="item-edit"]');
|
|
621
|
-
|
|
622
|
-
await inputField.setValue(newValue);
|
|
623
|
-
|
|
624
|
-
// press enter
|
|
625
|
-
await inputField.trigger('keydown.enter');
|
|
626
|
-
await wrapper.vm.$nextTick();
|
|
627
|
-
|
|
628
|
-
const itemsResult = (wrapper.emitted('change') || [])[0][0];
|
|
629
|
-
|
|
630
|
-
expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
|
|
631
|
-
});
|
|
632
|
-
|
|
633
|
-
it('should not consider empty strings in the middle 2', async() => {
|
|
634
|
-
const newValue = 'test1;;new;value';
|
|
635
|
-
const result = ['test1', 'new', 'value', 'test2'];
|
|
636
|
-
|
|
637
|
-
await wrapper.setData({ editedItem: items[0] });
|
|
638
|
-
const inputField = wrapper.find('[data-testid^="item-edit"]');
|
|
639
|
-
|
|
640
|
-
await inputField.setValue(newValue);
|
|
641
|
-
|
|
642
|
-
// press enter
|
|
643
|
-
await inputField.trigger('keydown.enter');
|
|
644
|
-
await wrapper.vm.$nextTick();
|
|
645
|
-
|
|
646
|
-
const itemsResult = (wrapper.emitted('change') || [])[0][0];
|
|
647
|
-
|
|
648
|
-
expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
|
|
649
|
-
});
|
|
650
|
-
|
|
651
|
-
it('should not consider empty strings at the end', async() => {
|
|
652
|
-
const newValue = 'test1;new;value;';
|
|
653
|
-
const result = ['test1', 'new', 'value', 'test2'];
|
|
654
|
-
|
|
655
|
-
await wrapper.setData({ editedItem: items[0] });
|
|
656
|
-
const inputField = wrapper.find('[data-testid^="item-edit"]');
|
|
657
|
-
|
|
658
|
-
await inputField.setValue(newValue);
|
|
659
|
-
|
|
660
|
-
// press enter
|
|
661
|
-
await inputField.trigger('keydown.enter');
|
|
662
|
-
await wrapper.vm.$nextTick();
|
|
663
|
-
|
|
664
|
-
const itemsResult = (wrapper.emitted('change') || [])[0][0];
|
|
665
|
-
|
|
666
|
-
expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
|
|
667
|
-
});
|
|
668
|
-
});
|
|
669
|
-
});
|
|
670
|
-
|
|
671
401
|
describe('errors handling', () => {
|
|
672
402
|
it('show duplicate warning icon when errorMessages is defined', async() => {
|
|
673
403
|
const items = ['test'];
|