Add translations for current user in pick entity component

This commit is contained in:
Julie Lenaerts 2025-03-11 09:18:29 +01:00
parent b2b1865837
commit b130dbdcdc
2 changed files with 63 additions and 134 deletions

View File

@ -2,19 +2,19 @@
<ul :class="listClasses" v-if="picked.length && displayPicked"> <ul :class="listClasses" v-if="picked.length && displayPicked">
<li v-for="p in picked" @click="removeEntity(p)" :key="p.type + p.id"> <li v-for="p in picked" @click="removeEntity(p)" :key="p.type + p.id">
<!-- todo: use translations--> <!-- todo: use translations-->
<span v-if="'me' === p" class="chill_denomination">utilisateur courant</span> <span v-if="'me' === p" class="chill_denomination">{{ trans(USER_CURRENT_USER) }}</span>
<span v-else class="chill_denomination">{{ p.text }}</span> <span v-else class="chill_denomination">{{ p.text }}</span>
</li> </li>
</ul> </ul>
<ul class="record_actions"> <ul class="record_actions">
<li> <li class="btn btn-sm btn-misc">
<label class="flex items-center gap-2"> <label class="flex items-center gap-2">
<input <input
ref="itsMeCheckbox" ref="itsMeCheckbox"
:type="multiple ? 'checkbox' : 'radio'" :type="multiple ? 'checkbox' : 'radio'"
@change="selectItsMe" @change="selectItsMe"
/> />
Utilisateur courant {{ currentUser }} {{ trans(USER_CURRENT_USER) }}
</label> </label>
</li> </li>
<li class="add-persons"> <li class="add-persons">
@ -36,137 +36,69 @@
</ul> </ul>
</template> </template>
<script> <script setup>
import { ref, computed } from 'vue';
import AddPersons from "ChillPersonAssets/vuejs/_components/AddPersons.vue"; import AddPersons from "ChillPersonAssets/vuejs/_components/AddPersons.vue";
import { appMessages } from "./i18n"; import { appMessages } from "./i18n";
import { trans } from "translator"; import { trans, USER_CURRENT_USER } from "translator";
export default { const props = defineProps({
name: "PickEntity", multiple: Boolean,
props: { types: Array,
multiple: { picked: Array,
type: Boolean, uniqid: String,
required: true, removableIfSet: { type: Boolean, default: true },
}, displayPicked: { type: Boolean, default: true },
types: { suggested: { type: Array, default: () => [] },
type: Array, label: String,
required: true, isCurrentUserPicker: { type: Boolean, default: false }
},
picked: {
required: true,
},
uniqid: {
type: String,
required: true,
},
removableIfSet: {
type: Boolean,
default: true,
},
displayPicked: {
// display picked entities.
type: Boolean,
default: true,
},
suggested: {
type: Array,
default: [],
},
label: {
type: String,
required: false,
},
isCurrentUserPicker: {
type: Boolean,
default: false
}
},
emits: ["addNewEntity", "removeEntity", "addNewEntityProcessEnded"],
components: {
AddPersons,
},
data() {
return {
key: "",
};
},
computed: {
addPersonsOptions() {
return {
uniq: !this.multiple,
type: this.types,
priority: null,
button: {
size: "btn-sm",
class: "btn-submit",
},
};
},
translatedListOfTypes() {
if (this.label !== "") {
return this.label;
}
let trans = [];
this.types.forEach((t) => {
if (this.$props.multiple) {
trans.push(appMessages.fr.pick_entity[t].toLowerCase());
} else {
trans.push(
appMessages.fr.pick_entity[t + "_one"].toLowerCase(),
);
}
}); });
if (this.$props.multiple) { const emit = defineEmits(["addNewEntity", "removeEntity", "addNewEntityProcessEnded"]);
return (
appMessages.fr.pick_entity.modal_title + trans.join(", ") const itsMeCheckbox = ref(null);
const addPersons = ref(null);
const addPersonsOptions = computed(() => ({
uniq: !props.multiple,
type: props.types,
priority: null,
button: { size: "btn-sm", class: "btn-submit" },
}));
const translatedListOfTypes = computed(() => {
if (props.label) return props.label;
let trans = props.types.map(t =>
props.multiple ? appMessages.fr.pick_entity[t].toLowerCase() : appMessages.fr.pick_entity[t + "_one"].toLowerCase()
); );
} else { return props.multiple ? appMessages.fr.pick_entity.modal_title + trans.join(", ") : appMessages.fr.pick_entity.modal_title_one + trans.join(", ");
return ( });
appMessages.fr.pick_entity.modal_title_one +
trans.join(", ") const listClasses = computed(() => ({
);
}
},
listClasses() {
console.log(this.isCurrentUserPicker)
return {
"list-suggest": true, "list-suggest": true,
"remove-items": this.$props.removableIfSet, "remove-items": props.removableIfSet,
}));
const selectItsMe = (event) => {
event.target.checked ? addNewSuggested('me') : removeEntity('me');
}; };
},
}, const addNewSuggested = (entity) => {
methods: { emit("addNewEntity", { entity });
selectItsMe(event) { };
if (event.target.checked) {
this.addNewSuggested('me') const addNewEntity = ({ selected, modal }) => {
} else { selected.forEach(item => emit("addNewEntity", { entity: item.result }));
this.removeEntity('me') addPersons.value?.resetSearch();
}
},
addNewSuggested(entity) {
this.$emit("addNewEntity", { entity: entity });
},
addNewEntity({ selected, modal }) {
selected.forEach((item) => {
this.$emit("addNewEntity", { entity: item.result });
}, this);
this.$refs.addPersons.resetSearch(); // to cast child method
modal.showModal = false; modal.showModal = false;
this.$emit("addNewEntityProcessEnded"); emit("addNewEntityProcessEnded");
}, };
removeEntity(entity) {
if (!this.$props.removableIfSet) { const removeEntity = (entity) => {
return; if (!props.removableIfSet) return;
if (entity === 'me' && itsMeCheckbox.value) {
itsMeCheckbox.value.checked = false;
} }
if ('me' === entity) { emit("removeEntity", { entity });
if (this.$refs.itsMeCheckbox) {
this.$refs.itsMeCheckbox.checked = false;
}
}
this.$emit("removeEntity", { entity: entity });
},
},
}; };
</script> </script>

View File

@ -68,11 +68,8 @@ class ReferrerFilter implements FilterInterface
{ {
$builder $builder
->add('accepted_referrers', PickUserOrMeDynamicType::class, [ ->add('accepted_referrers', PickUserOrMeDynamicType::class, [
'multiple' => false,
])
/* ->add('accepted_referrers', PickUserDynamicType::class, [
'multiple' => true, 'multiple' => true,
])*/ ])
->add('date_calc', PickRollingDateType::class, [ ->add('date_calc', PickRollingDateType::class, [
'label' => 'export.filter.course.by_referrer.Computation date for referrer', 'label' => 'export.filter.course.by_referrer.Computation date for referrer',
'required' => true, 'required' => true,