Skip to content
This repository has been archived by the owner on Feb 22, 2023. It is now read-only.

Add breakpoint based modal variations #1272

Merged
merged 7 commits into from
May 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/components/VContentSwitcher/VMobileMenuModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
aria-controls="content-switcher-modal"
/>
</div>
<VMobileModalContent
<VModalContent
:visible="visibleRef"
:trigger-element="triggerRef"
:hide="close"
Expand All @@ -29,7 +29,7 @@
/>
<VPageList layout="columns" class="mt-10" />
</nav>
</VMobileModalContent>
</VModalContent>
</div>
</template>

Expand All @@ -47,15 +47,15 @@ import usePages from '~/composables/use-pages'
import useSearchType from '~/composables/use-search-type'
import { useBodyScrollLock } from '~/composables/use-body-scroll-lock'
import VMobileModalContent from '~/components/VModal/VMobileModalContent.vue'
import VModalContent from '~/components/VModal/VModalContent.vue'
import VSearchTypes from '~/components/VContentSwitcher/VSearchTypes.vue'
import VPageList from '~/components/VHeader/VPageMenu/VPageList.vue'
import VSearchTypeButton from '~/components/VContentSwitcher/VSearchTypeButton.vue'
export default defineComponent({
name: 'VMobileMenuModal',
components: {
VMobileModalContent,
VModalContent,
VSearchTypes,
VPageList,
VSearchTypeButton,
Expand Down
8 changes: 4 additions & 4 deletions src/components/VHeader/VHeaderFilter.vue
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ import VTeleport from '~/components/VTeleport/VTeleport.vue'
import VFilterButton from '~/components/VHeader/VFilterButton.vue'
import VSearchGridFilter from '~/components/VFilters/VSearchGridFilter.vue'
import VSidebarContent from '~/components/VHeader/VSidebarContent.vue'
import VMobileModalContent from '~/components/VModal/VMobileModalContent.vue'
import VModalContent from '~/components/VModal/VModalContent.vue'

export default {
name: 'VHeaderFilter',
components: {
VFilterButton,
VSearchGridFilter,
VSidebarContent,
VMobileModalContent,
VModalContent,
VTeleport,
},
emits: [
Expand Down Expand Up @@ -72,7 +72,7 @@ export default {
const isHeaderScrolled = inject('isHeaderScrolled')

/** @type { import('@nuxtjs/composition-api').Ref<import('@nuxtjs/composition-api').Component> } */
const filterComponent = ref(VMobileModalContent)
const filterComponent = ref(VModalContent)

const triggerA11yProps = reactive({
'aria-expanded': false,
Expand Down Expand Up @@ -136,7 +136,7 @@ export default {
filterComponent.value = VSidebarContent
options.value = desktopOptions
} else {
filterComponent.value = VMobileModalContent
filterComponent.value = VModalContent
options.value = mobileOptions
}
},
Expand Down
8 changes: 4 additions & 4 deletions src/components/VHeader/VPageMenu/VMobilePageMenu.vue
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<!-- eslint-enable vuejs-accessibility/click-events-have-key-events -->
<VPageMenuButton :a11y-props="triggerA11yProps" />
</div>
<VMobileModalContent
<VModalContent
:visible="visibleRef"
:trigger-element="triggerRef"
:hide="close"
Expand All @@ -18,7 +18,7 @@
<nav class="p-4">
<VPageList layout="columns" @click="closeMenu" />
</nav>
</VMobileModalContent>
</VModalContent>
</div>
</template>

Expand All @@ -27,13 +27,13 @@ import { computed, reactive, ref, watch } from '@nuxtjs/composition-api'
import { useBodyScrollLock } from '~/composables/use-body-scroll-lock'
import VMobileModalContent from '~/components/VModal/VMobileModalContent.vue'
import VModalContent from '~/components/VModal/VModalContent.vue'
import VPageMenuButton from '~/components/VHeader/VPageMenu/VPageMenuButton.vue'
import VPageList from '~/components/VHeader/VPageMenu/VPageList.vue'
export default {
name: 'VMobilePageMenu',
components: { VMobileModalContent, VPageMenuButton, VPageList },
components: { VModalContent, VPageMenuButton, VPageList },
setup(_, { emit }) {
const modalRef = ref(null)
Expand Down
140 changes: 0 additions & 140 deletions src/components/VModal/VMobileModalContent.vue

This file was deleted.

61 changes: 45 additions & 16 deletions src/components/VModal/VModalContent.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,49 @@
<!-- Prevent FocusTrap from trying to focus the first element. We already do that in a more flexible, adaptive way in our Dialog composables. -->
<FocusTrap :initial-focus="() => false">
<div
class="flex justify-center z-10 fixed inset-0 bg-dark-charcoal bg-opacity-75 min-h-screen"
class="flex justify-center z-10 fixed inset-0 bg-dark-charcoal bg-opacity-75 min-h-screen overflow-y-auto"
>
<div
ref="dialogRef"
v-bind="$attrs"
class="w-4/5 flex flex-col"
class="w-full md:max-w-[768px] lg:w-[768px] xl:max-w-[1024px] xl:w-[1024px] flex flex-col"
role="dialog"
aria-modal="true"
v-on="$listeners"
@keydown="onKeyDown"
@blur="onBlur"
>
<div class="w-full flex justify-end">
<VButton
size="disabled"
variant="plain"
class="text-white py-2"
@click="hide()"
<slot name="top-bar" :close="hide">
<!--
These specific padding and margin values serve to
visually align the Openverse logo button in the modal
with the header logo button so that there isn't a
jarring "shifting" effect when opening the mobile modal.
-->
<div
class="w-full flex justify-between md:justify-end bg-white md:bg-tx ps-4 pe-3 md:px-0 py-4 md:py-3 shrink-0"
>
{{ $t('modal.close') }} <VIcon :icon-path="closeIcon" />
</VButton>
</div>
<VLogoButton
class="md:hidden"
:is-fetching="false"
:is-header-scrolled="false"
:is-search-route="true"
/>
<VButton
ref="closeButton"
size="disabled"
variant="plain"
class="md:text-white text-sr md:text-base"
@click="hide()"
>
{{ $t('modal.close') }}
<VIcon :icon-path="closeIcon" class="ms-2" :size="5" />
</VButton>
</div>
</slot>

<div
class="w-full flex-grow align-bottom bg-white rounded-t-sm text-left overflow-y-auto"
class="w-full flex-grow align-bottom bg-white md:rounded-t-md text-left"
>
<slot />
</div>
Expand All @@ -38,7 +56,7 @@
</template>

<script>
import { defineComponent, toRefs, ref } from '@nuxtjs/composition-api'
import { defineComponent, toRefs, ref, computed } from '@nuxtjs/composition-api'
import { FocusTrap } from 'focus-trap-vue'
import { useDialogContent } from '~/composables/use-dialog-content'
Expand All @@ -47,6 +65,7 @@ import { warn } from '~/utils/console'
import VTeleport from '~/components/VTeleport/VTeleport.vue'
import VButton from '~/components/VButton.vue'
import VIcon from '~/components/VIcon/VIcon.vue'
import VLogoButton from '~/components/VHeader/VLogoButton.vue'
import closeIcon from '~/assets/icons/close.svg'
Expand All @@ -55,7 +74,7 @@ import closeIcon from '~/assets/icons/close.svg'
*/
const VModalContent = defineComponent({
name: 'VModalContent',
components: { VTeleport, VButton, VIcon, FocusTrap },
components: { VTeleport, VButton, VIcon, FocusTrap, VLogoButton },
props: {
visible: {
type: Boolean,
Expand Down Expand Up @@ -101,6 +120,10 @@ const VModalContent = defineComponent({
}
const propsRefs = toRefs(props)
const closeButton = ref()
const initialFocusElement = computed(
() => props.initialFocusElement || closeButton.value?.$el
)
const dialogRef = ref()
const { onKeyDown, onBlur } = useDialogContent({
dialogRef,
Expand All @@ -111,11 +134,17 @@ const VModalContent = defineComponent({
hideOnClickOutsideRef: propsRefs.hideOnClickOutside,
hideRef: propsRefs.hide,
hideOnEscRef: propsRefs.hideOnEsc,
initialFocusElementRef: propsRefs.initialFocusElement,
initialFocusElementRef: initialFocusElement,
emit,
})
return { dialogRef, onKeyDown, onBlur, closeIcon }
return {
dialogRef,
onKeyDown,
onBlur,
closeIcon,
closeButton,
}
},
})
Expand Down