UNPKG

@tldraw/editor

Version:

tldraw infinite canvas SDK (editor).

8 lines (7 loc) 2.02 kB
{ "version": 3, "sources": ["../../../src/lib/hooks/useIdentity.tsx"], "sourcesContent": ["import { areArraysShallowEqual, areObjectsShallowEqual } from '@tldraw/utils'\nimport { useRef } from 'react'\n\nfunction useIdentity<T>(value: T, isEqual: (a: T, b: T) => boolean): T {\n\tconst ref = useRef(value)\n\tif (isEqual(value, ref.current)) {\n\t\treturn ref.current\n\t}\n\tref.current = value\n\treturn value\n}\n\nconst areNullableArraysShallowEqual = (\n\ta: readonly any[] | null | undefined,\n\tb: readonly any[] | null | undefined\n) => {\n\ta ??= null\n\tb ??= null\n\tif (a === b) {\n\t\treturn true\n\t}\n\tif (!a || !b) {\n\t\treturn false\n\t}\n\treturn areArraysShallowEqual(a, b)\n}\n\n/** @internal */\nexport function useShallowArrayIdentity<T extends readonly any[] | null | undefined>(arr: T): T {\n\treturn useIdentity(arr, areNullableArraysShallowEqual)\n}\n\nconst areNullableObjectsShallowEqual = (\n\ta: object | null | undefined,\n\tb: object | null | undefined\n) => {\n\ta ??= null\n\tb ??= null\n\tif (a === b) {\n\t\treturn true\n\t}\n\tif (!a || !b) {\n\t\treturn false\n\t}\n\treturn areObjectsShallowEqual(a, b)\n}\n\n/** @internal */\nexport function useShallowObjectIdentity<T extends object | null | undefined>(obj: T): T {\n\treturn useIdentity(obj, areNullableObjectsShallowEqual)\n}\n"], "mappings": "AAAA,SAAS,uBAAuB,8BAA8B;AAC9D,SAAS,cAAc;AAEvB,SAAS,YAAe,OAAU,SAAqC;AACtE,QAAM,MAAM,OAAO,KAAK;AACxB,MAAI,QAAQ,OAAO,IAAI,OAAO,GAAG;AAChC,WAAO,IAAI;AAAA,EACZ;AACA,MAAI,UAAU;AACd,SAAO;AACR;AAEA,MAAM,gCAAgC,CACrC,GACA,MACI;AACJ,QAAM;AACN,QAAM;AACN,MAAI,MAAM,GAAG;AACZ,WAAO;AAAA,EACR;AACA,MAAI,CAAC,KAAK,CAAC,GAAG;AACb,WAAO;AAAA,EACR;AACA,SAAO,sBAAsB,GAAG,CAAC;AAClC;AAGO,SAAS,wBAAqE,KAAW;AAC/F,SAAO,YAAY,KAAK,6BAA6B;AACtD;AAEA,MAAM,iCAAiC,CACtC,GACA,MACI;AACJ,QAAM;AACN,QAAM;AACN,MAAI,MAAM,GAAG;AACZ,WAAO;AAAA,EACR;AACA,MAAI,CAAC,KAAK,CAAC,GAAG;AACb,WAAO;AAAA,EACR;AACA,SAAO,uBAAuB,GAAG,CAAC;AACnC;AAGO,SAAS,yBAA8D,KAAW;AACxF,SAAO,YAAY,KAAK,8BAA8B;AACvD;", "names": [] }