Files
metabuilder/hooks/useSet.ts
johndoe6345789 5aabff44cd refactor(fakemui): flatten QML components directory structure and update documentation
Directory Restructuring:
- qml/qml-components/qml-components/* → qml/components/ (flattens nesting)
- All 104 QML files moved with git history preserved
- Eliminates redundant qml-components nesting

Documentation Updates:
- ARCHITECTURE.md: Updated qml/components references (2 locations)
- GETTING_STARTED.md: Updated qml/components path (1 location, end of file)
- README.md: Updated qml/components references (3 locations)
- CODE_REVIEW.md: Updated qml/components file paths (4 locations)
- docs/ARCHITECTURE.md: Complete refactor with qml/components paths

Verification:
-  No remaining qml-components/ references in documentation
-  All 104 QML files present in flattened structure
-  Directory structure verified (12 component categories)
-  First-class directory naming convention

Structure Post-Refactor:
qml/
├── components/
│   ├── atoms/ (16 files)
│   ├── core/ (11 files)
│   ├── data-display/ (10 files)
│   ├── feedback/ (11 files)
│   ├── form/ (19 files)
│   ├── lab/ (11 files)
│   ├── layout/ (12 files)
│   ├── navigation/ (12 files)
│   ├── surfaces/ (7 files)
│   ├── theming/ (4 files)
│   └── utils/ (13 files)
├── hybrid/
└── widgets/

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-01-23 19:54:21 +00:00

73 lines
1.5 KiB
TypeScript

/**
* useSet hook - Typed Set state management
* Provides React state management for Set data structures with full operation support
*/
import { useState, useCallback } from 'react'
export interface UseSetReturn<T> {
values: Set<T>
add: (value: T) => void
remove: (value: T) => void
has: (value: T) => boolean
toggle: (value: T) => void
clear: () => void
}
/**
* Hook for managing Set state
* @template T - The type of values in the set
* @param initialValues - Optional initial values for the set
* @returns Object containing the set and operation methods
*/
export function useSet<T>(initialValues?: T[]): UseSetReturn<T> {
const [values, setValues] = useState<Set<T>>(
() => new Set(initialValues)
)
const add = useCallback((value: T) => {
setValues((prevSet) => {
const newSet = new Set(prevSet)
newSet.add(value)
return newSet
})
}, [])
const remove = useCallback((value: T) => {
setValues((prevSet) => {
const newSet = new Set(prevSet)
newSet.delete(value)
return newSet
})
}, [])
const has = useCallback((value: T) => {
return values.has(value)
}, [values])
const toggle = useCallback((value: T) => {
setValues((prevSet) => {
const newSet = new Set(prevSet)
if (newSet.has(value)) {
newSet.delete(value)
} else {
newSet.add(value)
}
return newSet
})
}, [])
const clear = useCallback(() => {
setValues(new Set())
}, [])
return {
values,
add,
remove,
has,
toggle,
clear,
}
}