mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Automatic eslint fixes
This commit is contained in:
parent
b035020c6f
commit
25be5c9ea3
@ -1 +1 @@
|
||||
import './banner.scss';
|
||||
import "./banner.scss";
|
||||
|
@ -2,104 +2,108 @@ import {
|
||||
DateTime,
|
||||
TranslatableString,
|
||||
User,
|
||||
UserGroupOrUser
|
||||
UserGroupOrUser,
|
||||
} from "../../../../ChillMainBundle/Resources/public/types";
|
||||
import { Person } from "../../../../ChillPersonBundle/Resources/public/types";
|
||||
|
||||
export interface Motive {
|
||||
type: "ticket_motive"
|
||||
id: number,
|
||||
active: boolean,
|
||||
label: TranslatableString
|
||||
type: "ticket_motive";
|
||||
id: number;
|
||||
active: boolean;
|
||||
label: TranslatableString;
|
||||
}
|
||||
|
||||
interface TicketHistory<T extends string, D extends object> {
|
||||
event_type: T,
|
||||
at: DateTime,
|
||||
by: User,
|
||||
data: D
|
||||
event_type: T;
|
||||
at: DateTime;
|
||||
by: User;
|
||||
data: D;
|
||||
}
|
||||
|
||||
export interface PersonHistory {
|
||||
type: "ticket_person_history",
|
||||
id: number,
|
||||
startDate: DateTime,
|
||||
endDate: null|DateTime,
|
||||
person: Person,
|
||||
removedBy: null,
|
||||
createdBy: User|null,
|
||||
createdAt: DateTime|null
|
||||
type: "ticket_person_history";
|
||||
id: number;
|
||||
startDate: DateTime;
|
||||
endDate: null | DateTime;
|
||||
person: Person;
|
||||
removedBy: null;
|
||||
createdBy: User | null;
|
||||
createdAt: DateTime | null;
|
||||
}
|
||||
|
||||
export interface MotiveHistory {
|
||||
type: "ticket_motive_history",
|
||||
id: number,
|
||||
startDate: null,
|
||||
endDate: null|DateTime,
|
||||
motive: Motive,
|
||||
createdBy: User|null,
|
||||
createdAt: DateTime|null,
|
||||
type: "ticket_motive_history";
|
||||
id: number;
|
||||
startDate: null;
|
||||
endDate: null | DateTime;
|
||||
motive: Motive;
|
||||
createdBy: User | null;
|
||||
createdAt: DateTime | null;
|
||||
}
|
||||
|
||||
export interface Comment {
|
||||
type: "ticket_comment",
|
||||
id: number,
|
||||
content: string,
|
||||
createdBy: User|null,
|
||||
createdAt: DateTime|null,
|
||||
updatedBy: User|null,
|
||||
updatedAt: DateTime|null,
|
||||
type: "ticket_comment";
|
||||
id: number;
|
||||
content: string;
|
||||
createdBy: User | null;
|
||||
createdAt: DateTime | null;
|
||||
updatedBy: User | null;
|
||||
updatedAt: DateTime | null;
|
||||
}
|
||||
|
||||
export interface AddresseeHistory {
|
||||
type: "ticket_addressee_history",
|
||||
id: number,
|
||||
startDate: DateTime|null,
|
||||
addressee: UserGroupOrUser,
|
||||
endDate: DateTime|null,
|
||||
removedBy: User|null,
|
||||
createdBy: User|null,
|
||||
createdAt: DateTime|null,
|
||||
updatedBy: User|null,
|
||||
updatedAt: DateTime|null,
|
||||
type: "ticket_addressee_history";
|
||||
id: number;
|
||||
startDate: DateTime | null;
|
||||
addressee: UserGroupOrUser;
|
||||
endDate: DateTime | null;
|
||||
removedBy: User | null;
|
||||
createdBy: User | null;
|
||||
createdAt: DateTime | null;
|
||||
updatedBy: User | null;
|
||||
updatedAt: DateTime | null;
|
||||
}
|
||||
|
||||
export interface AddresseeState {
|
||||
addressees: UserGroupOrUser[],
|
||||
addressees: UserGroupOrUser[];
|
||||
}
|
||||
|
||||
export interface PersonsState {
|
||||
persons: Person[]
|
||||
persons: Person[];
|
||||
}
|
||||
|
||||
export interface CreateTicketState {}
|
||||
|
||||
//interface AddPersonEvent extends TicketHistory<"add_person", PersonHistory> {};
|
||||
export interface AddCommentEvent extends TicketHistory<"add_comment", Comment> {};
|
||||
export interface SetMotiveEvent extends TicketHistory<"set_motive", MotiveHistory> {};
|
||||
export interface AddCommentEvent
|
||||
extends TicketHistory<"add_comment", Comment> {}
|
||||
export interface SetMotiveEvent
|
||||
extends TicketHistory<"set_motive", MotiveHistory> {}
|
||||
//interface AddAddressee extends TicketHistory<"add_addressee", AddresseeHistory> {};
|
||||
//interface RemoveAddressee extends TicketHistory<"remove_addressee", AddresseeHistory> {};
|
||||
export interface AddresseesStateEvent extends TicketHistory<"addressees_state", AddresseeState> {};
|
||||
export interface CreateTicketEvent extends TicketHistory<"create_ticket", CreateTicketState> {};
|
||||
export interface PersonStateEvent extends TicketHistory<"persons_state", PersonsState> {};
|
||||
export interface AddresseesStateEvent
|
||||
extends TicketHistory<"addressees_state", AddresseeState> {}
|
||||
export interface CreateTicketEvent
|
||||
extends TicketHistory<"create_ticket", CreateTicketState> {}
|
||||
export interface PersonStateEvent
|
||||
extends TicketHistory<"persons_state", PersonsState> {}
|
||||
|
||||
export type TicketHistoryLine =
|
||||
/* AddPersonEvent */
|
||||
CreateTicketEvent |
|
||||
AddCommentEvent |
|
||||
SetMotiveEvent | /*AddAddressee | RemoveAddressee | */
|
||||
AddresseesStateEvent |
|
||||
PersonStateEvent;
|
||||
| CreateTicketEvent
|
||||
| AddCommentEvent
|
||||
| SetMotiveEvent /*AddAddressee | RemoveAddressee | */
|
||||
| AddresseesStateEvent
|
||||
| PersonStateEvent;
|
||||
|
||||
export interface Ticket {
|
||||
type: "ticket_ticket",
|
||||
id: number,
|
||||
externalRef: string,
|
||||
currentAddressees: UserGroupOrUser[],
|
||||
currentPersons: Person[],
|
||||
currentMotive: null|Motive,
|
||||
history: TicketHistoryLine[],
|
||||
createdAt: DateTime|null,
|
||||
updatedBy: User|null,
|
||||
type: "ticket_ticket";
|
||||
id: number;
|
||||
externalRef: string;
|
||||
currentAddressees: UserGroupOrUser[];
|
||||
currentPersons: Person[];
|
||||
currentMotive: null | Motive;
|
||||
history: TicketHistoryLine[];
|
||||
createdAt: DateTime | null;
|
||||
updatedBy: User | null;
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ export default defineComponent({
|
||||
const ticket = computed(() => store.getters.getTicket as Ticket);
|
||||
|
||||
const ticketHistory = computed(
|
||||
() => store.getters.getDistinctAddressesHistory
|
||||
() => store.getters.getDistinctAddressesHistory,
|
||||
);
|
||||
|
||||
onMounted(async () => {
|
||||
|
@ -8,7 +8,10 @@
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<form v-if="activeTab !== 'set_persons'" @submit.prevent="submitAction">
|
||||
<form
|
||||
v-if="activeTab !== 'set_persons'"
|
||||
@submit.prevent="submitAction"
|
||||
>
|
||||
<add-comment-component
|
||||
v-model="content"
|
||||
v-if="activeTab === 'add_comment'"
|
||||
@ -44,7 +47,9 @@
|
||||
</ul>
|
||||
</form>
|
||||
<template v-else>
|
||||
<persons-selector-component @closeRequested="closeAllActions()" />
|
||||
<persons-selector-component
|
||||
@closeRequested="closeAllActions()"
|
||||
/>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
@ -54,7 +59,9 @@
|
||||
<a :href="returnPath" class="btn btn-cancel">Annuler</a>
|
||||
</li>
|
||||
<li v-else class="nav-item p-2 go-back">
|
||||
<a href="/fr/ticket/ticket/list" class="btn btn-cancel">Annuler</a>
|
||||
<a href="/fr/ticket/ticket/list" class="btn btn-cancel"
|
||||
>Annuler</a
|
||||
>
|
||||
</li>
|
||||
<li class="nav-item p-2">
|
||||
<button
|
||||
@ -176,40 +183,47 @@ export default defineComponent({
|
||||
const { t } = useI18n();
|
||||
const toast = inject("toast") as any;
|
||||
const activeTab = ref(
|
||||
"" as "" | "add_comment" | "set_motive" | "add_addressee" | "set_persons"
|
||||
"" as
|
||||
| ""
|
||||
| "add_comment"
|
||||
| "set_motive"
|
||||
| "add_addressee"
|
||||
| "set_persons",
|
||||
);
|
||||
|
||||
const ticket = computed(() => store.getters.getTicket as Ticket);
|
||||
const motives = computed(() => store.getters.getMotives as Motive[]);
|
||||
const userGroups = computed(
|
||||
() => store.getters.getUserGroups as UserGroup[]
|
||||
() => store.getters.getUserGroups as UserGroup[],
|
||||
);
|
||||
const users = computed(() => store.getters.getUsers as User[]);
|
||||
|
||||
const hasReturnPath = computed((): boolean => {
|
||||
const hasReturnPath = computed((): boolean => {
|
||||
const params = new URL(document.location.toString()).searchParams;
|
||||
return params.has('returnPath');
|
||||
return params.has("returnPath");
|
||||
});
|
||||
|
||||
const returnPath = computed((): string => {
|
||||
const params = new URL(document.location.toString()).searchParams;
|
||||
const returnPath = params.get('returnPath');
|
||||
const returnPath = params.get("returnPath");
|
||||
|
||||
if (null === returnPath) {
|
||||
throw new Error("there isn't any returnPath, please check the existence before");
|
||||
throw new Error(
|
||||
"there isn't any returnPath, please check the existence before",
|
||||
);
|
||||
}
|
||||
|
||||
return returnPath;
|
||||
})
|
||||
});
|
||||
|
||||
const motive = ref(
|
||||
ticket.value.currentMotive
|
||||
? ticket.value.currentMotive
|
||||
: ({} as Motive)
|
||||
: ({} as Motive),
|
||||
);
|
||||
const content = ref("" as Comment["content"]);
|
||||
const addressees = ref(
|
||||
ticket.value.currentAddressees as Array<UserGroupOrUser>
|
||||
ticket.value.currentAddressees as UserGroupOrUser[],
|
||||
);
|
||||
|
||||
async function submitAction() {
|
||||
@ -262,9 +276,9 @@ export default defineComponent({
|
||||
alert("Sera disponible plus tard");
|
||||
}
|
||||
|
||||
const closeAllActions = function() {
|
||||
const closeAllActions = function () {
|
||||
activeTab.value = "";
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
actionIcons: ref(store.getters.getActionIcons),
|
||||
@ -287,7 +301,6 @@ export default defineComponent({
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
.go-back {
|
||||
margin-right: auto;
|
||||
}
|
||||
|
@ -1,29 +1,33 @@
|
||||
<template>
|
||||
<div class="col-12">
|
||||
<span
|
||||
v-for="userGroup in userGroupLevels"
|
||||
:key="userGroup.id"
|
||||
class="badge-user-group"
|
||||
:style="`background-color: ${userGroup.backgroundColor}; color: ${userGroup.foregroundColor};`"
|
||||
>
|
||||
{{ userGroup.label.fr }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<span
|
||||
v-for="userGroup in userGroups"
|
||||
:key="userGroup.id"
|
||||
class="badge-user-group"
|
||||
:style="`background-color: ${userGroup.backgroundColor}; color: ${userGroup.foregroundColor};`"
|
||||
>
|
||||
{{ userGroup.label.fr }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="users.length > 0" class="col-12">
|
||||
<span class="badge-user">
|
||||
<user-render-box-badge v-for="user in users" :key="user.id" :user="user"></user-render-box-badge>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<span
|
||||
v-for="userGroup in userGroupLevels"
|
||||
:key="userGroup.id"
|
||||
class="badge-user-group"
|
||||
:style="`background-color: ${userGroup.backgroundColor}; color: ${userGroup.foregroundColor};`"
|
||||
>
|
||||
{{ userGroup.label.fr }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<span
|
||||
v-for="userGroup in userGroups"
|
||||
:key="userGroup.id"
|
||||
class="badge-user-group"
|
||||
:style="`background-color: ${userGroup.backgroundColor}; color: ${userGroup.foregroundColor};`"
|
||||
>
|
||||
{{ userGroup.label.fr }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="users.length > 0" class="col-12">
|
||||
<span class="badge-user">
|
||||
<user-render-box-badge
|
||||
v-for="user in users"
|
||||
:key="user.id"
|
||||
:user="user"
|
||||
></user-render-box-badge>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
@ -39,7 +43,7 @@ import UserRenderBoxBadge from "ChillMainAssets/vuejs/_components/Entity/UserRen
|
||||
|
||||
export default defineComponent({
|
||||
name: "AddresseeComponent",
|
||||
components: {UserRenderBoxBadge},
|
||||
components: { UserRenderBoxBadge },
|
||||
props: {
|
||||
addressees: {
|
||||
type: Array as PropType<UserGroupOrUser[]>,
|
||||
@ -52,22 +56,22 @@ export default defineComponent({
|
||||
props.addressees.filter(
|
||||
(addressee) =>
|
||||
addressee.type == "user_group" &&
|
||||
addressee.excludeKey == ""
|
||||
) as UserGroup[]
|
||||
addressee.excludeKey == "",
|
||||
) as UserGroup[],
|
||||
);
|
||||
const userGroupLevels = computed(
|
||||
() =>
|
||||
props.addressees.filter(
|
||||
(addressee) =>
|
||||
addressee.type == "user_group" &&
|
||||
addressee.excludeKey == "level"
|
||||
) as UserGroup[]
|
||||
addressee.excludeKey == "level",
|
||||
) as UserGroup[],
|
||||
);
|
||||
const users = computed(
|
||||
() =>
|
||||
props.addressees.filter(
|
||||
(addressee) => addressee.type == "user"
|
||||
) as User[]
|
||||
(addressee) => addressee.type == "user",
|
||||
) as User[],
|
||||
);
|
||||
return { userGroups, users, userGroupLevels };
|
||||
},
|
||||
|
@ -4,7 +4,7 @@
|
||||
<div class="mb-5 level-line">
|
||||
<span
|
||||
v-for="userGroupItem in userGroups.filter(
|
||||
(userGroup) => userGroup.excludeKey == 'level'
|
||||
(userGroup) => userGroup.excludeKey == 'level',
|
||||
)"
|
||||
:key="userGroupItem.id"
|
||||
class="m-2 as-user-group"
|
||||
@ -19,7 +19,7 @@
|
||||
v-model="userGroupLevel"
|
||||
@click="
|
||||
Object.values(userGroupLevel).includes(
|
||||
userGroupItem.id
|
||||
userGroupItem.id,
|
||||
)
|
||||
? (userGroupLevel = {})
|
||||
: (userGroupLevel = userGroupItem)
|
||||
@ -37,7 +37,7 @@
|
||||
<div class="mb-2 level-line">
|
||||
<span
|
||||
v-for="userGroupItem in userGroups.filter(
|
||||
(userGroup) => userGroup.excludeKey == ''
|
||||
(userGroup) => userGroup.excludeKey == '',
|
||||
)"
|
||||
:key="userGroupItem.id"
|
||||
class="m-2"
|
||||
@ -93,10 +93,10 @@ import {
|
||||
User,
|
||||
UserGroup,
|
||||
UserGroupOrUser,
|
||||
} from "../../../../../../../ChillMainBundle/Resources/public/types";
|
||||
} from "ChillMainAssets/types";
|
||||
|
||||
// Components
|
||||
import AddPersons from "../../../../../../../ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue";
|
||||
import AddPersons from "ChillPersonAssets/Resources/public/vuejs/_components/AddPersons.vue";
|
||||
|
||||
export default defineComponent({
|
||||
name: "AddresseeSelectorComponent",
|
||||
@ -124,18 +124,19 @@ export default defineComponent({
|
||||
const addressees = ref([...props.modelValue] as UserGroupOrUser[]);
|
||||
const userGroups = [
|
||||
...props.modelValue.filter(
|
||||
(addressee) => addressee.type == "user_group"
|
||||
(addressee) => addressee.type == "user_group",
|
||||
),
|
||||
] as UserGroup[];
|
||||
|
||||
const userGroupLevel = ref(
|
||||
userGroups.filter(
|
||||
(userGroup) => userGroup.excludeKey == "level"
|
||||
)[0] as UserGroup | {}
|
||||
(userGroup) => userGroup.excludeKey == "level",
|
||||
)[0] as UserGroup | {},
|
||||
);
|
||||
const userGroup = ref(
|
||||
userGroups.filter((userGroup) => userGroup.excludeKey == "") as
|
||||
| UserGroup[]
|
||||
userGroups.filter(
|
||||
(userGroup) => userGroup.excludeKey == "",
|
||||
) as UserGroup[],
|
||||
);
|
||||
const users = ref([
|
||||
...props.modelValue.filter((addressee) => addressee.type == "user"),
|
||||
@ -157,7 +158,7 @@ export default defineComponent({
|
||||
const { selected, modal } = datas;
|
||||
users.value = selected.map((selected: any) => selected.result);
|
||||
addressees.value = addressees.value.filter(
|
||||
(addressee) => addressee.type === "user_group"
|
||||
(addressee) => addressee.type === "user_group",
|
||||
);
|
||||
addressees.value = [...addressees.value, ...users.value];
|
||||
ctx.emit("update:modelValue", addressees.value);
|
||||
@ -180,14 +181,14 @@ export default defineComponent({
|
||||
function removeUser(user: User) {
|
||||
users.value.splice(users.value.indexOf(user), 1);
|
||||
addressees.value = addressees.value.filter(
|
||||
(addressee) => addressee.id !== user.id
|
||||
(addressee) => addressee.id !== user.id,
|
||||
);
|
||||
ctx.emit("update:modelValue", addressees.value);
|
||||
}
|
||||
|
||||
watch(userGroupLevel, (userGroupLevelAdd, userGroupLevelRem) => {
|
||||
const index = addressees.value.indexOf(
|
||||
userGroupLevelRem as UserGroup
|
||||
userGroupLevelRem as UserGroup,
|
||||
);
|
||||
if (index !== -1) {
|
||||
addressees.value.splice(index, 1);
|
||||
@ -200,10 +201,10 @@ export default defineComponent({
|
||||
const userGroupLevel = addressees.value.filter(
|
||||
(addressee) =>
|
||||
addressee.type == "user_group" &&
|
||||
addressee.excludeKey == "level"
|
||||
addressee.excludeKey == "level",
|
||||
) as UserGroup[];
|
||||
const users = addressees.value.filter(
|
||||
(addressee) => addressee.type == "user"
|
||||
(addressee) => addressee.type == "user",
|
||||
) as UserGroup[];
|
||||
addressees.value = [...users, ...userGroupLevel, ...userGroupAdd];
|
||||
ctx.emit("update:modelValue", addressees.value);
|
||||
|
@ -14,7 +14,10 @@
|
||||
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="d-flex justify-content-end">
|
||||
<span class="badge text-bg-chill-green text-white" style="font-size: 1rem;">
|
||||
<span
|
||||
class="badge text-bg-chill-green text-white"
|
||||
style="font-size: 1rem"
|
||||
>
|
||||
{{ $t("banner.open") }}
|
||||
</span>
|
||||
</div>
|
||||
@ -38,7 +41,15 @@
|
||||
<h3 class="text-primary">
|
||||
{{ $t("banner.concerned_patient") }}
|
||||
</h3>
|
||||
<on-the-fly v-for="person in ticket.currentPersons" :key="person.id" :type="person.type" :id="person.id" :buttonText="person.textAge" :displayBadge="'true' === 'true'" action="show"></on-the-fly>
|
||||
<on-the-fly
|
||||
v-for="person in ticket.currentPersons"
|
||||
:key="person.id"
|
||||
:type="person.type"
|
||||
:id="person.id"
|
||||
:buttonText="person.textAge"
|
||||
:displayBadge="'true' === 'true'"
|
||||
action="show"
|
||||
></on-the-fly>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<h3 class="text-primary">{{ $t("banner.speaker") }}</h3>
|
||||
@ -68,7 +79,7 @@ import AddresseeComponent from "./AddresseeComponent.vue";
|
||||
|
||||
// Types
|
||||
import { Ticket } from "../../../types";
|
||||
import {ISOToDatetime} from "../../../../../../../ChillMainBundle/Resources/public/chill/js/date";
|
||||
import { ISOToDatetime } from "../../../../../../../ChillMainBundle/Resources/public/chill/js/date";
|
||||
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly.vue";
|
||||
|
||||
export default defineComponent({
|
||||
@ -106,15 +117,15 @@ export default defineComponent({
|
||||
const timeDiff = Math.abs(today.value.getTime() - date.getTime());
|
||||
const daysDiff = Math.floor(timeDiff / (1000 * 3600 * 24));
|
||||
const hoursDiff = Math.floor(
|
||||
(timeDiff % (1000 * 3600 * 24)) / (1000 * 3600)
|
||||
(timeDiff % (1000 * 3600 * 24)) / (1000 * 3600),
|
||||
);
|
||||
const minutesDiff = Math.floor(
|
||||
(timeDiff % (1000 * 3600)) / (1000 * 60)
|
||||
(timeDiff % (1000 * 3600)) / (1000 * 60),
|
||||
);
|
||||
const secondsDiff = Math.floor((timeDiff % (1000 * 60)) / 1000);
|
||||
|
||||
if (daysDiff < 1 && hoursDiff < 1 && minutesDiff < 1) {
|
||||
return `${t("banner.seconds", {count: secondsDiff})}`;
|
||||
return `${t("banner.seconds", { count: secondsDiff })}`;
|
||||
} else if (daysDiff < 1 && hoursDiff < 1) {
|
||||
return `${t("banner.minutes", { count: minutesDiff })}`;
|
||||
} else if (daysDiff < 1) {
|
||||
@ -125,7 +136,7 @@ export default defineComponent({
|
||||
"banner.hours",
|
||||
{
|
||||
count: hoursDiff,
|
||||
}
|
||||
},
|
||||
)} ${t("banner.minutes", {
|
||||
count: minutesDiff,
|
||||
})}`;
|
||||
|
@ -1,16 +1,13 @@
|
||||
<script setup lang="ts">
|
||||
|
||||
import {useStore} from "vuex";
|
||||
import { useStore } from "vuex";
|
||||
import AddPersons from "ChillPersonAssets/vuejs/_components/AddPersons.vue";
|
||||
import {computed, inject, reactive} from "vue";
|
||||
import {Ticket} from "../../../types";
|
||||
import {Person} from "../../../../../../../ChillPersonBundle/Resources/public/types"
|
||||
import { computed, inject, reactive } from "vue";
|
||||
import { Ticket } from "../../../types";
|
||||
import { Person } from "../../../../../../../ChillPersonBundle/Resources/public/types";
|
||||
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly.vue";
|
||||
import {ToastPluginApi} from "vue-toast-notification";
|
||||
import { ToastPluginApi } from "vue-toast-notification";
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'closeRequested'): void
|
||||
}>()
|
||||
const emit = defineEmits<(e: "closeRequested") => void>();
|
||||
|
||||
const store = useStore();
|
||||
const toast = inject("toast") as ToastPluginApi;
|
||||
@ -19,44 +16,55 @@ const persons = computed(() => ticket.value.currentPersons);
|
||||
|
||||
const addPersonsOptions = {
|
||||
uniq: false,
|
||||
type: ['person'],
|
||||
type: ["person"],
|
||||
priority: null,
|
||||
button: {
|
||||
class: 'btn-submit',
|
||||
class: "btn-submit",
|
||||
},
|
||||
};
|
||||
|
||||
const added: Person[] = reactive([]);
|
||||
const removed: Person[] = reactive([]);
|
||||
|
||||
const computeCurrentPersons = (initial: Person[], added: Person[], removed: Person[]): Person[] => {
|
||||
const computeCurrentPersons = (
|
||||
initial: Person[],
|
||||
added: Person[],
|
||||
removed: Person[],
|
||||
): Person[] => {
|
||||
for (let p of added) {
|
||||
if (initial.findIndex((element) => element.id === p.id) === -1) {
|
||||
initial.push(p);
|
||||
}
|
||||
}
|
||||
|
||||
return initial.filter((p) => removed.findIndex((element) => element.id === p.id) === -1);
|
||||
}
|
||||
return initial.filter(
|
||||
(p) => removed.findIndex((element) => element.id === p.id) === -1,
|
||||
);
|
||||
};
|
||||
|
||||
const currentPersons = computed((): Person[] => {
|
||||
return computeCurrentPersons(persons.value, added, removed);
|
||||
})
|
||||
});
|
||||
|
||||
const removePerson = (p: Person) => {
|
||||
removed.push(p);
|
||||
}
|
||||
};
|
||||
|
||||
const addNewEntity = (n: {modal: {showModal: boolean}, selected: Array<{result: Person}>}) => {
|
||||
const addNewEntity = (n: {
|
||||
modal: { showModal: boolean };
|
||||
selected: { result: Person }[];
|
||||
}) => {
|
||||
n.modal.showModal = false;
|
||||
for (let p of n.selected) {
|
||||
added.push(p.result);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const save = async function(): Promise<void> {
|
||||
const save = async function (): Promise<void> {
|
||||
try {
|
||||
await store.dispatch("setPersons", { persons: computeCurrentPersons(persons.value, added, removed) });
|
||||
await store.dispatch("setPersons", {
|
||||
persons: computeCurrentPersons(persons.value, added, removed),
|
||||
});
|
||||
toast.success("Patients concernés sauvegardés");
|
||||
} catch (e: any) {
|
||||
console.error("error while saving", e);
|
||||
@ -64,16 +72,25 @@ const save = async function(): Promise<void> {
|
||||
return Promise.resolve();
|
||||
}
|
||||
emit("closeRequested");
|
||||
}
|
||||
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<ul v-if="currentPersons.length > 0" class="person-list">
|
||||
<li v-for="person in currentPersons" :key="person.id">
|
||||
<on-the-fly :type="person.type" :id="person.id" :buttonText="person.textAge" :displayBadge="'true' === 'true'" action="show"></on-the-fly>
|
||||
<button type="button" class="btn btn-delete remove-person" @click="removePerson(person)"></button>
|
||||
<on-the-fly
|
||||
:type="person.type"
|
||||
:id="person.id"
|
||||
:buttonText="person.textAge"
|
||||
:displayBadge="'true' === 'true'"
|
||||
action="show"
|
||||
></on-the-fly>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-delete remove-person"
|
||||
@click="removePerson(person)"
|
||||
></button>
|
||||
</li>
|
||||
</ul>
|
||||
<p v-else class="chill-no-data-statement">Aucun patient</p>
|
||||
|
@ -1,18 +1,15 @@
|
||||
<script setup lang="ts">
|
||||
import {User} from "../../../../../../../ChillMainBundle/Resources/public/types";
|
||||
import { User } from "../../../../../../../ChillMainBundle/Resources/public/types";
|
||||
|
||||
interface TicketHistoryCreateComponentConfig {
|
||||
by: User
|
||||
by: User;
|
||||
}
|
||||
|
||||
const props = defineProps<TicketHistoryCreateComponentConfig>();
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<p>Ticket créé par {{ props.by.text }}</p>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
||||
<style scoped lang="scss"></style>
|
||||
|
@ -7,7 +7,9 @@
|
||||
<div class="card-header">
|
||||
<div class="history-header">
|
||||
<div class="description">
|
||||
<i :class="`${actionIcons[history_line.event_type]} me-1`"></i>
|
||||
<i
|
||||
:class="`${actionIcons[history_line.event_type]} me-1`"
|
||||
></i>
|
||||
<span>{{ explainSentence(history_line) }}</span>
|
||||
</div>
|
||||
<div>
|
||||
@ -17,7 +19,9 @@
|
||||
</div>
|
||||
<div>
|
||||
<span class="badge-user">
|
||||
<user-render-box-badge :user="history_line.by"></user-render-box-badge>
|
||||
<user-render-box-badge
|
||||
:user="history_line.by"
|
||||
></user-render-box-badge>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@ -42,18 +46,18 @@
|
||||
<ticket-history-create-component
|
||||
:by="history_line.by"
|
||||
v-else-if="history_line.event_type == 'create_ticket'"
|
||||
/>
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import {PropType, defineComponent, ref, computed} from "vue";
|
||||
import { PropType, defineComponent, ref, computed } from "vue";
|
||||
import { useStore } from "vuex";
|
||||
|
||||
// Types
|
||||
import { DateTime } from "../../../../../../../ChillMainBundle/Resources/public/types";
|
||||
import {TicketHistoryLine} from "../../../types";
|
||||
import { TicketHistoryLine } from "../../../types";
|
||||
|
||||
// Components
|
||||
import TicketHistoryPersonComponent from "./TicketHistoryPersonComponent.vue";
|
||||
@ -62,7 +66,7 @@ import TicketHistoryCommentComponent from "./TicketHistoryCommentComponent.vue";
|
||||
import TicketHistoryAddresseeComponent from "./TicketHistoryAddresseeComponent.vue";
|
||||
import TicketHistoryCreateComponent from "./TicketHistoryCreateComponent.vue";
|
||||
import UserRenderBoxBadge from "ChillMainAssets/vuejs/_components/Entity/UserRenderBoxBadge.vue";
|
||||
import {ISOToDatetime} from "../../../../../../../ChillMainBundle/Resources/public/chill/js/date";
|
||||
import { ISOToDatetime } from "../../../../../../../ChillMainBundle/Resources/public/chill/js/date";
|
||||
|
||||
export default defineComponent({
|
||||
name: "TicketHistoryListComponent",
|
||||
@ -96,8 +100,8 @@ export default defineComponent({
|
||||
return "Nouveau motifs";
|
||||
case "create_ticket":
|
||||
return "Ticket créé";
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
function formatDate(d: DateTime): string {
|
||||
const date = ISOToDatetime(d.datetime);
|
||||
@ -110,7 +114,11 @@ export default defineComponent({
|
||||
return `${date.getDate()} ${month} ${date.getFullYear()}, ${date.toLocaleTimeString()}`;
|
||||
}
|
||||
|
||||
return { actionIcons: ref(store.getters.getActionIcons), formatDate, explainSentence };
|
||||
return {
|
||||
actionIcons: ref(store.getters.getActionIcons),
|
||||
formatDate,
|
||||
explainSentence,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
@ -2,7 +2,13 @@
|
||||
<div class="col-12">
|
||||
<ul class="persons-list">
|
||||
<li v-for="person in personHistory.persons" :key="person.id">
|
||||
<on-the-fly :type="person.type" :id="person.id" :buttonText="person.textAge" :displayBadge="'true' === 'true'" action="show"></on-the-fly>
|
||||
<on-the-fly
|
||||
:type="person.type"
|
||||
:id="person.id"
|
||||
:buttonText="person.textAge"
|
||||
:displayBadge="'true' === 'true'"
|
||||
action="show"
|
||||
></on-the-fly>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@ -12,7 +18,7 @@
|
||||
import { PropType, defineComponent } from "vue";
|
||||
|
||||
// Type
|
||||
import {PersonsState} from "../../../types";
|
||||
import { PersonsState } from "../../../types";
|
||||
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly.vue";
|
||||
|
||||
export default defineComponent({
|
||||
|
@ -1,28 +1,32 @@
|
||||
<template>
|
||||
<div class="d-flex justify-content-end">
|
||||
<div class="btn-group" @click="handleClick">
|
||||
<button type="button" class="btn btn-light dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
{{ $t('ticket.previous_tickets') }}
|
||||
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-chill-green">
|
||||
{{ tickets.length }}
|
||||
<span class="visually-hidden">Tickets</span>
|
||||
</span>
|
||||
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-light dropdown-toggle"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-expanded="false"
|
||||
>
|
||||
{{ $t("ticket.previous_tickets") }}
|
||||
<span
|
||||
class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-chill-green"
|
||||
>
|
||||
{{ tickets.length }}
|
||||
<span class="visually-hidden">Tickets</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
|
||||
import { PropType, defineComponent } from 'vue';
|
||||
import { PropType, defineComponent } from "vue";
|
||||
|
||||
// Types
|
||||
import { Ticket } from '../../../types';
|
||||
import { Ticket } from "../../../types";
|
||||
|
||||
export default defineComponent({
|
||||
name: 'TicketSelectorComponent',
|
||||
name: "TicketSelectorComponent",
|
||||
props: {
|
||||
tickets: {
|
||||
type: Object as PropType<Ticket[]>,
|
||||
@ -31,10 +35,10 @@ export default defineComponent({
|
||||
},
|
||||
setup() {
|
||||
function handleClick() {
|
||||
alert('Sera disponible plus tard')
|
||||
alert("Sera disponible plus tard");
|
||||
}
|
||||
return { handleClick }
|
||||
}
|
||||
return { handleClick };
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
|
@ -1,32 +1,31 @@
|
||||
import App from './App.vue';
|
||||
import {createApp} from "vue";
|
||||
import App from "./App.vue";
|
||||
import { createApp } from "vue";
|
||||
|
||||
import { _createI18n } from "../../../../../../ChillMainBundle/Resources/public/vuejs/_js/i18n";
|
||||
|
||||
import VueToast from 'vue-toast-notification';
|
||||
import 'vue-toast-notification/dist/theme-sugar.css';
|
||||
import VueToast from "vue-toast-notification";
|
||||
import "vue-toast-notification/dist/theme-sugar.css";
|
||||
|
||||
import { store } from "./store";
|
||||
import messages from './i18n/messages';
|
||||
import messages from "./i18n/messages";
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
initialTicket: string
|
||||
initialTicket: string;
|
||||
}
|
||||
}
|
||||
|
||||
const i18n = _createI18n(messages, false);
|
||||
|
||||
const _app = createApp({
|
||||
template: '<app></app>',
|
||||
});
|
||||
template: "<app></app>",
|
||||
});
|
||||
|
||||
_app
|
||||
.use(store)
|
||||
_app.use(store)
|
||||
.use(i18n)
|
||||
// Cant use this.$toast in components in composition API so we need to provide it
|
||||
// Fix: with vue-toast-notification@^3
|
||||
.use(VueToast).provide('toast', _app.config.globalProperties.$toast)
|
||||
.component('app', App)
|
||||
.mount('#ticketRoot');
|
||||
|
||||
.use(VueToast)
|
||||
.provide("toast", _app.config.globalProperties.$toast)
|
||||
.component("app", App)
|
||||
.mount("#ticketRoot");
|
||||
|
@ -3,15 +3,15 @@ import { State as MotiveStates, moduleMotive } from "./modules/motive";
|
||||
import { State as TicketStates, moduleTicket } from "./modules/ticket";
|
||||
import { State as CommentStates, moduleComment } from "./modules/comment";
|
||||
import { State as AddresseeStates, moduleAddressee } from "./modules/addressee";
|
||||
import { State as PersonsState, modulePersons} from "./modules/persons";
|
||||
import { State as PersonsState, modulePersons } from "./modules/persons";
|
||||
|
||||
export type RootState = {
|
||||
export interface RootState {
|
||||
motive: MotiveStates;
|
||||
ticket: TicketStates;
|
||||
comment: CommentStates;
|
||||
addressee: AddresseeStates;
|
||||
persons: PersonsState;
|
||||
};
|
||||
}
|
||||
|
||||
export const store = createStore<RootState>({
|
||||
modules: {
|
||||
|
@ -13,14 +13,14 @@ import {
|
||||
} from "../../../../../../../../ChillMainBundle/Resources/public/types";
|
||||
|
||||
export interface State {
|
||||
userGroups: Array<UserGroup>;
|
||||
users: Array<User>;
|
||||
userGroups: UserGroup[];
|
||||
users: User[];
|
||||
}
|
||||
|
||||
export const moduleAddressee: Module<State, RootState> = {
|
||||
state: () => ({
|
||||
userGroups: [] as Array<UserGroup>,
|
||||
users: [] as Array<User>,
|
||||
userGroups: [] as UserGroup[],
|
||||
users: [] as User[],
|
||||
}),
|
||||
getters: {
|
||||
getUserGroups(state) {
|
||||
@ -44,7 +44,7 @@ export const moduleAddressee: Module<State, RootState> = {
|
||||
fetchResults("/api/1.0/main/user-group.json").then(
|
||||
(results) => {
|
||||
commit("setUserGroups", results);
|
||||
}
|
||||
},
|
||||
);
|
||||
} catch (e: any) {
|
||||
throw e.name;
|
||||
@ -62,7 +62,7 @@ export const moduleAddressee: Module<State, RootState> = {
|
||||
|
||||
async setAdressees(
|
||||
{ commit },
|
||||
datas: { ticketId: number; addressees: Array<UserGroupOrUser> }
|
||||
datas: { ticketId: number; addressees: UserGroupOrUser[] },
|
||||
) {
|
||||
const { ticketId, addressees } = datas;
|
||||
try {
|
||||
@ -73,7 +73,7 @@ export const moduleAddressee: Module<State, RootState> = {
|
||||
addressees: addressees.map((addressee) => {
|
||||
return { id: addressee.id, type: addressee.type };
|
||||
}),
|
||||
}
|
||||
},
|
||||
);
|
||||
commit("setTicket", result);
|
||||
} catch (e: any) {
|
||||
|
@ -9,30 +9,29 @@ import { RootState } from "..";
|
||||
import { Comment } from "../../../../types";
|
||||
|
||||
export interface State {
|
||||
comments: Array<Comment>;
|
||||
comments: Comment[];
|
||||
}
|
||||
|
||||
export const moduleComment: Module<State, RootState> = {
|
||||
state: () => ({
|
||||
comments: [] as Array<Comment>,
|
||||
comments: [] as Comment[],
|
||||
}),
|
||||
getters: {},
|
||||
mutations: {},
|
||||
actions: {
|
||||
async createComment(
|
||||
{ commit },
|
||||
datas: { ticketId: number; content: Comment["content"] }
|
||||
datas: { ticketId: number; content: Comment["content"] },
|
||||
) {
|
||||
const { ticketId, content } = datas;
|
||||
try {
|
||||
const result = await makeFetch(
|
||||
"POST",
|
||||
`/api/1.0/ticket/${ticketId}/comment/add`,
|
||||
{ content }
|
||||
{ content },
|
||||
);
|
||||
commit("setTicket", result);
|
||||
}
|
||||
catch(e: any) {
|
||||
} catch (e: any) {
|
||||
throw e.name;
|
||||
}
|
||||
},
|
||||
|
@ -9,12 +9,12 @@ import { RootState } from "..";
|
||||
import { Motive } from "../../../../types";
|
||||
|
||||
export interface State {
|
||||
motives: Array<Motive>;
|
||||
motives: Motive[];
|
||||
}
|
||||
|
||||
export const moduleMotive: Module<State, RootState> = {
|
||||
state: () => ({
|
||||
motives: [] as Array<Motive>,
|
||||
motives: [] as Motive[],
|
||||
}),
|
||||
getters: {
|
||||
getMotives(state) {
|
||||
@ -30,7 +30,7 @@ export const moduleMotive: Module<State, RootState> = {
|
||||
async fetchMotives({ commit }) {
|
||||
try {
|
||||
const results = (await fetchResults(
|
||||
"/api/1.0/ticket/motive.json"
|
||||
"/api/1.0/ticket/motive.json",
|
||||
)) as Motive[];
|
||||
commit("setMotives", results);
|
||||
} catch (e: any) {
|
||||
@ -40,7 +40,7 @@ export const moduleMotive: Module<State, RootState> = {
|
||||
|
||||
async createMotive(
|
||||
{ commit },
|
||||
datas: { ticketId: number; motive: Motive }
|
||||
datas: { ticketId: number; motive: Motive },
|
||||
) {
|
||||
const { ticketId, motive } = datas;
|
||||
try {
|
||||
@ -52,7 +52,7 @@ export const moduleMotive: Module<State, RootState> = {
|
||||
id: motive.id,
|
||||
type: motive.type,
|
||||
},
|
||||
}
|
||||
},
|
||||
);
|
||||
commit("setTicket", result);
|
||||
} catch (e: any) {
|
||||
|
@ -1,20 +1,21 @@
|
||||
import {
|
||||
makeFetch,
|
||||
} from "../../../../../../../../ChillMainBundle/Resources/public/lib/api/apiMethods";
|
||||
import { makeFetch } from "../../../../../../../../ChillMainBundle/Resources/public/lib/api/apiMethods";
|
||||
import { Person } from "../../../../../../../../ChillPersonBundle/Resources/public/types";
|
||||
import { Module } from "vuex";
|
||||
import { RootState } from "..";
|
||||
import {Ticket} from "../../../../types";
|
||||
import { Ticket } from "../../../../types";
|
||||
|
||||
export interface State {};
|
||||
export interface State {}
|
||||
|
||||
export const modulePersons: Module<State, RootState> = {
|
||||
actions: {
|
||||
async setPersons(
|
||||
{ commit, rootState: RootState },
|
||||
payload: { persons: Person[] }
|
||||
{ commit, rootState: RootState },
|
||||
payload: { persons: Person[] },
|
||||
) {
|
||||
const persons = payload.persons.map((person: Person) => ({id: person.id, type: person.type}));
|
||||
const persons = payload.persons.map((person: Person) => ({
|
||||
id: person.id,
|
||||
type: person.type,
|
||||
}));
|
||||
try {
|
||||
const result: Ticket = await makeFetch(
|
||||
"POST",
|
||||
@ -28,5 +29,5 @@ export const modulePersons: Module<State, RootState> = {
|
||||
throw e.name;
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
@ -5,7 +5,7 @@ import { Ticket } from "../../../../types";
|
||||
|
||||
export interface State {
|
||||
ticket: Ticket;
|
||||
action_icons: Object;
|
||||
action_icons: object;
|
||||
}
|
||||
|
||||
export const moduleTicket: Module<State, RootState> = {
|
||||
@ -26,7 +26,7 @@ export const moduleTicket: Module<State, RootState> = {
|
||||
getters: {
|
||||
getTicket(state) {
|
||||
state.ticket.history = state.ticket.history.sort((a, b) =>
|
||||
b.at.datetime.localeCompare(a.at.datetime)
|
||||
b.at.datetime.localeCompare(a.at.datetime),
|
||||
);
|
||||
return state.ticket;
|
||||
},
|
||||
@ -39,9 +39,11 @@ export const moduleTicket: Module<State, RootState> = {
|
||||
(result, item) => {
|
||||
const { datetime } = item.at;
|
||||
if (
|
||||
!["add_addressee", "remove_addressee", "add_person"].includes(
|
||||
item.event_type
|
||||
)
|
||||
![
|
||||
"add_addressee",
|
||||
"remove_addressee",
|
||||
"add_person",
|
||||
].includes(item.event_type)
|
||||
) {
|
||||
result[datetime] = item;
|
||||
return result;
|
||||
@ -57,9 +59,9 @@ export const moduleTicket: Module<State, RootState> = {
|
||||
*/
|
||||
return result;
|
||||
},
|
||||
{} as any
|
||||
{} as any,
|
||||
);
|
||||
return Object.values(addresseeHistory) as Array<Ticket["history"]>;
|
||||
return Object.values(addresseeHistory) as Ticket["history"][];
|
||||
},
|
||||
},
|
||||
mutations: {
|
||||
|
Loading…
x
Reference in New Issue
Block a user