Commit c3c6e472 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

- Amélioration et séparation des procédures AJAX

parent 387946ab
Loading
Loading
Loading
Loading
Loading
+1255 −550

File changed.

Preview size limit exceeded, changes collapsed.

+6 −0
Original line number Diff line number Diff line
@@ -3,6 +3,12 @@
Ce document regroupe des informations informelles lièes au développement des fonctionnalités dans Oscar.


## UI (via vue-cli)

```bash
npm install
```


## UI

+76 −0
Original line number Diff line number Diff line
@@ -5200,6 +5200,15 @@
      "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
      "dev": true
    },
    "axios": {
      "version": "0.21.0",
      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.0.tgz",
      "integrity": "sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==",
      "dev": true,
      "requires": {
        "follow-redirects": "^1.10.0"
      }
    },
    "babel-core": {
      "version": "7.0.0-bridge.0",
      "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
@@ -18898,6 +18907,73 @@
        }
      }
    },
    "vue-resource": {
      "version": "1.5.1",
      "resolved": "https://registry.npmjs.org/vue-resource/-/vue-resource-1.5.1.tgz",
      "integrity": "sha512-o6V4wNgeqP+9v9b2bPXrr20CGNQPEXjpbUWdZWq9GJhqVeAGcYoeTtn/D4q059ZiyN0DIrDv/ADrQUmlUQcsmg==",
      "dev": true,
      "requires": {
        "got": "^8.0.3"
      },
      "dependencies": {
        "get-stream": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
          "dev": true
        },
        "got": {
          "version": "8.3.2",
          "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
          "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
          "dev": true,
          "requires": {
            "@sindresorhus/is": "^0.7.0",
            "cacheable-request": "^2.1.1",
            "decompress-response": "^3.3.0",
            "duplexer3": "^0.1.4",
            "get-stream": "^3.0.0",
            "into-stream": "^3.1.0",
            "is-retry-allowed": "^1.1.0",
            "isurl": "^1.0.0-alpha5",
            "lowercase-keys": "^1.0.0",
            "mimic-response": "^1.0.0",
            "p-cancelable": "^0.4.0",
            "p-timeout": "^2.0.1",
            "pify": "^3.0.0",
            "safe-buffer": "^5.1.1",
            "timed-out": "^4.0.1",
            "url-parse-lax": "^3.0.0",
            "url-to-options": "^1.0.1"
          }
        },
        "into-stream": {
          "version": "3.1.0",
          "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
          "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
          "dev": true,
          "requires": {
            "from2": "^2.1.1",
            "p-is-promise": "^1.1.0"
          }
        },
        "prepend-http": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
          "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
          "dev": true
        },
        "url-parse-lax": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
          "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
          "dev": true,
          "requires": {
            "prepend-http": "^2.0.0"
          }
        }
      }
    },
    "vue-style-loader": {
      "version": "4.1.2",
      "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz",
+2 −0
Original line number Diff line number Diff line
@@ -21,8 +21,10 @@
    "@vue/cli": "^4.5.9",
    "@vue/cli-service-global": "^4.5.9",
    "@vue/composition-api": "^1.0.0-beta.21",
    "axios": "^0.21.0",
    "gulp": "^4.0.2",
    "vue-loader": "^15.9.5",
    "vue-resource": "^1.5.1",
    "vue-template-compiler": "^2.6.12"
  }
}
+76 −24
Original line number Diff line number Diff line
<template>
    <section>
    <section style="position: relative; background: rgba(255,0,0,.1)">
        <ajax-oscar :oscar-remote-data="remoterState" />

        <pre>{{ remoteState }}</pre>
        <button @click="remoterState.loading = !remoterState.loading">TEST REMOTE</button>

        <div class="overlay" v-if="deleteData">
            <div class="overlay-content">
                <h2>
@@ -10,9 +15,11 @@
                    <i class="icon-attention-1"></i>
                    Souhaitez-vous supprimer le fichier <strong>{{ deleteData.fileName }}</strong> ?
                </p>

                <button class="btn btn-danger" @click="deleteData = null">
                    <i class="icon-cancel-alt"></i> Annuler
                </button>

                <a class="btn btn-success" :href="deleteData.urlDelete">
                    <i class="icon-valid"></i> Confirmer
                </a>
