Skip to content

Commit

Permalink
Make segment sortable using drag and drop
Browse files Browse the repository at this point in the history
  • Loading branch information
CORBIERE Sebastien committed Feb 27, 2024
1 parent d4bc72d commit 434023d
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 10 deletions.
17 changes: 17 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"core-js": "^3.8.3",
"vue": "^3.2.13",
"vue-router": "^4.3.0",
"vuedraggable": "^4.1.0",
"vuex": "^4.1.0"
},
"devDependencies": {
Expand Down
44 changes: 34 additions & 10 deletions src/views/SegmentSelector.vue
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
<a v-if="sharableLink" :href="sharableLink" target="_blank">Open Sharable Link</a>
</header>
<div class="content-area">

<main>
<div class="video-url-input">
<label for="videoUrl">Video URL:</label>
Expand All @@ -21,20 +20,26 @@
:startTime="selectedSegment.startTime" :pauseTime="selectedSegment.endTime" />
</main>
<aside>
<input v-model="filterText" type="text" placeholder="Filter segments by name">
<button @click="addSegment">Add New Segment</button>
<ul class="segments-list">
<SegmentItem v-for="(segment, index) in segments" :key="index" :segment="segment" :index="index"
:class="{ 'selected-segment': segment === selectedSegment }" @click="selectSegment(segment)"
@delete-segment="removeSegment" @set-start-time="setCurrentTime($event, 'start')"
@set-end-time="setCurrentTime($event, 'end')" />
</ul>
<draggable v-model="segments" item-key="id" @end="onEnd" class="segments-list">
<template #header>
<button @click="addSegment">Add New Segment</button>
</template>
<template #item="{ element, index }">
<SegmentItem :segment="element" :key="element.id" :index="index"
:class="{ 'selected-segment': element === selectedSegment }"
@click="() => selectSegment(element)" @delete-segment="removeSegment"
@set-start-time="() => setCurrentTime(element, 'start')"
@set-end-time="() => setCurrentTime(element, 'end')" />
</template>
</draggable>
</aside>
</div>
</div>
</template>

<script>
import draggable from 'vuedraggable';
import YouTubePlayer from '@/components/YouTubePlayer.vue';
import SegmentItem from '@/components/SegmentItem.vue';
import { segmentMixin } from '@/mixins/segmentMixin.js';
Expand All @@ -43,6 +48,7 @@ export default {
mixins: [segmentMixin],
components: {
YouTubePlayer,
draggable,
SegmentItem,
},
name: 'SegmentSelector',
Expand All @@ -54,6 +60,7 @@ export default {
selectedSegment: {},
filterText: '',
sharableLink: '',
maxSegmentId: 0,
};
},
watch: {
Expand Down Expand Up @@ -158,6 +165,7 @@ export default {
const videoId = this.extractVideoId(this.videoUrl);
if (videoId) {
this.segments.push({
id: this.maxSegmentId++,
name: "",
videoId: videoId, // Storing only the video ID
startTime: this.$refs.youtubePlayer.getCurrentTime(),
Expand All @@ -181,6 +189,20 @@ export default {
segment.endTime = this.$refs.youtubePlayer.getCurrentTime();
}
},
onEnd(event) {
// event.oldIndex - the index of the item before drag started
// event.newIndex - the index of the item after drag ended
const oldIndex = event.oldIndex - 1;
const newIndex = event.newIndex - 1;
console.log(`Moved item from index ${oldIndex} to ${newIndex}`);
// console.log("old", this.segments[oldIndex], "new", this.segments[newIndex], ...this.segments);
// Check if the item was moved (the indices are different)
if (oldIndex !== newIndex) {
// this.segments = [...this.segments];
// console.log(movedItem, this.segments);
}
},
},
mounted() {
const urlParams = new URLSearchParams(window.location.search);
Expand All @@ -207,10 +229,12 @@ export default {
}
}
this.segments = this.segments.filter(s => s); // remove null entry
if (this.segments && this.segments.length) {
this.selectSegment(this.segments[0]);
this.segments.forEach(segment => segment.id = this.maxSegmentId++);
}
// Initialize the YouTube player here as well
},
};
</script>
Expand Down

0 comments on commit 434023d

Please sign in to comment.