From 57c9bd2070d3931b5f503d1af55ad73daba61546 Mon Sep 17 00:00:00 2001 From: Varun Raj Date: Tue, 25 Mar 2025 21:25:59 +0530 Subject: [PATCH] feat: enhance person management with merge functionality - Added merge capability for persons in the PersonItem component using an autocomplete input. - Introduced an AlertDialog for confirming merges. - Updated package.json to include new dependencies for react-query and related types. - Refactored FindInput component by removing unused styles. - Updated AlertDialog interface for better type handling. --- bun.lockb | Bin 471736 -> 474514 bytes package.json | 5 +- src/components/find/FindInput.tsx | 2 - src/components/people/PersonItem.tsx | 62 ++++-- src/components/ui/alert-dialog.tsx | 4 +- src/components/ui/autocomplete.tsx | 275 +++++++++++++++++++++++++++ src/components/ui/skeleton.tsx | 15 ++ src/config/queryClient.ts | 3 + src/pages/_app.tsx | 14 +- 9 files changed, 352 insertions(+), 28 deletions(-) create mode 100644 src/components/ui/autocomplete.tsx create mode 100644 src/components/ui/skeleton.tsx create mode 100644 src/config/queryClient.ts diff --git a/bun.lockb b/bun.lockb index 0b94ea64c0ee071960fd7d72ffad39b40e8e64f9..c4de24ec5e672a50d43255c5d0e8ce8603ac6c06 100755 GIT binary patch delta 95930 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 Pq*)Jft@vKh7}Ng%vgq7Q diff --git a/package.json b/package.json index c4869bc..f9e7cbf 100644 --- a/package.json +++ b/package.json @@ -34,9 +34,11 @@ "@radix-ui/react-tooltip": "^1.1.2", "@remotion/cli": "4.0.232", "@remotion/eslint-plugin": "^4.0.232", + "@tanstack/react-query": "^5.69.0", "@tanstack/react-table": "^8.20.1", "@types/cookie": "^0.6.0", "@types/qs": "^6.9.15", + "@types/react-autosuggest": "^10.1.11", "@types/react-calendar-heatmap": "^1.6.7", "@vis.gl/react-google-maps": "^1.4.2", "axios": "^1.7.4", @@ -57,13 +59,13 @@ "pg": "^8.12.0", "qs": "^6.13.0", "react": "^18", + "react-autosuggest": "^10.1.0", "react-day-picker": "9.0.8", "react-dom": "^18", "react-grid-gallery": "^1.0.1", "react-hot-toast": "^2.5.1", "react-leaflet": "^4.2.1", "react-mentions": "^4.4.10", - "react-query": "^3.39.3", "recharts": "^2.12.7", "remotion": "4.0.232", "sass": "^1.77.8", @@ -78,6 +80,7 @@ "@semantic-release/github": "^10.1.7", "@semantic-release/npm": "^12.0.1", "@semantic-release/release-notes-generator": "^14.0.1", + "@tanstack/eslint-plugin-query": "^5.68.0", "@types/jsonwebtoken": "^9.0.6", "@types/leaflet": "^1.9.15", "@types/node": "^20", diff --git a/src/components/find/FindInput.tsx b/src/components/find/FindInput.tsx index 094985e..7b7bbf9 100644 --- a/src/components/find/FindInput.tsx +++ b/src/components/find/FindInput.tsx @@ -3,8 +3,6 @@ import inputStyle from './findInputStyle' import { MentionsInput, Mention } from 'react-mentions' import { searchPeople } from '@/handlers/api/people.handler'; import mentionStyle from './findMentionStyle'; -import classNames from './FindInput.module.css'; - interface FindInputProps { onSearch: (query: string) => void; diff --git a/src/components/people/PersonItem.tsx b/src/components/people/PersonItem.tsx index a0dee00..c8cdba1 100644 --- a/src/components/people/PersonItem.tsx +++ b/src/components/people/PersonItem.tsx @@ -1,7 +1,7 @@ import { IPerson } from "@/types/person"; -import React, { useState } from "react"; +import React, { useRef, useState } from "react"; import { Avatar } from "../ui/avatar"; -import { updatePerson } from "@/handlers/api/people.handler"; +import { mergePerson, searchPeople, updatePerson } from "@/handlers/api/people.handler"; import { PersonMergeDropdown } from "./PersonMergeDropdown"; import PersonBirthdayCell from "./PersonBirthdayCell"; import clsx from "clsx"; @@ -12,6 +12,8 @@ import { useToast } from "../ui/use-toast"; import { Badge } from "../ui/badge"; import { Button } from "@/components/ui/button"; import ShareAssetsTrigger from "../shared/ShareAssetsTrigger"; +import { Autocomplete, AutocompleteOption } from "../ui/autocomplete"; +import { AlertDialog, IAlertDialogActions } from "../ui/alert-dialog"; interface IProps { person: IPerson; onRemove: (person: IPerson) => void; @@ -22,6 +24,8 @@ export default function PersonItem({ person, onRemove }: IProps) { const [editMode, setEditMode] = useState(false); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState(person); + const selectedPerson = useRef(null); + const mergeDialogRef = useRef(null); const handleEdit = () => { if (formData.name && formData.name !== person.name) { @@ -62,12 +66,16 @@ export default function PersonItem({ person, onRemove }: IProps) { isHidden: hidden, })); }) - .catch(() => {}) + .catch(() => { }) .finally(() => { setLoading(false); }); }; + const handleMerge = async (option: AutocompleteOption) => { + await mergePerson(person.id, [option.value]); + }; + return (
- +
{person.assetCount} Assets
@@ -103,13 +111,13 @@ export default function PersonItem({ person, onRemove }: IProps) {
- + - + {formData.isHidden ? "Show" : "Hide"} + +
{!editMode ? ( @@ -126,7 +134,11 @@ export default function PersonItem({ person, onRemove }: IProps) { )} ) : ( - searchPeople(query).then((people) => people.map((person: any) => ({ + label: person.name, value: person.id, + imageUrl: person.thumbnailPath + })))} type="text" className="text-lg font-semibold text-center w-full px-2 py-1 rounded-lg" defaultValue={formData.name} @@ -135,18 +147,32 @@ export default function PersonItem({ person, onRemove }: IProps) { onChange={(e) => { setFormData({ ...formData, name: e.target.value }); }} - onKeyDown={(e) => { - if (e.key === "Enter") { - handleEdit(); - } + value={formData.name} + onOptionSelect={(value) => { + mergeDialogRef.current?.open(); + selectedPerson.current = value; }} + createNewLabel="Merge with this person" disabled={loading} - onBlur={handleEdit} + onCreateNew={(value) => { + handleEdit(); + }} /> )}
+ + { + if (selectedPerson.current) { + handleMerge(selectedPerson.current); + } + }} + /> ); } diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx index 35c8942..524494d 100644 --- a/src/components/ui/alert-dialog.tsx +++ b/src/components/ui/alert-dialog.tsx @@ -128,7 +128,7 @@ const AlertDialogCancel = React.forwardRef< AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName -export interface INewChangelogButtonActions { +export interface IAlertDialogActions { open: () => void } interface AlertDialogProps extends AlertDialogPrimitive.AlertDialogProps { @@ -142,7 +142,7 @@ interface AlertDialogProps extends AlertDialogPrimitive.AlertDialogProps { disabled?: boolean } -const AlertDialog = React.forwardRef>(({ +const AlertDialog = React.forwardRef>(({ children, title, description, diff --git a/src/components/ui/autocomplete.tsx b/src/components/ui/autocomplete.tsx new file mode 100644 index 0000000..5fa48f3 --- /dev/null +++ b/src/components/ui/autocomplete.tsx @@ -0,0 +1,275 @@ +import * as React from "react" +import { Input } from "./input" +import { cn } from "@/lib/utils" +import { Avatar, AvatarImage } from "./avatar" + +export interface AutocompleteOption { + label: string + value: string + imageUrl?: string +} + +export interface AutocompleteProps extends React.InputHTMLAttributes { + options?: AutocompleteOption[] + value: string + onOptionSelect: (value: AutocompleteOption) => void + placeholder?: string + className?: string + loadOptions?: (inputValue: string) => Promise + initialValue?: string + isLoading?: boolean + onCreateNew?: (inputValue: string) => void + createNewLabel?: string +} + +const Autocomplete = React.forwardRef( + ({ + options: staticOptions, + value, + onOptionSelect, + placeholder, + className, + loadOptions, + initialValue, + isLoading: externalLoading, + onCreateNew, + createNewLabel = "Create new", + ...props + }, forwardedRef) => { + const [open, setOpen] = React.useState(false) + const [inputValue, setInputValue] = React.useState(initialValue || value) + const [options, setOptions] = React.useState(staticOptions || []) + const [isLoading, setIsLoading] = React.useState(false) + const [selectedIndex, setSelectedIndex] = React.useState(-1) + const containerRef = React.useRef(null) + const inputRef = React.useRef(null) + const debounceTimeout = React.useRef() + + // Find the label for the current value + const currentLabel = React.useMemo(() => { + if (!value) return "" + const option = options.find(opt => opt.value === value) + return option?.label || value + }, [value, options]) + + React.useEffect(() => { + setInputValue(initialValue || currentLabel) + }, [initialValue, currentLabel]) + + // Close dropdown when clicking outside + React.useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (containerRef.current && !containerRef.current.contains(event.target as Node)) { + setOpen(false) + setSelectedIndex(-1) + // Don't blur the input when clicking outside with a small delay + setTimeout(() => { + if (inputRef.current) { + inputRef.current.focus() + } + }, 0) + } + } + + document.addEventListener("mousedown", handleClickOutside) + return () => document.removeEventListener("mousedown", handleClickOutside) + }, []) + + // Handle async loading of options + React.useEffect(() => { + if (!loadOptions) return + + const loadOptionsAsync = async () => { + if (!inputValue.trim()) { + setOptions([]) + return + } + + setIsLoading(true) + try { + const results = await loadOptions(inputValue) + setOptions(results) + } catch (error) { + console.error('Error loading options:', error) + setOptions([]) + } finally { + setIsLoading(false) + } + } + + // Debounce the search to avoid too many API calls + if (debounceTimeout.current) { + clearTimeout(debounceTimeout.current) + } + debounceTimeout.current = setTimeout(loadOptionsAsync, 300) + + return () => { + if (debounceTimeout.current) { + clearTimeout(debounceTimeout.current) + } + } + }, [inputValue, loadOptions]) + + const filteredOptions = loadOptions + ? options + : (staticOptions || []).filter((option) => + option.label.toLowerCase().includes(inputValue.toLowerCase()) + ) + + const showCreateNew = onCreateNew && inputValue.trim() && !isLoading + const totalOptions = filteredOptions.length + (showCreateNew ? 1 : 0) + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (!open) { + if (e.key === 'ArrowDown' || e.key === 'ArrowUp') { + e.preventDefault() + setOpen(true) + setSelectedIndex(0) + } + return + } + + switch (e.key) { + case 'ArrowDown': + e.preventDefault() + setSelectedIndex((prev) => (prev + 1) % totalOptions) + break + case 'ArrowUp': + e.preventDefault() + setSelectedIndex((prev) => (prev - 1 + totalOptions) % totalOptions) + break + case 'Enter': + e.preventDefault() + if (selectedIndex >= 0 && selectedIndex < filteredOptions.length) { + const option = filteredOptions[selectedIndex] + setInputValue(option.label) + onOptionSelect(option) + setOpen(false) + setSelectedIndex(-1) + // Keep focus on input after selection with a small delay + setTimeout(() => { + if (inputRef.current) { + inputRef.current.focus() + } + }, 0) + } else if (showCreateNew && selectedIndex === filteredOptions.length) { + onCreateNew(inputValue.trim()) + setOpen(false) + setSelectedIndex(-1) + // Keep focus on input after creating new with a small delay + setTimeout(() => { + if (inputRef.current) { + inputRef.current.focus() + } + }, 0) + } + break + case 'Escape': + e.preventDefault() + setOpen(false) + setSelectedIndex(-1) + break + } + } + + return ( +
+ { + // Handle both the forwarded ref and our internal ref + if (typeof forwardedRef === 'function') { + forwardedRef(node) + } + if (node) { + (inputRef as React.MutableRefObject).current = node + } + }} + value={inputValue} + onFocus={(e) => { + setOpen(true) + // containerRef.current?.focus() + }} + onKeyDown={handleKeyDown} + placeholder={placeholder} + className={cn("w-full", className)} + {...props} + onChange={(e) => { + setInputValue(e.target.value) + setSelectedIndex(-1) + props.onChange?.(e) + }} + /> + {open && (filteredOptions.length > 0 || isLoading || showCreateNew) && ( +
+ {isLoading ? ( +
+ Loading... +
+ ) : ( + <> + {filteredOptions.map((option, index) => ( + + ))} + {showCreateNew && ( + + )} + + )} +
+ )} +
+ ) + } +) + +Autocomplete.displayName = "Autocomplete" + +export { Autocomplete } diff --git a/src/components/ui/skeleton.tsx b/src/components/ui/skeleton.tsx new file mode 100644 index 0000000..d7e45f7 --- /dev/null +++ b/src/components/ui/skeleton.tsx @@ -0,0 +1,15 @@ +import { cn } from "@/lib/utils" + +function Skeleton({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
+ ) +} + +export { Skeleton } diff --git a/src/config/queryClient.ts b/src/config/queryClient.ts new file mode 100644 index 0000000..498e530 --- /dev/null +++ b/src/config/queryClient.ts @@ -0,0 +1,3 @@ +import { QueryClient } from "@tanstack/react-query"; + +export const queryClient = new QueryClient(); \ No newline at end of file diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 649a4b7..4954850 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -5,6 +5,8 @@ import { ThemeProvider } from "next-themes"; import { ENV } from "@/config/environment"; import ConfigContext, { ConfigContextType } from "@/contexts/ConfigContext"; import { useRef } from "react"; +import { queryClient } from "@/config/queryClient"; +import { QueryClientProvider } from "@tanstack/react-query"; interface AppPropsWithProps extends AppProps { props: ConfigContextType; } @@ -13,11 +15,13 @@ const App = ({ Component, pageProps, ...props }: AppPropsWithProps) => { return ( - - - - - + + + + + + + ); };