Skip to content

Commit 8df70d0

Browse files
committed
refactor: update popper to 2.0.0 version
1 parent a68b5ce commit 8df70d0

File tree

6 files changed

+42
-34
lines changed

6 files changed

+42
-34
lines changed

package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@
7070
"@coreui/icons": "^1.0.0",
7171
"@coreui/icons-vue": "^1.1.2",
7272
"@coreui/utils": "^1.0.0",
73+
"@popperjs/core": "^2.0.0",
7374
"lodash.clonedeep": "^4.5.0",
7475
"perfect-scrollbar": "^1.4.0",
75-
"popper.js": "^1.16.0",
7676
"tooltip.js": "^1.3.3",
7777
"vue": "^2.6.11",
7878
"vue-clickaway2": "^2.3.1",

src/components/dropdown/CDropdown.vue

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,8 @@
3333

3434
<script>
3535
import CLink from '../link/CLink'
36-
import Popper from 'popper.js'
36+
import { createPopper } from '@popperjs/core'
3737
import { mixin as clickaway } from 'vue-clickaway2'
38-
import { deepObjectsMerge } from '@coreui/utils/src/index.js'
3938
4039
export default {
4140
name: 'CDropdown',
@@ -60,10 +59,6 @@ export default {
6059
validator: val => ['', 'sm', 'lg'].includes(val)
6160
},
6261
split: Boolean,
63-
offset: {
64-
type: Number,
65-
default: 0
66-
},
6762
placement: {
6863
type: String,
6964
validator: position => {
@@ -76,11 +71,15 @@ export default {
7671
},
7772
default: 'bottom-start'
7873
},
74+
offset: {
75+
type: Array,
76+
default: () => [0, 0]
77+
},
7978
flip: {
8079
type: Boolean,
8180
default: true
8281
},
83-
popperConfig: Object
82+
customPopperOptions: Object
8483
},
8584
data () {
8685
return {
@@ -135,30 +134,40 @@ export default {
135134
return
136135
}
137136
this.$nextTick(() => {
138-
this._popper = new Popper(
137+
this._popper = createPopper(
139138
this.$el.firstElementChild,
140139
this.$refs.menu,
141-
this.computedPopperConfig
140+
this.customPopperOptions || this.defaultPopperOptions
142141
)
143142
})
144143
145144
}
146145
},
147146
computed: {
148-
generatedPopperConfig () {
147+
defaultPopperOptions () {
149148
return {
150149
placement: this.placement,
151-
modifiers: {
152-
offset: { offset: this.offset },
153-
flip: { enabled: this.flip }
154-
}
150+
modifiers: [
151+
{
152+
name: 'offset',
153+
options: {
154+
offset: this.offset
155+
}
156+
},
157+
{
158+
name: 'flip',
159+
enabled: this.flip
160+
},
161+
{
162+
name: 'preventOverflow',
163+
options: {
164+
padding: 10
165+
},
166+
},
167+
]
155168
}
156169
},
157170
158-
computedPopperConfig () {
159-
return deepObjectsMerge(this.generatedPopperConfig, this.popperConfig || {})
160-
},
161-
162171
carretClass () {
163172
return this.placement.includes('top') ? 'dropup' :
164173
this.placement.includes('right') ? 'dropright' :

src/components/dropdown/tests/CDropdown.spec.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const localVue = new createLocalVue()
66
localVue.use(VueRouter)
77
const router = new VueRouter()
88

9-
//needed for popper.js
9+
//needed for @popperjs/core
1010
global.document.createRange = () => ({
1111
setStart: () => {},
1212
setEnd: () => {},
@@ -34,7 +34,7 @@ const customWrapper = mount(Component, {
3434
color: 'success',
3535
size: 'lg',
3636
split: true,
37-
offset: 20,
37+
offset: [20, 0],
3838
placement: 'right-end',
3939
flip: false,
4040
},
@@ -50,9 +50,8 @@ const navWrapper = mount(Component, {
5050
inNav: true,
5151
caret: false,
5252
color: 'success',
53-
offset: 20,
5453
placement: 'left',
55-
flip: false
54+
customPopperOptions: {}
5655
},
5756
slots: {
5857
default: 'CDropdown subcomponents',
@@ -119,13 +118,6 @@ describe(ComponentName, () => {
119118
toggle()
120119
expect(customWrapper.vm.visible).toBe(false)
121120
})
122-
it('generates popper config properly', () => {
123-
const modifiers = () => customWrapper.vm.computedPopperConfig.modifiers
124-
expect(modifiers().offset.offset).toBe(20)
125-
customWrapper.setProps({ popperConfig: {modifiers:{offset:{ offset:22 }}}})
126-
expect(modifiers().offset.offset).toBe(22)
127-
expect(modifiers().flip.enabled).toBe(false)
128-
})
129121
it('opens then toggler is passed by slot', () => {
130122
const toggle = () => {
131123
jest.useFakeTimers()

src/components/dropdown/tests/__snapshots__/CDropdown.spec.js.snap

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,10 @@ exports[`CDropdown renders custom wrapper correctly 1`] = `
5858
5959
<div
6060
class="additional-menu-class dropdown-menu show"
61-
style="position: absolute; transform: translate3d(NaNpx, NaNpx, 0); top: 0px; left: 0px; will-change: transform;"
62-
x-placement="right-end"
61+
data-popper-escaped=""
62+
data-popper-placement="right-end"
63+
data-popper-reference-hidden=""
64+
style="position: absolute; left: 0px; top: 0px; transform: translate(0px, 20px);"
6365
>
6466
CDropdown subcomponents
6567
</div>

src/components/index.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,10 @@ export declare class CDropdown extends Vue {
133133
color: string
134134
size: string
135135
split: boolean
136-
offset: number
136+
offset: [number, number]
137137
placement: string
138138
flip: boolean
139-
popperConfig: object
139+
customPopperOptions: object
140140
}
141141

142142
export declare class CDropdownDivider extends Vue {

0 commit comments

Comments
 (0)