mirror of
https://github.com/outline/outline.git
synced 2026-06-13 03:14:59 +03:00
0139b91b5d
* chore: Replace lodash with es-toolkit Migrate all direct lodash imports to es-toolkit/compat for a smaller, faster, lodash-compatible utility library. Transitive lodash usage from other packages remains unchanged. * fix: Restore isPlainObject semantics in CanCan policy The lodash migration aliased `isObject` to `lodash/isPlainObject` and the codemod incorrectly mapped the local name to es-toolkit's `isObject`, which also returns true for arrays and functions. This caused condition objects in policy definitions to be skipped, breaking authorization checks across the codebase. * fix: Restore unicode-aware length counting in validators es-toolkit/compat's size() returns string.length, while lodash's _.size() counts unicode code points. Switch to [...value].length to preserve the previous behavior so multi-byte characters like emoji count as one.
27 lines
712 B
TypeScript
27 lines
712 B
TypeScript
import { isEqual } from "es-toolkit/compat";
|
|
import { useRef } from "react";
|
|
import { createRootMenuAction } from "~/actions";
|
|
import type {
|
|
ActionGroup,
|
|
ActionSeparator,
|
|
ActionVariant,
|
|
ActionWithChildren,
|
|
} from "~/types";
|
|
import usePrevious from "./usePrevious";
|
|
|
|
type Actions = (ActionVariant | ActionGroup | ActionSeparator)[];
|
|
|
|
export function useMenuAction(actions: Actions) {
|
|
const rootActionRef = useRef<ActionWithChildren>(
|
|
createRootMenuAction(actions)
|
|
);
|
|
const prevActions = usePrevious(actions);
|
|
|
|
if (!prevActions || isEqual(actions, prevActions)) {
|
|
return rootActionRef.current;
|
|
}
|
|
|
|
rootActionRef.current = createRootMenuAction(actions);
|
|
return rootActionRef.current;
|
|
}
|