@eturnity/eturnity_reusable_components 7.45.1 → 7.45.2
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/package.json
CHANGED
@@ -0,0 +1,79 @@
|
|
1
|
+
import Card from './index.vue'
|
2
|
+
|
3
|
+
export default {
|
4
|
+
title: 'Card',
|
5
|
+
component: Card,
|
6
|
+
tags: ['autodocs'],
|
7
|
+
}
|
8
|
+
|
9
|
+
// To use:
|
10
|
+
// <RCCard
|
11
|
+
// :isLoading="true"
|
12
|
+
// minWidth="150px"
|
13
|
+
// popoverText="Sample popover text"
|
14
|
+
// :showPopover="true"
|
15
|
+
// title="Sample title"
|
16
|
+
// titleClass="sampleTitleClass"
|
17
|
+
// viewCardClass="sampleViewCardClass"
|
18
|
+
// width="200px"
|
19
|
+
// />
|
20
|
+
|
21
|
+
export const Default = {
|
22
|
+
args: {
|
23
|
+
title: 'Sample card title',
|
24
|
+
},
|
25
|
+
render: (args) => ({
|
26
|
+
components: { Card },
|
27
|
+
setup() {
|
28
|
+
return { args }
|
29
|
+
},
|
30
|
+
template: `
|
31
|
+
<Card v-bind="args">
|
32
|
+
Sample card content
|
33
|
+
</ActionBanner>
|
34
|
+
`,
|
35
|
+
}),
|
36
|
+
}
|
37
|
+
|
38
|
+
export const LoadingCard = {
|
39
|
+
args: {
|
40
|
+
isLoading: true,
|
41
|
+
},
|
42
|
+
}
|
43
|
+
|
44
|
+
export const CustomWidth = {
|
45
|
+
args: {
|
46
|
+
title: 'Sample card title',
|
47
|
+
width: '600px',
|
48
|
+
},
|
49
|
+
render: (args) => ({
|
50
|
+
components: { Card },
|
51
|
+
setup() {
|
52
|
+
return { args }
|
53
|
+
},
|
54
|
+
template: `
|
55
|
+
<Card v-bind="args">
|
56
|
+
Sample card content
|
57
|
+
</ActionBanner>
|
58
|
+
`,
|
59
|
+
}),
|
60
|
+
}
|
61
|
+
|
62
|
+
export const PopoverShown = {
|
63
|
+
args: {
|
64
|
+
title: 'Sample card title',
|
65
|
+
showPopover: true,
|
66
|
+
popoverText: 'Sample popover text',
|
67
|
+
},
|
68
|
+
render: (args) => ({
|
69
|
+
components: { Card },
|
70
|
+
setup() {
|
71
|
+
return { args }
|
72
|
+
},
|
73
|
+
template: `
|
74
|
+
<Card v-bind="args">
|
75
|
+
Sample card content
|
76
|
+
</ActionBanner>
|
77
|
+
`,
|
78
|
+
}),
|
79
|
+
}
|
@@ -0,0 +1,135 @@
|
|
1
|
+
/* eslint-disable */
|
2
|
+
import { mount, config } from '@vue/test-utils'
|
3
|
+
import Card from '@/components/card'
|
4
|
+
import theme from '@/assets/theme'
|
5
|
+
|
6
|
+
config.global.components = {
|
7
|
+
EtPopover: {
|
8
|
+
template: '<div>{{ text }}</div>',
|
9
|
+
props: ['text'],
|
10
|
+
},
|
11
|
+
}
|
12
|
+
|
13
|
+
config.global.mocks = {
|
14
|
+
$gettext: (msg) => msg,
|
15
|
+
}
|
16
|
+
|
17
|
+
describe('Card Component', () => {
|
18
|
+
it('card title is shown when a title props is passed', () => {
|
19
|
+
const title = 'Test Card Title'
|
20
|
+
const wrapper = mount(Card, {
|
21
|
+
props: {
|
22
|
+
title,
|
23
|
+
},
|
24
|
+
global: {
|
25
|
+
provide: {
|
26
|
+
theme,
|
27
|
+
},
|
28
|
+
},
|
29
|
+
})
|
30
|
+
|
31
|
+
expect(wrapper.text()).toContain(title)
|
32
|
+
})
|
33
|
+
|
34
|
+
it('card spinner is shown when user set isLoading props to true', async () => {
|
35
|
+
// Start with isLoading is false
|
36
|
+
const wrapper = mount(Card, {
|
37
|
+
props: {
|
38
|
+
title: 'Test Card Title',
|
39
|
+
isLoading: false,
|
40
|
+
},
|
41
|
+
global: {
|
42
|
+
provide: {
|
43
|
+
theme,
|
44
|
+
},
|
45
|
+
},
|
46
|
+
})
|
47
|
+
|
48
|
+
let cardSpinner = wrapper.find('[data-test-id="card_spinner"]')
|
49
|
+
expect(cardSpinner.exists()).toBe(false)
|
50
|
+
await wrapper.setProps({ isLoading: true })
|
51
|
+
await wrapper.vm.$nextTick()
|
52
|
+
cardSpinner = wrapper.find('[data-test-id="card_spinner"]')
|
53
|
+
expect(cardSpinner.exists()).toBe(true)
|
54
|
+
})
|
55
|
+
|
56
|
+
it('card wrapper has custom class when viewCardClass props is passed', async () => {
|
57
|
+
const viewCardClass = 'sampleClass'
|
58
|
+
const wrapper = mount(Card, {
|
59
|
+
props: {
|
60
|
+
title: 'Test Card Title',
|
61
|
+
viewCardClass,
|
62
|
+
},
|
63
|
+
global: {
|
64
|
+
provide: {
|
65
|
+
theme,
|
66
|
+
},
|
67
|
+
},
|
68
|
+
})
|
69
|
+
|
70
|
+
const cardMainWrapper = wrapper.find('[data-test-id="card_main_wrapper"]')
|
71
|
+
expect(cardMainWrapper.classes()).toContain(viewCardClass)
|
72
|
+
})
|
73
|
+
|
74
|
+
it('card title has custom class when titleClass props is passed', async () => {
|
75
|
+
const titleClass = 'sampleClass'
|
76
|
+
const wrapper = mount(Card, {
|
77
|
+
props: {
|
78
|
+
title: 'Test Card Title',
|
79
|
+
titleClass,
|
80
|
+
},
|
81
|
+
global: {
|
82
|
+
provide: {
|
83
|
+
theme,
|
84
|
+
},
|
85
|
+
},
|
86
|
+
})
|
87
|
+
|
88
|
+
const cardTitle = wrapper.find('[data-test-id="card_title"]')
|
89
|
+
expect(cardTitle.classes()).toContain(titleClass)
|
90
|
+
})
|
91
|
+
|
92
|
+
it('card popover is shown when user set showPopover props to true', async () => {
|
93
|
+
// Start with showPopover is false
|
94
|
+
const wrapper = mount(Card, {
|
95
|
+
props: {
|
96
|
+
title: 'Test Card Title',
|
97
|
+
showPopover: false,
|
98
|
+
popoverText: 'Sample popover text',
|
99
|
+
},
|
100
|
+
global: {
|
101
|
+
provide: {
|
102
|
+
theme,
|
103
|
+
},
|
104
|
+
},
|
105
|
+
})
|
106
|
+
|
107
|
+
let cardPopover = wrapper.find('[data-test-id="card_popover"]')
|
108
|
+
expect(cardPopover.exists()).toBe(false)
|
109
|
+
await wrapper.setProps({ showPopover: true })
|
110
|
+
await wrapper.vm.$nextTick()
|
111
|
+
cardPopover = wrapper.find('[data-test-id="card_popover"]')
|
112
|
+
expect(cardPopover.exists()).toBe(true)
|
113
|
+
expect(cardPopover.text()).toContain('Sample popover text')
|
114
|
+
})
|
115
|
+
|
116
|
+
it('card popover text is set when user passed a popoverText props value', async () => {
|
117
|
+
const popoverText = 'Sample popover text'
|
118
|
+
const wrapper = mount(Card, {
|
119
|
+
props: {
|
120
|
+
title: 'Test Card Title',
|
121
|
+
showPopover: true,
|
122
|
+
popoverText,
|
123
|
+
},
|
124
|
+
global: {
|
125
|
+
provide: {
|
126
|
+
theme,
|
127
|
+
},
|
128
|
+
},
|
129
|
+
})
|
130
|
+
|
131
|
+
let cardPopover = wrapper.find('[data-test-id="card_popover"]')
|
132
|
+
expect(cardPopover.exists()).toBe(true)
|
133
|
+
expect(cardPopover.text()).toContain('Sample popover text')
|
134
|
+
})
|
135
|
+
})
|
@@ -2,15 +2,22 @@
|
|
2
2
|
<Wrapper
|
3
3
|
v-show="!isLoading"
|
4
4
|
:class="viewCardClass"
|
5
|
+
data-test-id="card_main_wrapper"
|
5
6
|
:min-width="minWidth"
|
6
7
|
:width="width"
|
7
8
|
>
|
8
|
-
<Spinner
|
9
|
+
<Spinner
|
10
|
+
v-if="isLoading"
|
11
|
+
data-test-id="card_spinner"
|
12
|
+
:limited-to-modal="true"
|
13
|
+
size="50px"
|
14
|
+
/>
|
9
15
|
<CardWrapper v-else>
|
10
|
-
<CardTitle :class="titleClass">
|
16
|
+
<CardTitle :class="titleClass" data-test-id="card_title">
|
11
17
|
{{ $gettext(title) }}
|
12
18
|
<EtPopover
|
13
19
|
v-if="showPopover && popoverText !== ''"
|
20
|
+
data-test-id="card_popover"
|
14
21
|
:text="popoverText"
|
15
22
|
/>
|
16
23
|
</CardTitle>
|
@@ -20,6 +27,19 @@
|
|
20
27
|
</template>
|
21
28
|
|
22
29
|
<script>
|
30
|
+
// To use:
|
31
|
+
// import RCCard from "@eturnity/eturnity_reusable_components/src/components/card"
|
32
|
+
// <RCCard
|
33
|
+
// :isLoading="true"
|
34
|
+
// minWidth="150px"
|
35
|
+
// popoverText="Sample popover text"
|
36
|
+
// :showPopover="true"
|
37
|
+
// title="Sample title"
|
38
|
+
// titleClass="sampleTitleClass"
|
39
|
+
// viewCardClass="sampleViewCardClass"
|
40
|
+
// width="200px"
|
41
|
+
// />
|
42
|
+
|
23
43
|
import styled from 'vue3-styled-components'
|
24
44
|
import Spinner from '../spinner'
|
25
45
|
|