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.
34 lines
756 B
TypeScript
34 lines
756 B
TypeScript
import { isEqual } from "es-toolkit/compat";
|
|
import { action, computed, observable } from "mobx";
|
|
import type { FunctionComponent } from "react";
|
|
import { createPortal } from "react-dom";
|
|
|
|
export class NodeViewRenderer<T extends object> {
|
|
@observable public props: T;
|
|
|
|
public constructor(
|
|
public element: HTMLElement,
|
|
private Component: FunctionComponent,
|
|
props: T
|
|
) {
|
|
this.props = props;
|
|
}
|
|
|
|
@computed
|
|
public get content() {
|
|
return createPortal(<this.Component {...this.props} />, this.element);
|
|
}
|
|
|
|
@action
|
|
public updateProps(props: T) {
|
|
if (!isEqual(props, this.props)) {
|
|
this.props = props;
|
|
}
|
|
}
|
|
|
|
@action
|
|
public setProp<K extends keyof T>(key: K, value: T[K]) {
|
|
this.props[key] = value;
|
|
}
|
|
}
|