Skip to content

Commit

Permalink
merge: #1263
Browse files Browse the repository at this point in the history
1263: feat(web) - unified Modal system r=wendybujalski a=wendybujalski

<img src="https://media4.giphy.com/media/L9EUxgj4PCwU6pZXsS/giphy.gif"/>

Co-authored-by: wendybujalski <wendydbujalski@gmail.com>
  • Loading branch information
si-bors-ng[bot] and wendybujalski committed Sep 2, 2022
2 parents bae8bbf + 98b2773 commit fe92fc2
Show file tree
Hide file tree
Showing 3 changed files with 145 additions and 173 deletions.
91 changes: 14 additions & 77 deletions app/web/src/organisms/GenericDiagram/DiagramHelpModal.vue
Original file line number Diff line number Diff line change
@@ -1,85 +1,22 @@
<template>
<TransitionRoot :show="open" appear as="template">
<Dialog as="div" class="relative z-50" @close="emit('close')">
<TransitionChild
as="template"
enter="duration-300 ease-out"
enter-from="opacity-0"
enter-to="opacity-100"
leave="duration-200 ease-in"
leave-from="opacity-100"
leave-to="opacity-0"
>
<div class="fixed inset-0 bg-black bg-opacity-50" />
</TransitionChild>

<div class="fixed inset-0 overflow-y-auto">
<div class="flex min-h-full items-center justify-center text-center">
<TransitionChild
as="template"
enter="duration-300 ease-out"
enter-from="opacity-0 scale-95"
enter-to="opacity-100 scale-100"
leave="duration-200 ease-in"
leave-from="opacity-100 scale-100"
leave-to="opacity-0 scale-95"
>
<DialogPanel
class="w-full max-w-md transform overflow-hidden rounded bg-white dark:bg-neutral-900 text-left align-middle shadow-xl transition-all text-black dark:text-white"
>
<div
class="flex justify-between items-center py-2 border-b border-black px-2"
>
<DialogTitle as="p" class="capitalize">
Controls For Diagram Editor
</DialogTitle>
<VButton
hide-label
button-rank="tertiary"
button-type="neutral"
icon="x"
label="Close Dialog"
@click="emit('close')"
/>
</div>

<div
class="py-1 px-2 border-t dark:border-black flex flex-col place-content-center"
>
<div class="p-4 flex flex-row place-content-center">
<ul class="space-y-2">
<li>Mouse - Add, Create, and Select Components</li>
<li>Arrow Keys - Nudge Selected Component</li>
<li>Spacebar - Hold To Drag Scroll</li>
<li>Esc - Deselect Component</li>
<li>Backspace/Delete - Delete Selected Component</li>
</ul>
</div>
<VButton
button-rank="tertiary"
button-type="neutral"
icon="x"
label="Close"
@click="emit('close')"
/>
</div>
</DialogPanel>
</TransitionChild>
</div>
<Modal :open="open" size="md" @close="emit('close')">
<template #title>Controls For Diagram Editor</template>
<template #content>
<div class="p-4 flex flex-row place-content-center">
<ul class="space-y-2">
<li>Mouse - Add, Create, and Select Components</li>
<li>Arrow Keys - Nudge Selected Component</li>
<li>Spacebar - Hold To Drag Scroll</li>
<li>Esc - Deselect Component</li>
<li>Backspace/Delete - Delete Selected Component</li>
</ul>
</div>
</Dialog>
</TransitionRoot>
</template>
</Modal>
</template>

