First Commit
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
'use client';
|
||||
import { use } from 'react';
|
||||
|
||||
// @project
|
||||
import { ConfigContext } from '@/contexts/ConfigContext';
|
||||
|
||||
/*************************** HOOKS - CONFIG ***************************/
|
||||
|
||||
export default function useConfig() {
|
||||
const context = use(ConfigContext);
|
||||
|
||||
if (!context) throw new Error('useSConfig must be use inside ConfigProvider');
|
||||
|
||||
return context;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
|
||||
const useFocusWithin = () => {
|
||||
const [isFocusWithin, setIsFocusWithin] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
// Event handler for keydown events
|
||||
const handleKeyDown = (event) => {
|
||||
if (event.key === 'Tab') {
|
||||
setIsFocusWithin(true);
|
||||
}
|
||||
};
|
||||
|
||||
// Event handler for mousedown events
|
||||
const handleMouseDown = () => {
|
||||
setIsFocusWithin(false);
|
||||
};
|
||||
|
||||
// Function to add event listeners
|
||||
const addEventListeners = () => {
|
||||
document.addEventListener('keydown', handleKeyDown);
|
||||
document.addEventListener('mousedown', handleMouseDown);
|
||||
};
|
||||
|
||||
// Function to remove event listeners
|
||||
const removeEventListeners = () => {
|
||||
document.removeEventListener('keydown', handleKeyDown);
|
||||
document.removeEventListener('mousedown', handleMouseDown);
|
||||
};
|
||||
|
||||
// Add event listeners when the component mounts
|
||||
addEventListeners();
|
||||
|
||||
// Cleanup event listeners when the component unmounts
|
||||
return () => {
|
||||
removeEventListeners();
|
||||
};
|
||||
}, []);
|
||||
|
||||
return isFocusWithin;
|
||||
};
|
||||
|
||||
export default useFocusWithin;
|
||||
@@ -0,0 +1,45 @@
|
||||
import { useState, useEffect, useCallback } from 'react';
|
||||
|
||||
/*************************** HOOKS - LOCAL STORAGE ***************************/
|
||||
|
||||
export default function useLocalStorage(key, defaultValue) {
|
||||
// Load initial state from localStorage or fallback to default
|
||||
const readValue = () => {
|
||||
if (typeof window === 'undefined') return defaultValue;
|
||||
|
||||
try {
|
||||
const item = localStorage.getItem(key);
|
||||
return item ? JSON.parse(item) : defaultValue;
|
||||
} catch (err) {
|
||||
console.warn(`Error reading localStorage key “${key}”:`, err);
|
||||
return defaultValue;
|
||||
}
|
||||
};
|
||||
|
||||
const [state, setState] = useState(readValue);
|
||||
|
||||
// Sync to localStorage whenever state changes
|
||||
useEffect(() => {
|
||||
try {
|
||||
localStorage.setItem(key, JSON.stringify(state));
|
||||
} catch (err) {
|
||||
console.warn(`Error setting localStorage key “${key}”:`, err);
|
||||
}
|
||||
}, [key, state]);
|
||||
|
||||
// Update single field
|
||||
const setField = useCallback((key, value) => {
|
||||
setState((prev) => ({
|
||||
...prev,
|
||||
[key]: value
|
||||
}));
|
||||
}, []);
|
||||
|
||||
// Reset to defaults
|
||||
const resetState = useCallback(() => {
|
||||
setState(defaultValue);
|
||||
localStorage.setItem(key, JSON.stringify(defaultValue));
|
||||
}, [defaultValue, key]);
|
||||
|
||||
return { state, setState, setField, resetState };
|
||||
}
|
||||
Reference in New Issue
Block a user