MCPcopy Index your code
hub / github.com/gridstack/gridstack.js / GridStackProvider

Function GridStackProvider

react/lib/grid-stack-provider.tsx:5–108  ·  view source on GitHub ↗
({
  children,
  initialOptions,
}: PropsWithChildren<{ initialOptions: GridStackOptions }>)

Source from the content-addressed store, hash-verified

3import { GridStackContext } from "./grid-stack-context";
4
5export function GridStackProvider({
6 children,
7 initialOptions,
8}: PropsWithChildren<{ initialOptions: GridStackOptions }>) {
9 const [gridStack, setGridStack] = useState<GridStack | null>(null);
10 const [rawWidgetMetaMap, setRawWidgetMetaMap] = useState(() => {
11 const map = new Map<string, GridStackWidget>();
12 const deepFindNodeWithContent = (obj: GridStackWidget) => {
13 if (obj.id && obj.content) {
14 map.set(obj.id, obj);
15 }
16 if (obj.subGridOpts?.children) {
17 obj.subGridOpts.children.forEach((child: GridStackWidget) => {
18 deepFindNodeWithContent(child);
19 });
20 }
21 };
22 initialOptions.children?.forEach((child: GridStackWidget) => {
23 deepFindNodeWithContent(child);
24 });
25 return map;
26 });
27
28 const addWidget = useCallback(
29 (widget: GridStackWidget & { id: Required<GridStackWidget>["id"] }) => {
30 gridStack?.addWidget(widget);
31 setRawWidgetMetaMap((prev) => {
32 const newMap = new Map<string, GridStackWidget>(prev);
33 newMap.set(widget.id, widget);
34 return newMap;
35 });
36 },
37 [gridStack]
38 );
39
40 const addSubGrid = useCallback(
41 (subGrid: GridStackWidget & {
42 id: Required<GridStackWidget>["id"];
43 subGridOpts: Required<GridStackWidget>["subGridOpts"] & {
44 children: Array<GridStackWidget & { id: Required<GridStackWidget>["id"] }>
45 }
46 }) => {
47 gridStack?.addWidget(subGrid);
48
49 setRawWidgetMetaMap((prev) => {
50 const newMap = new Map<string, GridStackWidget>(prev);
51 subGrid.subGridOpts?.children?.forEach((meta: GridStackWidget & { id: Required<GridStackWidget>["id"] }) => {
52 newMap.set(meta.id, meta);
53 });
54 return newMap;
55 });
56 },
57 [gridStack]
58 );
59
60 const removeWidget = useCallback(
61 (id: string) => {
62 const element = document.body.querySelector<GridItemHTMLElement>(`[gs-id="${id}"]`);

Callers

nothing calls this directly

Calls 6

deepFindNodeWithContentFunction · 0.85
addWidgetMethod · 0.80
removeWidgetMethod · 0.80
deleteMethod · 0.45
saveMethod · 0.45
removeAllMethod · 0.45

Tested by

no test coverage detected