<script lang="ts" setup>
import {
Dialog,
DialogPanel,
DialogTitle,
TransitionChild,
TransitionRoot,
} from "@headlessui/vue";
import VButton from "@/molecules/VButton.vue";
import Modal from "@/ui-lib/Modal.vue";
defineProps({
open: { type: Boolean, default: false },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,113 +27,50 @@
</div>
</div>

<TransitionRoot :show="modalOpen" appear as="template">
<Dialog as="div" class="relative z-50" @close="closeModal">
<TransitionChild
as="template"
enter="duration-300 ease-out"
enter-from="opacity-0"
enter-to="opacity-100"
leave="duration-200 ease-in"
leave-from="opacity-100"
leave-to="opacity-0"
>
<div class="fixed inset-0 bg-black bg-opacity-50" />
</TransitionChild>

<div class="fixed inset-0 overflow-y-auto">
<div class="flex min-h-full items-center justify-center text-center">
<TransitionChild
as="template"
enter="duration-300 ease-out"
enter-from="opacity-0 scale-95"
enter-to="opacity-100 scale-100"
leave="duration-200 ease-in"
leave-from="opacity-100 scale-100"
leave-to="opacity-0 scale-95"
>
<DialogPanel
class="w-full max-w-2xl transform overflow-hidden rounded bg-white dark:bg-neutral-900 text-left align-middle shadow-xl transition-all text-black dark:text-white"
>
<div
class="flex justify-between items-center py-2 border-b border-black px-2"
>
<DialogTitle as="p" class="capitalize">
{{ qualification.title }}
</DialogTitle>
<VButton
hide-label
button-rank="tertiary"
button-type="neutral"
icon="x"
label="Close Dialog"
@click="closeModal"
/>
</div>

<div class="w-full flex flex-col px-2 py-3 gap-3 text-sm">
<StatusMessageBox :status="qualificationStatus">
<template v-if="qualificationStatus === 'failure'">
Something went wrong!
</template>
<template v-else-if="qualificationStatus === 'success'">
Passed!
</template>
<template v-else>
Qualification running, standby...
</template>
</StatusMessageBox>
<Modal size="2xl" :open="modalOpen" @close="closeModal">
<template #title>{{ qualification.title }}</template>
<template #content>
<div class="my-2">
<StatusMessageBox :status="qualificationStatus">
<template v-if="qualificationStatus === 'failure'">
Something went wrong!
</template>
<template v-else-if="qualificationStatus === 'success'">
Passed!
</template>
<template v-else> Qualification running, standby... </template>
</StatusMessageBox>
</div>

<div v-if="qualification.description">
<b>Description: </b>
<p>{{ qualification.description }}</p>
</div>
<div v-if="qualification.description" class="my-2">
<b>Description: </b>
<p>{{ qualification.description }}</p>
</div>

<div
v-if="qualification.output?.length"
class="flex flex-col p-2 border border-warning-600 text-warning-500 rounded"
>
<b>Raw Output:</b>
<p
v-for="(output, index) in qualification.output"
:key="index"
class="text-sm"
>
{{ output.line }}
</p>
</div>
</div>
<div class="py-1 px-2 border-t dark:border-black text-right">
<VButton
button-rank="tertiary"
button-type="neutral"
icon="x"
label="Close"
@click="closeModal"
/>
</div>
</DialogPanel>
</TransitionChild>
</div>
<div
v-if="qualification.output?.length"
class="flex flex-col my-2 p-2 border border-warning-600 text-warning-500 rounded"
>
<b>Raw Output:</b>
<p
v-for="(output, index) in qualification.output"
:key="index"
class="text-sm"
>
{{ output.line }}
</p>
</div>
</Dialog>
</TransitionRoot>
</template>
</Modal>
</div>
</template>
<script lang="ts" setup>
import { computed, ref } from "vue";
import _ from "lodash";
import {
Dialog,
DialogPanel,
DialogTitle,
TransitionChild,
TransitionRoot,
} from "@headlessui/vue";
import { Qualification } from "@/api/sdf/dal/qualification";
import VButton from "@/molecules/VButton.vue";
import StatusMessageBox from "@/molecules/StatusMessageBox.vue";
import Modal from "@/ui-lib/Modal.vue";
const props = defineProps<{
qualification: Qualification;
Expand Down
98 changes: 98 additions & 0 deletions app/web/src/ui-lib/Modal.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
<template>
<TransitionRoot :show="open" appear as="template">
<Dialog as="div" class="relative z-50" @close="emit('close')">
<TransitionChild
as="template"
enter="duration-300 ease-out"
enter-from="opacity-0"
enter-to="opacity-100"
leave="duration-200 ease-in"
leave-from="opacity-100"
leave-to="opacity-0"
>
<div class="fixed inset-0 bg-black bg-opacity-50" />
</TransitionChild>

<div class="fixed inset-0 overflow-y-auto">
<div class="flex min-h-full items-center justify-center text-center">
<TransitionChild
as="template"
enter="duration-300 ease-out"
enter-from="opacity-0 scale-95"
enter-to="opacity-100 scale-100"
leave="duration-200 ease-in"
leave-from="opacity-100 scale-100"
leave-to="opacity-0 scale-95"
>
<DialogPanel :class="dialogPanelClasses">
<div
class="flex justify-between items-center py-2 border-b border-black px-2"
>
<DialogTitle as="p" class="capitalize">
<slot name="title" />
</DialogTitle>
<VButton
hide-label
button-rank="tertiary"
button-type="neutral"
icon="x"
label="Close Dialog"
@click="emit('close')"
/>
</div>

<div
class="py-1 px-2 border-t dark:border-black flex flex-col place-content-center overflow-hidden"
>
<slot name="content" />

<VButton
button-rank="tertiary"
button-type="neutral"
icon="x"
label="Close"
@click="emit('close')"
/>
</div>
</DialogPanel>
</TransitionChild>
</div>
</div>
</Dialog>
</TransitionRoot>
</template>

<script lang="ts" setup>
import {
Dialog,
DialogPanel,
DialogTitle,
TransitionChild,
TransitionRoot,
} from "@headlessui/vue";
import { PropType, computed } from "vue";
import VButton from "@/molecules/VButton.vue";
const props = defineProps({
open: { type: Boolean, default: false },
size: {
type: String as PropType<"sm" | "md" | "lg" | "xl" | "2xl">,
required: true,
},
});
const dialogPanelClasses = computed(() => {
let size;
if (props.size === "sm") size = "max-w-sm";
if (props.size === "md") size = "max-w-md";
if (props.size === "lg") size = "max-w-lg";
if (props.size === "xl") size = "max-w-xl";
if (props.size === "2xl") size = "max-w-2xl";
return `${size} w-full transform overflow-hidden rounded bg-white dark:bg-neutral-900 text-left align-middle shadow-xl transition-all text-black dark:text-white`;
});
const emit = defineEmits<{
(e: "close"): void;
}>();
</script>

0 comments on commit fe92fc2

Please sign in to comment.