b27a97f2c5
## Summary This PR enforces the use of `@/` alias for imports instead of relative parent imports (`../`). ## Changes ### ESLint Configuration - Added `no-restricted-imports` pattern in `eslint.config.react.mjs` to block `../*` imports with the message "Relative parent imports are not allowed. Use @/ alias instead." - Removed the non-working `import/no-relative-parent-imports` rule (doesn't work properly in ESLint flat config) ### VS Code Settings - Added `javascript.preferences.importModuleSpecifier: non-relative` to `.vscode/settings.json` (TypeScript setting was already there) ### Code Fixes - Fixed **941 relative parent imports** across **706 files** in `packages/twenty-front` - All `../` imports converted to use `@/` alias ## Why - Consistent import style across the codebase - Easier to move files without breaking imports - Better IDE support for auto-imports - Clearer understanding of where imports come from
23 lines
688 B
TypeScript
23 lines
688 B
TypeScript
import { type AtomEffect } from 'recoil';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
|
|
export const localStorageEffect =
|
|
<T>(key?: string): AtomEffect<T> =>
|
|
({ setSelf, onSet, node }) => {
|
|
const savedValue = localStorage.getItem(key ?? node.key);
|
|
if (isDefined(savedValue)) {
|
|
try {
|
|
setSelf(JSON.parse(savedValue));
|
|
} catch {
|
|
// Invalid JSON in localStorage, ignore and use default value
|
|
localStorage.removeItem(key ?? node.key);
|
|
}
|
|
}
|
|
|
|
onSet((newValue, _, isReset) => {
|
|
isReset
|
|
? localStorage.removeItem(key ?? node.key)
|
|
: localStorage.setItem(key ?? node.key, JSON.stringify(newValue));
|
|
});
|
|
};
|