mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-17 13:20:31 +00:00
BC-12 feat: store accounts table columns resizing to local storage.
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
import { useRef, useEffect, useMemo } from 'react';
|
||||
import React, { useRef, useEffect, useMemo } from 'react';
|
||||
import useAsync from './async';
|
||||
import useAutofocus from './useAutofocus';
|
||||
|
||||
// import use from 'async';
|
||||
|
||||
|
||||
/**
|
||||
* A custom useEffect hook that only triggers on updates, not on initial mount
|
||||
* Idea stolen from: https://stackoverflow.com/a/55075818/1526448
|
||||
@@ -49,11 +48,10 @@ const isCurrentFocus = (autoFocus, columnId, rowIndex) => {
|
||||
};
|
||||
|
||||
export function useCellAutoFocus(ref, autoFocus, columnId, rowIndex) {
|
||||
const focus = useMemo(() => isCurrentFocus(autoFocus, columnId, rowIndex), [
|
||||
autoFocus,
|
||||
columnId,
|
||||
rowIndex,
|
||||
]);
|
||||
const focus = useMemo(
|
||||
() => isCurrentFocus(autoFocus, columnId, rowIndex),
|
||||
[autoFocus, columnId, rowIndex],
|
||||
);
|
||||
useEffect(() => {
|
||||
if (ref.current && focus) {
|
||||
ref.current.focus();
|
||||
@@ -65,3 +63,46 @@ export function useCellAutoFocus(ref, autoFocus, columnId, rowIndex) {
|
||||
|
||||
export * from './useRequestPdf';
|
||||
export { useAsync, useAutofocus };
|
||||
|
||||
// Hook
|
||||
export function useLocalStorage(key, initialValue) {
|
||||
// State to store our value
|
||||
// Pass initial state function to useState so logic is only executed once
|
||||
const [storedValue, setStoredValue] = React.useState(() => {
|
||||
try {
|
||||
// Get from local storage by key
|
||||
const item = window.localStorage.getItem(key);
|
||||
// Parse stored json or if none return initialValue
|
||||
return item ? JSON.parse(item) : initialValue;
|
||||
} catch (error) {
|
||||
return initialValue;
|
||||
}
|
||||
});
|
||||
// Return a wrapped version of useState's setter function that ...
|
||||
// ... persists the new value to localStorage.
|
||||
const setValue = (value) => {
|
||||
try {
|
||||
// Allow value to be a function so we have same API as useState
|
||||
const valueToStore =
|
||||
value instanceof Function ? value(storedValue) : value;
|
||||
// Save state
|
||||
setStoredValue(valueToStore);
|
||||
// Save to local storage
|
||||
window.localStorage.setItem(key, JSON.stringify(valueToStore));
|
||||
} catch (error) {
|
||||
// A more advanced implementation would handle the error case
|
||||
console.log(error);
|
||||
}
|
||||
};
|
||||
return [storedValue, setValue];
|
||||
}
|
||||
|
||||
|
||||
export function useMemorizedColumnsWidths(tableName) {
|
||||
const [get, save] = useLocalStorage(`${tableName}.columns_widths`, {});
|
||||
|
||||
const handleColumnResizing = (current, columnWidth, columnsResizing) => {
|
||||
save(columnsResizing.columnWidths);
|
||||
};
|
||||
return [get, save, handleColumnResizing];
|
||||
}
|
||||
@@ -6,13 +6,13 @@ import {
|
||||
useSetGlobalErrors,
|
||||
useAuthToken,
|
||||
} from './state';
|
||||
import { useAppIntlContext } from '../components/AppIntlProvider';
|
||||
import { getCookie } from '../utils';
|
||||
|
||||
export default function useApiRequest() {
|
||||
const setGlobalErrors = useSetGlobalErrors();
|
||||
const { setLogout } = useAuthActions();
|
||||
const { currentLocale } = useAppIntlContext();
|
||||
|
||||
const currentLocale = getCookie('locale');
|
||||
|
||||
// Authentication token.
|
||||
const token = useAuthToken();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user