mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-11-05 11:38:36 +09:00
## Description Closes #3021 The issue was that TextEditor when you switch on setting panel were active and in no way synchronized with state having it's uncontrollable nature. Here we are disabling editing mode on editor blur. ## Steps for reproduction 1. click button 2. expect xyz ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [ ] made a self-review - [ ] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [ ] tested locally and on preview environment (preview dev login: 5de6) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env.example` and the `builder/env-check.js` if mandatory
24 lines
595 B
TypeScript
24 lines
595 B
TypeScript
import { useRef, useInsertionEffect, useCallback } from "react";
|
|
|
|
const useSafeInsertionEffect =
|
|
typeof window !== "undefined"
|
|
? useInsertionEffect
|
|
: (fn: () => void) => {
|
|
fn();
|
|
};
|
|
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
export const useEffectEvent = <T extends Function>(callback?: T) => {
|
|
const ref = useRef(callback);
|
|
|
|
useSafeInsertionEffect(() => {
|
|
ref.current = callback;
|
|
});
|
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
return useCallback<T>(
|
|
((...args: unknown[]) => ref.current?.(...args)) as never,
|
|
[]
|
|
);
|
|
};
|