<commit_before><template>
  <div class="container">
    <div class="aj-main-container">
      <div class="aj-category-title-wrapper">
        <h1>Qu'avez-vous fait avec votre simulation&nbsp;?</h1>
      </div>
      <div class="aj-box-wrapper">
        <div class="aj-unbox">
          <LoadingModal v-if="!droits">
            <p v-show="!droits"> Récupération de la situation en cours… </p>
          </LoadingModal>
          <div v-if="submitted" class="alert alert-success">
            Merci d'avoir rempli ce questionnaire !
          </div>

          <form v-if="droits && !submitted">
            <p>
              Vous avez effectué une simulation le
              <strong>{{ createdAt }}</strong
              >.
            </p>
            <p>
              Répondez à ce questionnaire afin de nous aider à améliorer la
              pertinence des résultats que nous affichons. Ça ne prend pas plus
              de 2 minutes !
            </p>
            <div
              v-for="droit in droits"
              :key="droit.id"
              class="aj-box normal-padding-bottom aj-survey-details"
              itemscope
              itemtype="http://schema.org/GovernmentService"
            >
              <div class="aj-droit-survey normal-padding-bottom">
                <div class="aj-droit-identity">
                  <img
                    class="aj-droit-illustration"
                    :src="
                      require(`./../../public/img/${droit.institution.imgSrc}`)
                    "
                    :alt="droit.label"
                  />
                  <h2 class="aj-question" itemprop="name">
                    {{ droit.label }}
                  </h2>
                </div>

                <DroitEstime :droit="droit" />

                <div class="aj-droit-content">
                  <fieldset class="form__group">
                    <legend>
                      <h3 class="aj-question">
                        Qu'avez-vous fait pour {{ prefix(droit)
                        }}{{ droit.label }}&nbsp;?
                      </h3>
                    </legend>
                    <div
                      v-for="choice in droit.choices"
                      :key="choice.value"
                      class="aj-selection-wrapper"
                    >
                      <input
                        :id="`choices_${droit.id}_${choice.value}`"
                        v-model="droit.choiceValue"
                        type="radio"
                        :name="`choices_${droit.id}_${choice.value}`"
                        :value="choice.value"
                      />
                      <label :for="`choices_${droit.id}_${choice.value}`">
                        {{ choice.label }}
                      </label>
                    </div>
                  </fieldset>
                  <div
                    v-show="isNegative(droit.choiceValue)"
                    class="form__group"
                  >
                    <label
                      ><h3
                        :for="`choiceComments_${droit.id}`"
                        class="aj-question"
                      >
                        Pour quelles raisons&nbsp;?
                      </h3></label
                    >
                    <textarea
                      :id="`choiceComments_${droit.id}`"
                      v-model="droit.choiceComments"
                      placeholder="..."
                    />
                  </div>
                </div>
              </div>
            </div>
            <button
              type="submit"
              :class="`button large ${!isComplete ? 'secondary  ' : ''}`"
              :disabled="!isComplete"
              @click.prevent="submit"
            >
              Envoyer
            </button>
          </form>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import axios from "axios"
import moment from "moment"

import Institution from "@/lib/Institution"
import LoadingModal from "@/components/LoadingModal"
import DroitEstime from "../components/DroitEstime"

const choices = [
  { value: "already", label: "Rien, j'en bénéficiais déjà." },
  { value: "failed", label: "Je n'ai pas réussi à faire une demande." },
  { value: "asked", label: "J'ai fait une demande." },
  { value: "nothing", label: "Je n'ai rien fait." },
]

function isNegative(value) {
  return value === "failed" || value === "nothing"
}

