import CoreForm from "../Form/Form.js"; import FormInput from "../Form/Input.js"; import BsModal from "../Bootstrap/Modal.js"; import AbstractWidget from './Abstract'; export default { name: "WidgetsUrl", mixins: [AbstractWidget], inject: { editModeIsActive: { type: Boolean, default: false } }, components:{ CoreForm, FormInput, BsModal }, data: () => ({ bookmark_id: null, title_input: "", url_input: "", validation: { invalidURL: false, invalidTitel: false, }, }), computed: { tagName() { return this.config.tag !== undefined && this.config.tag.length > 0 ? this.config.tag : this.$p.t("bookmark", "myBookmarks"); }, emptyBookmarks() { if (this.shared instanceof Array && this.shared.length == 0) return true; if (!this.shared) return true; return false; }, }, methods: { stopDrag(event){ event.preventDefault(); }, clearInputs(){ this.title_input = ""; this.url_input = ""; }, openCreateModal() { this.$refs.createModal.show() }, openEditModal(bookmark) { this.title_input = bookmark.title; this.url_input = bookmark.url; this.bookmark_id = bookmark.bookmark_id; this.$refs.editModal.show() }, editBookmark(event){ event.preventDefault(); if(!this.bookmark_id || !this.url_input || !this.title_input) return; this.$fhcApi.factory.bookmark .update({ bookmark_id: this.bookmark_id, title: this.title_input, url: this.url_input, }) .then((res) => res.data) .then((result) => { this.$fhcAlert.alertInfo(this.$p.t("bookmark", "bookmarkUpdated")); // refetch the bookmarks to see the updates this.fetchBookmarks(); // reset the values for the title and url inputs this.clearInputs(); this.$refs.editModal.hide(); this.bookmark_id = null; }) .catch(this.$fhcAlert.handleSystemError); }, insertBookmark(event) { event.preventDefault(); // reset is-invalid css on url input field for (let key of Object.keys(this.validation)) { this.validation[key] = false; } // early return if validation failed if (!this.isValidationSuccessfull()) return; this.$fhcApi.factory.bookmark .insert({ tag: this.config.tag, title: this.title_input, url: this.url_input, }) .then((res) => res.data) .then((result) => { this.$fhcAlert.alertInfo(this.$p.t("bookmark", "bookmarkAdded")); // refetch the bookmarks to see the updates this.fetchBookmarks(); this.$refs.createModal.hide(); // reset the values for the title and url inputs this.clearInputs(); }) .catch(this.$fhcAlert.handleSystemError); }, isValidationSuccessfull() { // validate the input fields if (this.title_input.length === 0) { this.$fhcAlert.alertError(this.$p.t("bookmark", "invalidTitel")); this.validation.invalidTitel = true; } if (!URL.canParse(this.url_input)) { this.$fhcAlert.alertError(this.$p.t("bookmark", "invalidUrl")); this.validation.invalidURL = true; } return !Object.values(this.validation).some(value => value === true); }, async fetchBookmarks() { await this.$fhcApi.factory.bookmark .getBookmarks() .then((res) => res.data) .then((result) => { this.shared = result; }) .catch(this.$fhcAlert.handleSystemError); }, async removeLink(bookmark_id) { let isConfirmed = await this.$fhcAlert.confirmDelete(); // early return if the confirm dialog was not confirmed if (!isConfirmed) return; this.$fhcApi.factory.bookmark .delete(bookmark_id) .then((res) => res.data) .then((result) => { this.$fhcAlert.alertInfo(this.$p.t("bookmark", "bookmarkDeleted")); // refetch the bookmarks to see the updates this.fetchBookmarks(); }) .catch(this.$fhcAlert.handleSystemError); }, }, async mounted() { await this.fetchBookmarks(); }, created() { // // this.$emit('setConfig', true); -> use this to enable widget config mode if needed }, template: /*html*/ `