var t = `
`
export default {
props: {
name: { type: String },
defaultWidth: { type: Number, default: 200 },
minWidth: { type: Number, default: 100 },
direction: { type: String, default: "right" },
},
data() {
return {
paneWidth: null,
maxWidth: null,
startResizeClientX: null,
startResizePaneWidth: null,
resizing: false,
}
},
methods: {
startResize(event) {
this.startResizeClientX = event.clientX;
this.startResizePaneWidth = this.paneWidth;
this.maxWidth = this.$el.parentElement.offsetWidth - 50;
this.resizing = true;
event.preventDefault();
document.addEventListener('mousemove', this.doResize);
document.addEventListener('mouseup', this.stopResize);
},
doResize(event) {
let draggedDistance = event.clientX - this.startResizeClientX;
if (this.direction === 'left') draggedDistance = -draggedDistance;
const newWidth = this.startResizePaneWidth + draggedDistance;
if (newWidth <= this.maxWidth && newWidth >= this.minWidth ) this.paneWidth = newWidth;
},
stopResize() {
this.resizing = false;
this.savePreferredWidth();
document.removeEventListener('mousemove', this.doResize);
document.removeEventListener('mouseup', this.stopResize);
},
setDefaultWidth() {
this.paneWidth = this.defaultWidth;
this.savePreferredWidth()
},
savePreferredWidth() {
const key = `${this.name}Width`;
this.$notesiumState[key] = this.paneWidth;
},
loadPreferredWidth() {
const key = `${this.name}Width`;
this.paneWidth = parseInt(this.$notesiumState[key], 10) || this.defaultWidth;
},
},
mounted() {
this.loadPreferredWidth();
},
template: t
}