import { defineAsyncComponent, defineComponent, toRefs } from 'vue'; import { ref, reactive, computed } from 'vue'; import { AddHazardDocument, AddHazardMutation, AddHazardMutationVariables, EditHazardDocument, EditHazardMutation, EditHazardMutationVariables } from '@/graphql/operations/inventory.mutations'; import { useInventoryStore } from '@/stores/inventory'; import useApiUtil from '@/composables/api_util'; import { IHazard } from '@/models/inventory'; const Modal = defineAsyncComponent( () => import('@/components/ui/FelModal.vue') ) const Hazard = defineComponent({ name: 'hazard', setup(props, ctx) { const inventoryStore = useInventoryStore(); const { withClientMutation } = useApiUtil(); let showModal = ref(false); let formTitle = ref(''); let form = reactive({} as IHazard); const formAction = ref(true); inventoryStore.fetchHazards(); const hazards = computed(() => inventoryStore.getHazards); function addHazard(): void { const payload = { ...form }; withClientMutation(AddHazardDocument, { payload }, 'createHazard').then(result => inventoryStore.addHazard(result)); } function editHazard(): void { const payload = { name: form.name, description: form.description, }; withClientMutation(EditHazardDocument, { uid: form.uid, payload }, 'updateHazard').then(result => inventoryStore.updateHazard(result)); } function FormManager(create: boolean, obj: IHazard | null): void { formAction.value = create; formTitle.value = (create ? 'CREATE' : 'EDIT') + ' ' + 'A HAZARD'; showModal.value = true; if (create) { Object.assign(form, {} as IHazard); } else { Object.assign(form, { ...obj }); } } function saveForm(): void { if (formAction.value === true) addHazard(); if (formAction.value === false) editHazard(); showModal.value = false; } return { form, FormManager, saveForm, hazards, showModal, formTitle, }; }, render() { return (


{this.hazards.map(hazard => { return ( ); })}
Hazard Name Description
{hazard?.name}
{hazard?.description}
{/* Hazard Form Modal */} {this.showModal ? ( (this.showModal = false)} contentWidth="w-1/4"> {{ header: () =>

{this.formTitle}

, body: () => { return (