Fix emojipicker (#152)

This commit is contained in:
Doh
2025-05-29 08:46:08 -04:00
committed by GitHub
parent 5ae659469b
commit 9e0ae1e0da
6 changed files with 441 additions and 416 deletions

View File

@@ -1,5 +1,11 @@
# Changelog # Changelog
## Version 0.2.21
### Fixed
* emoji picker overlay issue (#150)
## Version 0.2.20 ## Version 0.2.20
### Fixed ### Fixed

View File

@@ -15,6 +15,7 @@ import { Zap } from 'lucide-react'
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'
import { Habit, SafeUser } from '@/lib/types' import { Habit, SafeUser } from '@/lib/types'
import EmojiPickerButton from './EmojiPickerButton' import EmojiPickerButton from './EmojiPickerButton'
import ModalOverlay from './ModalOverlay' // Import the new component
import { convertHumanReadableFrequencyToMachineReadable, convertMachineReadableFrequencyToHumanReadable, d2s, d2t, serializeRRule } from '@/lib/utils' import { convertHumanReadableFrequencyToMachineReadable, convertMachineReadableFrequencyToHumanReadable, d2s, d2t, serializeRRule } from '@/lib/utils'
import { INITIAL_DUE, INITIAL_RECURRENCE_RULE, QUICK_DATES, RECURRENCE_RULE_MAP, MAX_COIN_LIMIT } from '@/lib/constants' import { INITIAL_DUE, INITIAL_RECURRENCE_RULE, QUICK_DATES, RECURRENCE_RULE_MAP, MAX_COIN_LIMIT } from '@/lib/constants'
import { DateTime } from 'luxon' import { DateTime } from 'luxon'
@@ -87,8 +88,10 @@ export default function AddEditHabitModal({ onClose, onSave, habit, isTask }: Ad
} }
return ( return (
<Dialog open={true} onOpenChange={onClose}> <>
<DialogContent> <ModalOverlay />
<Dialog open={true} onOpenChange={onClose} modal={false}>
<DialogContent> {/* DialogContent from shadcn/ui is typically z-50, ModalOverlay is z-40 */}
<DialogHeader> <DialogHeader>
<DialogTitle> <DialogTitle>
{habit {habit
@@ -330,6 +333,7 @@ export default function AddEditHabitModal({ onClose, onSave, habit, isTask }: Ad
</form> </form>
</DialogContent> </DialogContent>
</Dialog> </Dialog>
</>
) )
} }

View File

@@ -10,6 +10,7 @@ import { Label } from '@/components/ui/label'
import { Textarea } from '@/components/ui/textarea' import { Textarea } from '@/components/ui/textarea'
import { WishlistItemType } from '@/lib/types' import { WishlistItemType } from '@/lib/types'
import EmojiPickerButton from './EmojiPickerButton' import EmojiPickerButton from './EmojiPickerButton'
import ModalOverlay from './ModalOverlay'
import { MAX_COIN_LIMIT } from '@/lib/constants' import { MAX_COIN_LIMIT } from '@/lib/constants'
interface AddEditWishlistItemModalProps { interface AddEditWishlistItemModalProps {
@@ -115,8 +116,10 @@ export default function AddEditWishlistItemModal({
} }
return ( return (
<Dialog open={isOpen} onOpenChange={handleClose}> <>
<DialogContent> <ModalOverlay />
<Dialog open={true} onOpenChange={handleClose} modal={false}>
<DialogContent> {/* DialogContent from shadcn/ui is typically z-50, ModalOverlay is z-40 */}
<DialogHeader> <DialogHeader>
<DialogTitle>{editingItem ? t('editTitle') : t('addTitle')}</DialogTitle> <DialogTitle>{editingItem ? t('editTitle') : t('addTitle')}</DialogTitle>
</DialogHeader> </DialogHeader>
@@ -305,6 +308,7 @@ export default function AddEditWishlistItemModal({
</form> </form>
</DialogContent> </DialogContent>
</Dialog> </Dialog>
</>
) )
} }

View File

@@ -16,7 +16,7 @@ export default function EmojiPickerButton({ onEmojiSelect, inputIdToFocus }: Emo
const [isEmojiPickerOpen, setIsEmojiPickerOpen] = useState(false) const [isEmojiPickerOpen, setIsEmojiPickerOpen] = useState(false)
return ( return (
<Popover modal={true} open={isEmojiPickerOpen} onOpenChange={setIsEmojiPickerOpen}> <Popover modal={false} open={isEmojiPickerOpen} onOpenChange={setIsEmojiPickerOpen}>
<PopoverTrigger asChild> <PopoverTrigger asChild>
<Button <Button
type="button" type="button"

View File

@@ -0,0 +1,9 @@
/**
* ModalOverlay provides a dimming effect for non-modal dialogs or popovers
* that need to appear modal (e.g., to prevent interaction with background elements).
* It should be rendered alongside the dialog/popover it's intended to overlay for.
* Ensure the dialog/popover has a z-index higher than this overlay (default z-40).
*/
export default function ModalOverlay() {
return <div className="fixed inset-0 z-50 bg-black/80" />
}

View File

@@ -152,6 +152,7 @@ export default function WishlistManager() {
</> </>
)} )}
</div> </div>
{isModalOpen &&
<AddEditWishlistItemModal <AddEditWishlistItemModal
isOpen={isModalOpen} isOpen={isModalOpen}
setIsOpen={setIsModalOpen} setIsOpen={setIsModalOpen}
@@ -160,6 +161,7 @@ export default function WishlistManager() {
addWishlistItem={addWishlistItem} addWishlistItem={addWishlistItem}
editWishlistItem={editWishlistItem} editWishlistItem={editWishlistItem}
/> />
}
<ConfirmDialog <ConfirmDialog
isOpen={deleteConfirmation.isOpen} isOpen={deleteConfirmation.isOpen}
onClose={() => setDeleteConfirmation({ isOpen: false, itemId: null })} onClose={() => setDeleteConfirmation({ isOpen: false, itemId: null })}