diff --git a/src/components/admin/ForceSearchSelect.vue b/src/components/admin/ForceSearchSelect.vue index da9346a..3ed7c7a 100644 --- a/src/components/admin/ForceSearchSelect.vue +++ b/src/components/admin/ForceSearchSelect.vue @@ -83,7 +83,7 @@ import { TransitionRoot, } from "@headlessui/vue"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; -import { useForceStore } from "@/stores/admin/configuration/forces"; +import { useForceStore } from "@/stores/admin/configuration/force"; import type { ForceViewModel } from "@/viewmodels/admin/configuration/force.models"; import difference from "lodash.difference"; import Spinner from "../Spinner.vue"; diff --git a/src/components/admin/configuration/equipment/CreateEquipmentModal.vue b/src/components/admin/configuration/equipment/CreateEquipmentModal.vue new file mode 100644 index 0000000..a094d93 --- /dev/null +++ b/src/components/admin/configuration/equipment/CreateEquipmentModal.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/components/admin/configuration/equipment/DeleteEquipmentModal.vue b/src/components/admin/configuration/equipment/DeleteEquipmentModal.vue new file mode 100644 index 0000000..f3c35cd --- /dev/null +++ b/src/components/admin/configuration/equipment/DeleteEquipmentModal.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/components/admin/configuration/equipment/EquipmentListItem.vue b/src/components/admin/configuration/equipment/EquipmentListItem.vue new file mode 100644 index 0000000..5596099 --- /dev/null +++ b/src/components/admin/configuration/equipment/EquipmentListItem.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/src/components/admin/configuration/equipment/UpdateEquipmentModal.vue b/src/components/admin/configuration/equipment/UpdateEquipmentModal.vue new file mode 100644 index 0000000..fe017d1 --- /dev/null +++ b/src/components/admin/configuration/equipment/UpdateEquipmentModal.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/src/components/admin/configuration/force/CreateForceModal.vue b/src/components/admin/configuration/force/CreateForceModal.vue index f894e00..58d6c5e 100644 --- a/src/components/admin/configuration/force/CreateForceModal.vue +++ b/src/components/admin/configuration/force/CreateForceModal.vue @@ -56,7 +56,7 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import FailureXMark from "@/components/FailureXMark.vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; -import { useForceStore } from "@/stores/admin/configuration/forces"; +import { useForceStore } from "@/stores/admin/configuration/force"; import type { CreateForceViewModel } from "@/viewmodels/admin/configuration/force.models"; diff --git a/src/components/admin/configuration/force/DeleteForceModal.vue b/src/components/admin/configuration/force/DeleteForceModal.vue index 789cc1d..5b1ffa3 100644 --- a/src/components/admin/configuration/force/DeleteForceModal.vue +++ b/src/components/admin/configuration/force/DeleteForceModal.vue @@ -40,7 +40,7 @@ import { useModalStore } from "@/stores/modal"; import Spinner from "@/components/Spinner.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import FailureXMark from "@/components/FailureXMark.vue"; -import { useForceStore } from "@/stores/admin/configuration/forces"; +import { useForceStore } from "@/stores/admin/configuration/force"; import type { CreateForceViewModel } from "@/viewmodels/admin/configuration/force.models"; @@ -73,7 +73,6 @@ export default defineComponent({ .then(() => { this.status = { status: "success" }; this.timeout = setTimeout(() => { - this.$router.push({ name: "admin-configuration-force" }); this.closeModal(); }, 1500); }) diff --git a/src/components/admin/configuration/force/ForceListItem.vue b/src/components/admin/configuration/force/ForceListItem.vue index 7d4a736..cc2523d 100644 --- a/src/components/admin/configuration/force/ForceListItem.vue +++ b/src/components/admin/configuration/force/ForceListItem.vue @@ -3,6 +3,12 @@

{{ force.lastname }}, {{ force.firstname }} {{ force.nameaffix ? `- ${force.nameaffix}` : "" }}

+
+ +
@@ -24,7 +30,8 @@ import { mapState, mapActions } from "pinia"; import { useAbilityStore } from "@/stores/ability"; import type { ForceViewModel } from "@/viewmodels/admin/configuration/force.models"; import { useModalStore } from "../../../../stores/modal"; -import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; +import { ArrowRightStartOnRectangleIcon, PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; +import { useForceStore } from "../../../../stores/admin/configuration/force"; + + diff --git a/src/components/admin/configuration/vehicle/DeleteVehicleModal.vue b/src/components/admin/configuration/vehicle/DeleteVehicleModal.vue new file mode 100644 index 0000000..d4b9862 --- /dev/null +++ b/src/components/admin/configuration/vehicle/DeleteVehicleModal.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/components/admin/configuration/vehicle/UpdateVehicleModal.vue b/src/components/admin/configuration/vehicle/UpdateVehicleModal.vue new file mode 100644 index 0000000..d481c98 --- /dev/null +++ b/src/components/admin/configuration/vehicle/UpdateVehicleModal.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/src/components/admin/configuration/vehicle/VehicleListItem.vue b/src/components/admin/configuration/vehicle/VehicleListItem.vue new file mode 100644 index 0000000..9d6b0ec --- /dev/null +++ b/src/components/admin/configuration/vehicle/VehicleListItem.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/router/index.ts b/src/router/index.ts index 716b911..0ed803f 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -126,14 +126,14 @@ const router = createRouter({ { path: "equipment", name: "admin-configuration-equipment", - component: () => import("@/views/admin/configuration/force/Force.vue"), + component: () => import("@/views/admin/configuration/equipment/Equipment.vue"), meta: { type: "read", section: "configuration", module: "equipment" }, beforeEnter: [abilityAndNavUpdate], }, { path: "vehicle", name: "admin-configuration-vehicle", - component: () => import("@/views/admin/configuration/force/Force.vue"), + component: () => import("@/views/admin/configuration/vehicle/Vehicle.vue"), meta: { type: "read", section: "configuration", module: "vehicle" }, beforeEnter: [abilityAndNavUpdate], }, diff --git a/src/stores/admin/configuration/equipment.ts b/src/stores/admin/configuration/equipment.ts index 22e6578..05236c7 100644 --- a/src/stores/admin/configuration/equipment.ts +++ b/src/stores/admin/configuration/equipment.ts @@ -64,17 +64,21 @@ export const useEquipmentStore = defineStore("equipment", { }, async createEquipment(equipment: CreateEquipmentViewModel): Promise> { const result = await http.post(`/admin/equipment`, equipment); - this.fetchEquipments(); + this.fetchEquipments(0, 25, "", true); return result; }, - async updateActiveEquipment(equipment: UpdateEquipmentViewModel): Promise> { + async updateEquipment(equipment: UpdateEquipmentViewModel): Promise> { const result = await http.patch(`/admin/equipment/${equipment.id}`, equipment); - this.fetchEquipments(); + this.fetchEquipments(0, 25, "", true); return result; }, + async decommissionEquipment(equipmentId: string) { + await http.patch(`/admin/equipment/${equipmentId}/decommission`).catch(() => {}); + this.fetchEquipments(0, 25, "", true); + }, async deleteEquipment(equipment: number): Promise> { const result = await http.delete(`/admin/equipment/${equipment}`); - this.fetchEquipments(); + this.fetchEquipments(0, 25, "", true); return result; }, }, diff --git a/src/stores/admin/configuration/forces.ts b/src/stores/admin/configuration/force.ts similarity index 90% rename from src/stores/admin/configuration/forces.ts rename to src/stores/admin/configuration/force.ts index 9786985..596ba61 100644 --- a/src/stores/admin/configuration/forces.ts +++ b/src/stores/admin/configuration/force.ts @@ -64,17 +64,21 @@ export const useForceStore = defineStore("force", { }, async createForce(force: CreateForceViewModel): Promise> { const result = await http.post(`/admin/force`, force); - this.fetchForces(); + this.fetchForces(0, 25, "", true); return result; }, async updateForce(force: UpdateForceViewModel): Promise> { const result = await http.patch(`/admin/force/${force.id}`, force); - this.fetchForces(); + this.fetchForces(0, 25, "", true); return result; }, + async decommissionForce(forceId: string) { + await http.patch(`/admin/force/${forceId}/decommission`).catch(() => {}); + this.fetchForces(0, 25, "", true); + }, async deleteForce(force: number): Promise> { const result = await http.delete(`/admin/force/${force}`); - this.fetchForces(); + this.fetchForces(0, 25, "", true); return result; }, }, diff --git a/src/stores/admin/configuration/vehicle.ts b/src/stores/admin/configuration/vehicle.ts index 54beba9..53fd240 100644 --- a/src/stores/admin/configuration/vehicle.ts +++ b/src/stores/admin/configuration/vehicle.ts @@ -64,17 +64,21 @@ export const useVehicleStore = defineStore("vehicle", { }, async createVehicle(vehicle: CreateVehicleViewModel): Promise> { const result = await http.post(`/admin/vehicle`, vehicle); - this.fetchVehicles(); + this.fetchVehicles(0, 25, "", true); return result; }, - async updateActiveVehicle(vehicle: UpdateVehicleViewModel): Promise> { + async updateVehicle(vehicle: UpdateVehicleViewModel): Promise> { const result = await http.patch(`/admin/vehicle/${vehicle.id}`, vehicle); - this.fetchVehicles(); + this.fetchVehicles(0, 25, "", true); return result; }, + async decommissionVehicle(vehicleId: string) { + await http.patch(`/admin/vehicle/${vehicleId}/decommission`).catch(() => {}); + this.fetchVehicles(0, 25, "", true); + }, async deleteVehicle(vehicle: number): Promise> { const result = await http.delete(`/admin/vehicle/${vehicle}`); - this.fetchVehicles(); + this.fetchVehicles(0, 25, "", true); return result; }, }, diff --git a/src/views/admin/configuration/equipment/Equipment.vue b/src/views/admin/configuration/equipment/Equipment.vue new file mode 100644 index 0000000..f5f09e4 --- /dev/null +++ b/src/views/admin/configuration/equipment/Equipment.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/src/views/admin/configuration/force/Force.vue b/src/views/admin/configuration/force/Force.vue index e8c5e4b..ac82d97 100644 --- a/src/views/admin/configuration/force/Force.vue +++ b/src/views/admin/configuration/force/Force.vue @@ -34,7 +34,7 @@ import { defineAsyncComponent, defineComponent, markRaw } from "vue"; import { mapActions, mapState } from "pinia"; import MainTemplate from "@/templates/Main.vue"; -import { useForceStore } from "@/stores/admin/configuration/forces"; +import { useForceStore } from "@/stores/admin/configuration/force"; import ForceListItem from "@/components/admin/configuration/force/ForceListItem.vue"; import { useModalStore } from "@/stores/modal"; import Pagination from "@/components/Pagination.vue"; diff --git a/src/views/admin/configuration/vehicle/Vehicle.vue b/src/views/admin/configuration/vehicle/Vehicle.vue new file mode 100644 index 0000000..7cd732a --- /dev/null +++ b/src/views/admin/configuration/vehicle/Vehicle.vue @@ -0,0 +1,71 @@ + + + + +