@@ -40,13 +47,18 @@
            </div>
        </div>

        <article class="card xs" v-for="document in documentsPacked">
        <article class="card xs" v-for="document in documentsPacked" :key="document.id">
            <div class="card-title">
                <i class="picto icon-doc" :class="'doc' + document.extension"></i>

                <template v-if="document.editmode">
                    <select @change="changeTypeDocument(document, $event)" @blur="document.editmode = false">
                        <option :value="key" v-for="(documentType, key) in documentTypes" :selected="document.categoryText == documentType">{{ documentType }}</option>
                        <option v-for="(documentType, key) in documentTypes"
                                :value="key"
                                :key="documentType.id"
                                :selected="document.categoryText == documentType">
                            {{ documentType }}
                        </option>
                    </select>
                </template>
                <template v-else>
@@ -74,7 +86,7 @@
                    <i class="icon-angle-up" v-show="document.explode"></i>
                </div>
                <div v-if="document.previous.length" v-show="document.explode">
                    <article v-for="sub in document.previous" class="subdoc text-highlight">
                    <article v-for="sub in document.previous" class="subdoc text-highlight" :key="sub.id">
                        <i class="picto icon-doc" :class="'doc' + sub.extension"></i>

                        <strong>{{ sub.fileName }}</strong>
@@ -112,10 +124,20 @@
</template>
<script>

    import AjaxOscar from "./remote/AjaxOscar";
    import OscarRemoteData from "./remote/OscarRemoteData";

    // test
    let oscarRemoteData = new OscarRemoteData();

    function flashMessage(){
        // TODO
    }

    export default {

        setup(){
            console.log("Setup")
        components: {
            "ajax-oscar": AjaxOscar
        },

        props: {
@@ -133,7 +155,8 @@
                loading: true,
                sortField: 'dateUpload',
                sortDirection: -1,
                editable: true
                editable: true,
                remoterState: oscarRemoteData.state
            }
        },

@@ -143,13 +166,17 @@
             * @returns {Array}
             */
            documentsPacked(){
                var out = this.documents.sort( function(a,b) {
                let out = [];
                if( this.documents ){
                    let documents = this.documents;
                    out = documents.sort(function(a, b) {
                            if (a[this.sortField] < b[this.sortField])
                                return -1 * this.sortDirection;
                            if( a[this.sortField] > b[this.sortField] )
                                return 1 * this.sortDirection;
                            return 0;
                        }.bind(this));
                };
                return out;
            }
        },
@@ -172,27 +199,51 @@
            },

            changeTypeDocument: function( document, event ){
                var newType = $(event.target.selectedOptions[0]).text();

                $.post(this.urlDocumentType, {
                /***
                 oscarRemoteData
                 .setPendingMessage("Chargement des documents")
                 .setErrorMessage("Impossible de charger les documents")
                 .performGet(this.url, this.handlerSuccess);
                 */

                var newType = event.target.selectedOptions[0].text;

                oscarRemoteData
                    .setPendingMessage("Modification du type de document")
                    .setErrorMessage("Impossible de modifier le type de document")
                    .performPost(this.urlDocumentType, {
                        documentId: document.id,
                        type: newType
                }).then(ok => {
                    flashMessage('success', 'Le document a bien été modifié');

                    }, (response) => {
                        // Modification du type
                        document.categoryText = newType;
                        document.editMode = false;
                        document.editMode = false;
                        this.$forceUpdate();
                    //this.$forceUpdate();
                }, error => {
                    flashMessage('error', 'Erreur' + error.responseText);

                    }, () => {
                        document.editMode = false;
                });
                        this.$forceUpdate();
                    })

                // this.$http.post(this.urlDocumentType, {
                //     documentId: document.id,
                //     type: newType
                // }).then(ok => {
                //     flashMessage('success', 'Le document a bien été modifié', ok);
                //     document.categoryText = newType;
                //     document.editMode = false;
                //     this.$forceUpdate();
                // }, error => {
                //     flashMessage('error', 'Erreur' + error.responseText);
                //     document.editMode = false;
                // });
            },

            fetch(){
                this.$http.get(this.url).then(
                    ok => {
                        let data = ok.data.datas;
            handlerSuccess(success){
                let data = success.data.datas;
                let documentsOrdered = [];
                let documents = {};

@@ -211,11 +262,12 @@
                });
                this.documents = documentsOrdered;
            },
                    ko => {
                        console.log("ERROR", ko);
                    }
                )

            fetch(){
                oscarRemoteData
                    .setPendingMessage("Chargement des documents")
                    .setErrorMessage("Impossible de charger les documents")
                    .performGet(this.url, this.handlerSuccess);
            }
        },

Loading