Documents: remove vuex from create file

* Set warning about using api.js
pull/5432/head
daniboygg 2 years ago
parent 836e887071
commit 092161858a
  1. 2
      assets/vue/components/documents/FormNewDocument.vue
  2. 5
      assets/vue/components/documents/TemplateList.vue
  3. 11
      assets/vue/services/api.js
  4. 21
      assets/vue/services/documents.js
  5. 54
      assets/vue/views/documents/CreateFile.vue

@ -3,7 +3,7 @@
<BaseInputTextWithVuelidate <BaseInputTextWithVuelidate
id="item_title" id="item_title"
v-model.trim="item.title" v-model.trim="item.title"
vuelidate-property="v$.item.title" :vuelidate-property="v$.item.title"
:label="$t('Title')" :label="$t('Title')"
/> />

@ -15,7 +15,10 @@
export default { export default {
name: 'TemplateList', name: 'TemplateList',
props: { props: {
templates: [] templates: {
type: Array,
required: true,
}
}, },
methods: { methods: {
selectTemplate(content) { selectTemplate(content) {

@ -1,5 +1,8 @@
import fetch from '../utils/fetch'; import fetch from '../utils/fetch';
// As stated here https://github.com/chamilo/chamilo-lms/pull/5386#discussion_r1578471409
// this service should not be used and instead the assets/bue/config/api.js should be used instead
// take a look at assets/bue/services/socialService.js to have an example
export default function makeService(endpoint, extensions = {}) { export default function makeService(endpoint, extensions = {}) {
const baseService = { const baseService = {
find(id, params) { find(id, params) {
@ -63,6 +66,14 @@ export default function makeService(endpoint, extensions = {}) {
method: 'PUT', method: 'PUT',
body: JSON.stringify(payload) body: JSON.stringify(payload)
}); });
},
handleError(error, errorsRef, violationsRef) {
if (error instanceof SubmissionError) {
violationsRef.value = error.errors
errorsRef.value = error.errors._error
return
}
errorsRef.value = error.message
} }
}; };

@ -1,3 +1,20 @@
import makeService from './api'; import makeService from "./api"
import baseService from "./baseService"
export default makeService('documents'); // we should refactor this to use methods in export default using baseService
// see assets/vue/services/api.js for reference
const oldService = makeService("documents")
export default {
...oldService,
/**
* Retrieves all document templates for a given course.
*
* @param {string} courseId - The ID of the course.
* @returns {Promise}
*/
getTemplates: async (courseId) => {
return baseService.get(`/template/all-templates/${courseId}`)
},
}

@ -15,7 +15,7 @@
<div class="documents-form-container"> <div class="documents-form-container">
<DocumentsForm <DocumentsForm
ref="createForm" ref="createForm"
:errors="violations" :errors="errors"
:values="item" :values="item"
/> />
<Panel <Panel
@ -34,8 +34,6 @@
</template> </template>
<script> <script>
import { mapActions } from "vuex"
import { createHelpers } from "vuex-map-fields"
import DocumentsForm from "../../components/documents/FormNewDocument.vue" import DocumentsForm from "../../components/documents/FormNewDocument.vue"
import Loading from "../../components/Loading.vue" import Loading from "../../components/Loading.vue"
import Toolbar from "../../components/Toolbar.vue" import Toolbar from "../../components/Toolbar.vue"
@ -43,15 +41,10 @@ import CreateMixin from "../../mixins/CreateMixin"
import { RESOURCE_LINK_PUBLISHED } from "../../components/resource_links/visibility" import { RESOURCE_LINK_PUBLISHED } from "../../components/resource_links/visibility"
import Panel from "primevue/panel" import Panel from "primevue/panel"
import TemplateList from "../../components/documents/TemplateList.vue" import TemplateList from "../../components/documents/TemplateList.vue"
import axios from "axios" import documentsService from "../../services/documents"
const servicePrefix = "Documents" const servicePrefix = "Documents"
const { mapFields } = createHelpers({
getterType: "documents/getField",
mutationType: "documents/updateField",
})
export default { export default {
name: "DocumentsCreateFile", name: "DocumentsCreateFile",
servicePrefix, servicePrefix,
@ -68,19 +61,19 @@ export default {
const finalTags = this.getCertificateTags() const finalTags = this.getCertificateTags()
return { return {
item: { item: {
title: "",
contentFile: "",
newDocument: true, // Used in FormNewDocument.vue to show the editor newDocument: true, // Used in FormNewDocument.vue to show the editor
filetype: filetype, filetype: filetype,
parentResourceNodeId: null, parentResourceNodeId: null,
resourceLinkList: null, resourceLinkList: null,
contentFile: null,
}, },
templates: [], templates: [],
isLoading: false,
errors: {},
finalTags, finalTags,
} }
}, },
computed: {
...mapFields(["error", "isLoading", "created", "violations"]),
},
created() { created() {
this.item.parentResourceNodeId = this.$route.params.node this.item.parentResourceNodeId = this.$route.params.node
this.item.resourceLinkList = JSON.stringify([ this.item.resourceLinkList = JSON.stringify([
@ -92,7 +85,6 @@ export default {
}, },
]) ])
}, },
methods: { methods: {
handleBack() { handleBack() {
this.$router.back() this.$router.back()
@ -100,17 +92,16 @@ export default {
addTemplateToEditor(templateContent) { addTemplateToEditor(templateContent) {
this.item.contentFile = templateContent this.item.contentFile = templateContent
}, },
fetchTemplates() { async fetchTemplates() {
this.errors = {}
const courseId = this.$route.query.cid const courseId = this.$route.query.cid
axios try {
.get(`/template/all-templates/${courseId}`) let data = await documentsService.getTemplates(courseId)
.then((response) => { this.templates = data
this.templates = response.data } catch (error) {
console.log("Templates fetched successfully:", this.templates) console.error(error)
}) this.errors = error.errors
.catch((error) => { }
console.error("Error fetching templates:", error)
})
}, },
getCertificateTags() { getCertificateTags() {
let finalTags = "" let finalTags = ""
@ -144,7 +135,20 @@ export default {
return finalTags return finalTags
}, },
...mapActions("documents", ["createWithFormData", "reset"]), async createWithFormData(payload) {
this.isLoading = true
this.errors = {}
try {
let response = await documentsService.createWithFormData(payload)
let data = await response.json()
console.log(data)
} catch (error) {
console.error(error)
this.errors = error.errors
} finally {
this.isLoading = false
}
},
}, },
mounted() { mounted() {
this.fetchTemplates() this.fetchTemplates()

Loading…
Cancel
Save