97 lines
2.9 KiB
JavaScript
97 lines
2.9 KiB
JavaScript
import { Controller } from '@hotwired/stimulus';
|
|
|
|
/*
|
|
* The following line makes this controller "lazy": it won't be downloaded until needed
|
|
* See https://symfony.com/bundles/StimulusBundle/current/index.html#lazy-stimulus-controllers
|
|
*/
|
|
|
|
/* stimulusFetch: 'lazy' */
|
|
export default class extends Controller {
|
|
static targets = ['button', 'options']
|
|
static outlets = ['result-filter', 'dialog']
|
|
static values = {
|
|
tmdbId: String,
|
|
imdbId: String,
|
|
title: String,
|
|
}
|
|
|
|
initialize() {
|
|
// Called once when the controller is first instantiated (per element)
|
|
|
|
// Here you can initialize variables, create scoped callables for event
|
|
// listeners, instantiate external libraries, etc.
|
|
// this._fooBar = this.fooBar.bind(this)
|
|
}
|
|
|
|
connect() {
|
|
// Called every time the controller is connected to the DOM
|
|
// (on page load, when it's added to the DOM, moved in the DOM, etc.)
|
|
|
|
// Here you can add event listeners on the element or target elements,
|
|
// add or remove classes, attributes, dispatch custom events, etc.
|
|
// this.fooTarget.addEventListener('click', this._fooBar)
|
|
}
|
|
|
|
// Add custom controller actions here
|
|
// fooBar() { this.fooTarget.classList.toggle(this.bazClass) }
|
|
|
|
disconnect() {
|
|
// Called anytime its element is disconnected from the DOM
|
|
// (on page change, when it's removed from or moved in the DOM, etc.)
|
|
|
|
// Here you should remove all event listeners added in "connect()"
|
|
// this.fooTarget.removeEventListener('click', this._fooBar)
|
|
}
|
|
|
|
toggle() {
|
|
this.optionsTarget.classList.toggle('hidden');
|
|
}
|
|
|
|
async monitorSeries() {
|
|
await this.makeMonitor({
|
|
tmdbId: this.tmdbIdValue,
|
|
imdbId: this.imdbIdValue,
|
|
title: this.titleValue,
|
|
monitorType: 'tvshows',
|
|
});
|
|
if (this.hasDialogOutlet) {
|
|
this.dialogOutlet.close();
|
|
}
|
|
}
|
|
|
|
async monitorSeason() {
|
|
await this.makeMonitor({
|
|
tmdbId: this.tmdbIdValue,
|
|
imdbId: this.imdbIdValue,
|
|
title: this.titleValue,
|
|
monitorType: 'tvseason',
|
|
season: this.resultFilterOutlet.activeFilter['season'],
|
|
});
|
|
}
|
|
|
|
async monitorEpisode() {
|
|
// ToDo: figure out how to set episode
|
|
await this.makeMonitor({
|
|
tmdbId: this.tmdbIdValue,
|
|
imdbId: this.imdbIdValue,
|
|
title: this.titleValue,
|
|
monitorType: 'tvepisode',
|
|
season: this.resultFilterOutlet.activeFilter['season'],
|
|
episode: '',
|
|
});
|
|
}
|
|
|
|
async makeMonitor(body) {
|
|
const response = await fetch('/api/monitor', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'Accept': 'application/json',
|
|
},
|
|
body: JSON.stringify(body)
|
|
});
|
|
|
|
return await response.json();
|
|
}
|
|
}
|