Skip to content

Commit

Permalink
fix: enhance header to open only one dropdown
Browse files Browse the repository at this point in the history
  • Loading branch information
AlitaBernachot committed Oct 16, 2024
1 parent 68c97df commit 084934a
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 22 deletions.
4 changes: 4 additions & 0 deletions src/assets/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,10 @@
box-shadow: inset 0px 2px 4px -1px rgba(0, 57, 79, 0.25);
}

.lux-account ::placeholder {
@apply text-gray-400;
}

.form-control {
border: 1px solid var(--color-gray);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
Expand Down
18 changes: 12 additions & 6 deletions src/components/auth/auth-form.vue
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ function submit() {

<template>
<div data-cy="authForm" class="lux-account bg-secondary">
<h4 class="lux-panel-title pt-5 pl-5 h-16 shrink-0 flex justify-between">
<h4
class="lux-panel-title pt-5 mb-5 pl-5 h-16 shrink-0 flex justify-between"
>
{{ t('My account') }}
</h4>

Expand All @@ -45,10 +47,10 @@ function submit() {
<!-- When user is not authenticated -->
<template v-if="!isAuthenticated">
<form @submit.prevent="submit">
<div class="flex flex-col gap-1 mb-2">
<div class="flex flex-col gap-2 mb-2">
<div>
<input
class="w-full lux-input"
class="w-full lux-input h-11"
type="text"
name="userName"
v-model="userName"
Expand All @@ -57,7 +59,7 @@ function submit() {
</div>
<div>
<input
class="w-full lux-input"
class="w-full lux-input h-11"
type="password"
name="userPassword"
:placeholder="t('Password')"
Expand All @@ -66,7 +68,7 @@ function submit() {
</div>

<div class="flex mt-3 items-center">
<div class="grow">
<div class="grow leading-5">
<p>
<a
data-cy="authFormLostPwd"
Expand All @@ -87,7 +89,11 @@ function submit() {
</p>
</div>
<div>
<input class="lux-btn" type="submit" :value="t('Submit')" />
<input
class="lux-btn h-11 w-24 text-white placeholder:italic bg-secondary border-none uppercase hover:text-primary hover:bg-secondary"
type="submit"
:value="t('Submit')"
/>
</div>
</div>
</form>
Expand Down
24 changes: 18 additions & 6 deletions src/components/common/dropdown-content.vue
Original file line number Diff line number Diff line change
@@ -1,19 +1,31 @@
<script setup lang="ts">
import { onMounted, onUnmounted, shallowRef, ShallowRef } from 'vue'
import { onMounted, onUnmounted, shallowRef, ShallowRef, watch } from 'vue'
const props = withDefaults(
defineProps<{
placeholder?: string
enableClickOutside?: boolean
isOpen?: boolean
}>(),
{
enableClickOutside: true,
isOpen: false,
}
)
const emit = defineEmits(['toggleDropdown'])
const localIsOpen: ShallowRef<boolean> = shallowRef(props.isOpen)
watch(
() => props.isOpen,
isOpen => {
localIsOpen.value = isOpen
}
)
const isOpen: ShallowRef<boolean> = shallowRef(false)
function toggleDropdown(forceOpen?: boolean) {
isOpen.value = forceOpen === void 0 ? !isOpen.value : forceOpen
localIsOpen.value = forceOpen === void 0 ? !localIsOpen.value : forceOpen
emit('toggleDropdown', localIsOpen.value)
}
function onClickOpenBtn(event: MouseEvent) {
Expand Down Expand Up @@ -43,8 +55,8 @@ onUnmounted(
<button
type="button"
class="lux-btn lux-dropdown-btn"
:class="isOpen ? 'expanded' : ''"
:aria-expanded="isOpen"
:class="localIsOpen ? 'expanded' : ''"
:aria-expanded="localIsOpen"
aria-haspopup="true"
@click="onClickOpenBtn"
>
Expand All @@ -55,7 +67,7 @@ onUnmounted(
<div class="lux-dropdown-wrapper">
<div
class="lux-dropdown-content"
:class="isOpen ? '' : 'hidden'"
:class="localIsOpen ? '' : 'hidden'"
tabindex="-1"
>
<slot></slot>
Expand Down
24 changes: 23 additions & 1 deletion src/components/header-bar/header-bar.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { watch } from 'vue'
import { ref, watch } from 'vue'
import { storeToRefs } from 'pinia'
import { useTranslation } from 'i18next-vue'
Expand All @@ -15,6 +15,8 @@ const appStore = useAppStore()
const { toggleThemeGrid } = appStore
const themeStore = useThemeStore()
const { theme } = storeToRefs(themeStore)
const isAuthFormOpened = ref(false)
const isLangOpened = ref(false)
watch(
theme,
Expand Down Expand Up @@ -43,6 +45,22 @@ function onClick() {
toggleThemeGrid()
}
function onToggleDropdownLang(isOpen: boolean) {
isLangOpened.value = isOpen
if (isOpen) {
isAuthFormOpened.value = false
}
}
function onToggleDropdownAuth(isOpen: boolean) {
isAuthFormOpened.value = isOpen
if (isOpen) {
isLangOpened.value = false
}
}
</script>

<template>
Expand Down Expand Up @@ -72,6 +90,8 @@ function onClick() {
<language-selector
data-cy="langSelect"
class="flex-none h-full"
:isOpen="isLangOpened"
@toggleDropdown="onToggleDropdownLang"
></language-selector>
</li>

Expand All @@ -81,6 +101,8 @@ function onClick() {
data-cy="authFormIcon"
class="lux-navbar-dropdown lux-navbar-dropdown-auth h-full"
:enableClickOutside="false"
:isOpen="isAuthFormOpened"
@toggleDropdown="onToggleDropdownAuth"
>
<auth-form class="w-80" />
</dropdown-content>
Expand Down
16 changes: 7 additions & 9 deletions src/components/header-bar/language-selector.vue
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,11 @@ function changeLanguages(lang: string) {
</script>

<template>
<div>
<dropdown-list
class="lux-navbar-dropdown lux-dropdown-inline text-white h-full"
:options="availableLanguages"
:placeholder="placeholder"
v-model="lang"
@change="changeLanguages"
></dropdown-list>
</div>
<dropdown-list
class="lux-navbar-dropdown lux-dropdown-inline text-white h-full"
:options="availableLanguages"
:placeholder="placeholder"
v-model="lang"
@change="changeLanguages"
></dropdown-list>
</template>

0 comments on commit 084934a

Please sign in to comment.