export default {
  name: "Suivi",
  components: {
    DroitEstime,
    LoadingModal,
  },
  data: function () {
    return {
      submitted: false,
      droits: null,
      followup: null,
    }
  },
  computed: {
    createdAt: function () {
      return this.followup && moment(this.followup.createdAt).format("ll")
    },
    isComplete: function () {
      let choiceValues = this.droits.map((droit) => droit.choiceValue)
      return (
        choiceValues.filter((choiceValue) => choiceValue).length ===
        this.droits.length
      )
    },
  },
  mounted: function () {
    axios
      .get(`/api/followups/surveys/${this.$route.query.token}`)
      .then((response) => {
        this.followup = response.data
        let benefitsIds = this.followup.benefits.map((benefit) => benefit.id)

        const benefitsNormalized = Institution.benefits.all
          .filter((benefit) => benefitsIds.includes(benefit.id))
          .map((benefit) => {
            let montant = this.followup.benefits.find(
              (followupBenefit) => followupBenefit.id === benefit.id
            ).amount

            return {
              ...benefit,
              montant: montant,
              choices: choices,
              choiceValue: null,
              choiceComments: "",
            }
          })

        this.droits = benefitsNormalized
      })
  },
  methods: {
    isBoolean: (val) => typeof val === "boolean",
    isString: (val) => typeof val === "string",
    isNumber: (val) => typeof val === "number",
    isNegative,
    prefix: function (droit) {
      return `${droit.prefix}${
        droit.prefix[droit.prefix.length - 1] == "’" ? "" : " "
      }`
    },
    submit: function () {
      let answers = this.droits.map((droit) => ({
        id: droit.id,
        value: droit.choiceValue,
        comments: droit.choiceComments,
      }))

      let that = this
      axios
        .post(
          `/api/followups/surveys/${this.$route.query.token}/answers`,
          answers<commit_msg>Vérifie l'existence d'un préfixe (#2273)<commit_after><template>
  <div class="container">
    <div class="aj-main-container">
      <div class="aj-category-title-wrapper">
        <h1>Qu'avez-vous fait avec votre simulation&nbsp;?</h1>
      </div>
      <div class="aj-box-wrapper">
        <div class="aj-unbox">
          <LoadingModal v-if="!droits">
            <p v-show="!droits"> Récupération de la situation en cours… </p>
          </LoadingModal>
          <div v-if="submitted" class="alert alert-success">
            Merci d'avoir rempli ce questionnaire !
          </div>

          <form v-if="droits && !submitted">
            <p>
              Vous avez effectué une simulation le
              <strong>{{ createdAt }}</strong
              >.
            </p>
            <p>
              Répondez à ce questionnaire afin de nous aider à améliorer la
              pertinence des résultats que nous affichons. Ça ne prend pas plus
              de 2 minutes !
            </p>
            <div
              v-for="droit in droits"
              :key="droit.id"
              class="aj-box normal-padding-bottom aj-survey-details"
              itemscope
              itemtype="http://schema.org/GovernmentService"
            >
              <div class="aj-droit-survey normal-padding-bottom">
                <div class="aj-droit-identity">
                  <img
                    class="aj-droit-illustration"
                    :src="
                      require(`./../../public/img/${droit.institution.imgSrc}`)
                    "
                    :alt="droit.label"
                  />
                  <h2 class="aj-question" itemprop="name">
                    {{ droit.label }}
                  </h2>
                </div>

                <DroitEstime :droit="droit" />

                <div class="aj-droit-content">
                  <fieldset class="form__group">
                    <legend>
                      <h3 class="aj-question">
                        Qu'avez-vous fait pour {{ prefix(droit)
                        }}{{ droit.label }}&nbsp;?
                      </h3>
                    </legend>
                    <div
                      v-for="choice in droit.choices"
                      :key="choice.value"
                      class="aj-selection-wrapper"
                    >
                      <input
                        :id="`choices_${droit.id}_${choice.value}`"
                        v-model="droit.choiceValue"
                        type="radio"
                        :name="`choices_${droit.id}_${choice.value}`"
                        :value="choice.value"
                      />
                      <label :for="`choices_${droit.id}_${choice.value}`">
                        {{ choice.label }}
                      </label>
                    </div>
                  </fieldset>
                  <div
                    v-show="isNegative(droit.choiceValue)"
                    class="form__group"
                  >
                    <label
                      ><h3
                        :for="`choiceComments_${droit.id}`"
                        class="aj-question"
                      >
                        Pour quelles raisons&nbsp;?
                      </h3></label
                    >
                    <textarea
                      :id="`choiceComments_${droit.id}`"
                      v-model="droit.choiceComments"
                      placeholder="..."
                    />
                  </div>
                </div>
              </div>
            </div>
            <button
              type="submit"
              :class="`button large ${!isComplete ? 'secondary  ' : ''}`"
              :disabled="!isComplete"
              @click.prevent="submit"
            >
              Envoyer
            </button>
          </form>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import axios from "axios"
import moment from "moment"

import Institution from "@/lib/Institution"
import LoadingModal from "@/components/LoadingModal"
import DroitEstime from "../components/DroitEstime"

const choices = [
  { value: "already", label: "Rien, j'en bénéficiais déjà." },
  { value: "failed", label: "Je n'ai pas réussi à faire une demande." },
  { value: "asked", label: "J'ai fait une demande." },
  { value: "nothing", label: "Je n'ai rien fait." },
]

function isNegative(value) {
  return value === "failed" || value === "nothing"
}

export default {
  name: "Suivi",
  components: {
    DroitEstime,
    LoadingModal,
  },
  data: function () {
    return {
      submitted: false,
      droits: null,
      followup: null,
    }
  },
  computed: {
    createdAt: function () {
      return this.followup && moment(this.followup.createdAt).format("ll")
    },
    isComplete: function () {
      let choiceValues = this.droits.map((droit) => droit.choiceValue)
      return (
        choiceValues.filter((choiceValue) => choiceValue).length ===
        this.droits.length
      )
    },
  },
  mounted: function () {
    axios
      .get(`/api/followups/surveys/${this.$route.query.token}`)
      .then((response) => {
        this.followup = response.data
        let benefitsIds = this.followup.benefits.map((benefit) => benefit.id)

        const benefitsNormalized = Institution.benefits.all
          .filter((benefit) => benefitsIds.includes(benefit.id))
          .map((benefit) => {
            let montant = this.followup.benefits.find(
              (followupBenefit) => followupBenefit.id === benefit.id
            ).amount

            return {
              ...benefit,
              montant: montant,
              choices: choices,
              choiceValue: null,
              choiceComments: "",
            }
          })

        this.droits = benefitsNormalized
      })
  },
  methods: {
    isBoolean: (val) => typeof val === "boolean",
    isString: (val) => typeof val === "string",
    isNumber: (val) => typeof val === "number",
    isNegative,
    prefix: function (droit) {
      if (droit.prefix) {
        return `${droit.prefix}${
          droit.prefix[droit.prefix.length - 1] == "’" ? "" : " "
        }`
      }
      return ""
    },
    submit: function () {
      let answers = this.droits.map((droit) => ({
        id: droit.id,
        value: droit.choiceValue,
        comments: droit.choiceComments,
      }))

      let that = this
      axios
        .post(
          `/api/followups/surveys/${this.$route.query.token}/answers`,
          answers
{'fraction_non_alphanumeric': 0.133486414083429, 'fraction_numerical': 0.0018369690011481056, 'mean_word_length': 1.3109303148213654, 'pattern_counts': {'":': 0, '<': 125, '<?xml version=': 0, '>': 147, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '71238', 'n_tokens_mistral': 3746, 'n_tokens_neox': 3566, 'n_words': 700}