@ynput/ayon-frontend-shared 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/_virtual/index.cjs10.js +1 -1
  2. package/dist/_virtual/index.cjs11.js +1 -1
  3. package/dist/_virtual/index.cjs12.js +1 -1
  4. package/dist/_virtual/index.es10.js +3 -3
  5. package/dist/_virtual/index.es11.js +5 -5
  6. package/dist/_virtual/index.es12.js +5 -5
  7. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  8. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  9. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  10. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  11. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  12. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  13. package/dist/shared/src/api/queries/views/getViews.cjs.js +1 -1
  14. package/dist/shared/src/api/queries/views/getViews.cjs.js.map +1 -1
  15. package/dist/shared/src/api/queries/views/getViews.es.js +20 -24
  16. package/dist/shared/src/api/queries/views/getViews.es.js.map +1 -1
  17. package/dist/shared/src/api/queries/views/updateViews.cjs.js +1 -1
  18. package/dist/shared/src/api/queries/views/updateViews.cjs.js.map +1 -1
  19. package/dist/shared/src/api/queries/views/updateViews.es.js +157 -103
  20. package/dist/shared/src/api/queries/views/updateViews.es.js.map +1 -1
  21. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  22. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  23. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +32 -30
  24. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  25. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  26. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  27. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +54 -38
  28. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  29. package/dist/types/containers/Views/utils/viewUpdateHelper.d.ts +3 -3
  30. package/package.json +1 -1
@@ -1,173 +1,227 @@
1
- import { getViewsApi as u, getScopeTag as y } from "./getViews.es.js";
2
- import { v4 as m } from "uuid";
3
- const V = u.enhanceEndpoints({
1
+ import { getViewsApi as l, getScopeTag as v } from "./getViews.es.js";
2
+ import { v4 as f } from "uuid";
3
+ const V = l.enhanceEndpoints({
4
4
  endpoints: {
5
5
  createView: {
6
- onQueryStarted: async (e, { dispatch: n, queryFulfilled: a, getState: r }) => {
7
- const { payload: i } = e, p = r().user?.name, v = n(
8
- u.util.updateQueryData(
6
+ onQueryStarted: async (e, { dispatch: n, queryFulfilled: u, getState: r }) => {
7
+ const { payload: t } = e, o = r().user?.name, d = n(
8
+ l.util.updateQueryData(
9
9
  "listViews",
10
10
  { viewType: e.viewType, projectName: e.projectName },
11
- (o) => {
12
- const t = {
13
- ...i,
14
- working: i.working || !1,
11
+ (a) => {
12
+ const s = {
13
+ ...t,
14
+ working: t.working || !1,
15
15
  scope: e.projectName ? "project" : "studio",
16
16
  visibility: "private",
17
- position: o.length + 1,
17
+ position: a.length + 1,
18
18
  // Add to the end of the list
19
- owner: p,
19
+ owner: o,
20
20
  accessLevel: 30
21
21
  };
22
- if (i.working) {
23
- const s = o.findIndex((c) => c.working === !0);
24
- if (s !== -1) {
25
- const c = o[s].id;
26
- o[s] = { ...t, id: c };
22
+ if (t.working) {
23
+ const c = a.findIndex((y) => y.working === !0);
24
+ if (c !== -1) {
25
+ const y = a[c].id;
26
+ a[c] = { ...s, id: y };
27
27
  } else
28
- o.push(t);
28
+ a.push(s);
29
29
  } else
30
- o.push(t);
31
- o.sort((s, c) => s.position !== c.position ? s.position - c.position : s.label.localeCompare(c.label));
30
+ a.push(s);
31
+ a.sort((c, y) => c.position !== y.position ? c.position - y.position : c.label.localeCompare(y.label));
32
32
  }
33
33
  )
34
34
  );
35
- let l;
36
- i.working && (l = n(
37
- u.util.updateQueryData(
35
+ let i;
36
+ t.working && (i = n(
37
+ l.util.updateQueryData(
38
38
  "getWorkingView",
39
39
  { viewType: e.viewType, projectName: e.projectName },
40
- (o) => {
41
- const t = o?.id, s = {
42
- ...i,
40
+ (a) => {
41
+ const s = a?.id, c = {
42
+ ...t,
43
43
  working: !0,
44
44
  scope: e.projectName ? "project" : "studio",
45
45
  visibility: "private",
46
- owner: p,
47
- ...t && { id: t }
46
+ owner: o,
47
+ ...s && { id: s }
48
48
  // Keep existing ID if it exists
49
49
  };
50
- Object.assign(o, s);
50
+ Object.assign(a, c);
51
51
  }
52
52
  )
53
53
  ));
54
- let w;
55
- if (i.label === "__base__") {
56
- const o = {
57
- id: m(),
58
- ...i,
54
+ let p;
55
+ if (t.label === "__base__") {
56
+ const a = {
57
+ id: f(),
58
+ ...t,
59
59
  working: !1,
60
60
  scope: e.projectName ? "project" : "studio",
61
61
  visibility: "private",
62
- owner: p,
62
+ owner: o,
63
63
  accessLevel: 30,
64
64
  position: 0
65
65
  };
66
- w = n(
67
- u.util.updateQueryData(
66
+ p = n(
67
+ l.util.updateQueryData(
68
68
  "getBaseView",
69
69
  { viewType: e.viewType, projectName: e.projectName },
70
- (t) => {
71
- t && Object.assign(t, o);
70
+ (s) => {
71
+ s && Object.assign(s, a);
72
72
  }
73
73
  )
74
- ), w?.patches?.length || n(
75
- u.util.upsertQueryData(
74
+ ), p?.patches?.length || n(
75
+ l.util.upsertQueryData(
76
76
  "getBaseView",
77
77
  { viewType: e.viewType, projectName: e.projectName },
78
- o
78
+ a
79
79
  )
80
80
  );
81
81
  }
82
82
  try {
83
- await a;
83
+ await u;
84
84
  } catch {
85
- v.undo(), l && l.undo(), w && w.undo();
85
+ d.undo(), i && i.undo(), p && p.undo();
86
86
  }
87
87
  },
88
88
  transformErrorResponse: (e) => e.data?.detail,
89
89
  // updates the view list cache for a specific view type and project
90
- invalidatesTags: (e, n, { viewType: a, projectName: r, payload: i }) => [
91
- { type: "view", id: i.id },
92
- y(a, r)
90
+ invalidatesTags: (e, n, { viewType: u, projectName: r, payload: t }) => [
91
+ { type: "view", id: t.id },
92
+ v(u, r)
93
93
  ]
94
94
  },
95
95
  updateView: {
96
+ onQueryStarted: async (e, { dispatch: n, queryFulfilled: u }) => {
97
+ const { viewId: r, payload: t, viewType: w, projectName: o } = e, d = [];
98
+ d.push(
99
+ n(
100
+ l.util.updateQueryData("listViews", { viewType: w, projectName: o }, (i) => {
101
+ const p = i.find((a) => a.id === r);
102
+ p && Object.assign(p, t);
103
+ })
104
+ )
105
+ ), d.push(
106
+ n(
107
+ l.util.updateQueryData(
108
+ "getWorkingView",
109
+ { viewType: w, projectName: o },
110
+ (i) => {
111
+ i?.id === r && Object.assign(i, t);
112
+ }
113
+ )
114
+ )
115
+ ), d.push(
116
+ n(
117
+ l.util.updateQueryData(
118
+ "getDefaultView",
119
+ { viewType: w, projectName: o },
120
+ (i) => {
121
+ i?.id === r && Object.assign(i, t);
122
+ }
123
+ )
124
+ )
125
+ ), d.push(
126
+ n(
127
+ l.util.updateQueryData(
128
+ "getView",
129
+ { viewType: w, viewId: r, projectName: o },
130
+ (i) => {
131
+ i && Object.assign(i, t);
132
+ }
133
+ )
134
+ )
135
+ );
136
+ try {
137
+ await u;
138
+ } catch {
139
+ d.forEach((p) => p.undo());
140
+ }
141
+ },
96
142
  transformErrorResponse: (e) => e.data?.detail,
97
- invalidatesTags: (e, n, { viewType: a, projectName: r, viewId: i }) => [
98
- { type: "view", id: i },
99
- y(a, r)
100
- ]
143
+ invalidatesTags: (e, n, { viewType: u, projectName: r, viewId: t, payload: w }) => {
144
+ const o = [{ type: "view", id: t }], d = [
145
+ "label",
146
+ "owner",
147
+ "position",
148
+ "visibility",
149
+ "scope",
150
+ "accessLevel",
151
+ "working"
152
+ ];
153
+ return Object.keys(w).some((p) => d.includes(p)) && o.push(v(u, r)), o;
154
+ }
101
155
  },
102
156
  deleteView: {
103
- onQueryStarted: async (e, { dispatch: n, queryFulfilled: a, getState: r }) => {
104
- const { viewId: i, projectName: d, viewType: p } = e, v = r(), l = [];
105
- l.push(
157
+ onQueryStarted: async (e, { dispatch: n, queryFulfilled: u, getState: r }) => {
158
+ const { viewId: t, projectName: w, viewType: o } = e, d = r(), i = [];
159
+ i.push(
106
160
  n(
107
- u.util.updateQueryData("listViews", { viewType: p, projectName: d }, (t) => t.filter((s) => s.id !== i))
161
+ l.util.updateQueryData("listViews", { viewType: o, projectName: w }, (s) => s.filter((c) => c.id !== t))
108
162
  )
109
163
  );
110
- const w = [
111
- { projectName: d },
164
+ const p = [
165
+ { projectName: w },
112
166
  { projectName: void 0 }
113
167
  // studio level
114
- ], o = ["getBaseView", "getDefaultView"];
115
- for (const t of w)
116
- for (const s of o) {
117
- const c = u.endpoints[s].select({
118
- viewType: p,
119
- projectName: t.projectName
120
- })(v);
121
- c?.isSuccess && c.data?.id === i && l.push(
168
+ ], a = ["getBaseView", "getDefaultView"];
169
+ for (const s of p)
170
+ for (const c of a) {
171
+ const y = l.endpoints[c].select({
172
+ viewType: o,
173
+ projectName: s.projectName
174
+ })(d);
175
+ y?.isSuccess && y.data?.id === t && i.push(
122
176
  n(
123
- u.util.updateQueryData(
124
- s,
125
- { viewType: p, projectName: t.projectName },
177
+ l.util.updateQueryData(
178
+ c,
179
+ { viewType: o, projectName: s.projectName },
126
180
  () => null
127
181
  )
128
182
  )
129
183
  );
130
184
  }
131
185
  try {
132
- await a;
133
- } catch (t) {
134
- l.forEach((s) => s.undo()), console.error("Failed to delete view:", t);
186
+ await u;
187
+ } catch (s) {
188
+ i.forEach((c) => c.undo()), console.error("Failed to delete view:", s);
135
189
  }
136
190
  },
137
191
  transformErrorResponse: (e) => e.data?.detail,
138
192
  // updates the view list cache for a specific view type and project
139
- invalidatesTags: (e, n, { viewType: a, projectName: r, viewId: i }) => [
140
- { type: "view", id: i },
141
- y(a, r),
142
- y(a, void 0)
193
+ invalidatesTags: (e, n, { viewType: u, projectName: r, viewId: t }) => [
194
+ { type: "view", id: t },
195
+ v(u, r),
196
+ v(u, void 0)
143
197
  ]
144
198
  },
145
199
  setDefaultView: {
146
- onQueryStarted: async (e, { dispatch: n, queryFulfilled: a, getState: r }) => {
147
- const { setDefaultViewRequestModel: i, projectName: d, viewType: p } = e, { viewId: v } = i, l = r(), w = u.endpoints.getDefaultView.select({
148
- viewType: p,
149
- projectName: d
150
- })(l);
151
- if (w?.isSuccess && w.data?.id) {
152
- const o = n(
153
- u.util.updateQueryData(
200
+ onQueryStarted: async (e, { dispatch: n, queryFulfilled: u, getState: r }) => {
201
+ const { setDefaultViewRequestModel: t, projectName: w, viewType: o } = e, { viewId: d } = t, i = r(), p = l.endpoints.getDefaultView.select({
202
+ viewType: o,
203
+ projectName: w
204
+ })(i);
205
+ if (p?.isSuccess && p.data?.id) {
206
+ const a = n(
207
+ l.util.updateQueryData(
154
208
  "getDefaultView",
155
- { viewType: p, projectName: d },
156
- (t) => {
157
- if (t) {
158
- const c = u.endpoints.listViews.select({
159
- viewType: p,
160
- projectName: d
161
- })(l)?.data?.find((f) => f.id === v);
162
- c ? Object.assign(t, c) : t.id = v;
209
+ { viewType: o, projectName: w },
210
+ (s) => {
211
+ if (s) {
212
+ const y = l.endpoints.listViews.select({
213
+ viewType: o,
214
+ projectName: w
215
+ })(i)?.data?.find((g) => g.id === d);
216
+ y ? Object.assign(s, y) : s.id = d;
163
217
  }
164
218
  }
165
219
  )
166
220
  );
167
221
  try {
168
- await a;
169
- } catch (t) {
170
- o.undo(), console.error("Failed to set default view:", t);
222
+ await u;
223
+ } catch (s) {
224
+ a.undo(), console.error("Failed to set default view:", s);
171
225
  }
172
226
  } else
173
227
  console.warn(
@@ -176,22 +230,22 @@ const V = u.enhanceEndpoints({
176
230
  },
177
231
  transformErrorResponse: (e) => e.data?.detail,
178
232
  // updates the default view cache for a specific view type and project
179
- invalidatesTags: (e, n, { viewType: a, projectName: r, setDefaultViewRequestModel: i }) => [
180
- { type: "view", id: i.viewId },
181
- y(a, r)
233
+ invalidatesTags: (e, n, { viewType: u, projectName: r, setDefaultViewRequestModel: t }) => [
234
+ { type: "view", id: t.viewId },
235
+ v(u, r)
182
236
  ]
183
237
  }
184
238
  }
185
239
  }), {
186
- useCreateViewMutation: N,
240
+ useCreateViewMutation: h,
187
241
  useUpdateViewMutation: D,
188
- useDeleteViewMutation: h,
189
- useSetDefaultViewMutation: T
242
+ useDeleteViewMutation: N,
243
+ useSetDefaultViewMutation: k
190
244
  } = V;
191
245
  export {
192
- N as useCreateViewMutation,
193
- h as useDeleteViewMutation,
194
- T as useSetDefaultViewMutation,
246
+ h as useCreateViewMutation,
247
+ N as useDeleteViewMutation,
248
+ k as useSetDefaultViewMutation,
195
249
  D as useUpdateViewMutation,
196
250
  V as viewsQueries
197
251
  };
@@ -1 +1 @@
1
- {"version":3,"file":"updateViews.es.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import { ViewListItemModel } from '@shared/api/generated'\nimport { getScopeTag, getViewsApi } from './getViews'\nimport { v4 as uuidv4 } from 'uuid'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { payload } = arg\n const state = getState()\n // @ts-expect-error - user is not typed in the state\n const user = state.user?.name\n\n // Optimistically update the view list\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'listViews',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n const newView: ViewListItemModel = {\n ...payload,\n working: payload.working || false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n position: draft.length + 1, // Add to the end of the list\n owner: user,\n accessLevel: 30,\n }\n if (payload.working) {\n // For working views, find and replace the existing working view\n const existingWorkingIndex = draft.findIndex((view) => view.working === true)\n if (existingWorkingIndex !== -1) {\n // Keep the existing ID but update all other properties\n const existingId = draft[existingWorkingIndex].id\n draft[existingWorkingIndex] = { ...newView, id: existingId }\n } else {\n // No existing working view, add the new one\n draft.push(newView)\n }\n } else {\n // For non-working views, add to the list as usual\n draft.push(newView)\n }\n\n // finally sort the view by position and then by label\n draft.sort((a, b) => {\n if (a.position !== b.position) {\n return a.position - b.position\n }\n return a.label.localeCompare(b.label)\n })\n },\n ),\n )\n\n // Also update the getWorkingView cache if this is a working view\n let workingViewPatch\n if (payload.working) {\n workingViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n // Preserve the existing ID if there's already a working view\n const existingId = draft?.id\n const updatedWorkingView = {\n ...payload,\n working: true,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n ...(existingId && { id: existingId }), // Keep existing ID if it exists\n }\n // Update the working view cache with the new view data\n Object.assign(draft, updatedWorkingView)\n },\n ),\n )\n }\n\n let baseViewPatch\n\n if (payload.label === '__base__') {\n const newBaseView = {\n id: uuidv4(),\n ...payload,\n working: false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n accessLevel: 30,\n position: 0,\n }\n\n baseViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, newBaseView)\n }\n },\n ),\n )\n\n // If the cache wasn't updated (because it didn't exist), upsert it\n if (!baseViewPatch?.patches?.length) {\n dispatch(\n getViewsApi.util.upsertQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n newBaseView as any,\n ),\n )\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n patch.undo()\n if (workingViewPatch) workingViewPatch.undo()\n if (baseViewPatch) baseViewPatch.undo()\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, payload }) => [\n { type: 'view', id: payload.id },\n getScopeTag(viewType, projectName),\n ],\n },\n updateView: {\n transformErrorResponse: (error: any) => error.data?.detail,\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n deleteView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { viewId, projectName, viewType } = arg\n const state = getState()\n\n // Optimistically remove the view from the list\n const patches: any[] = []\n\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n return draft.filter((view) => view.id !== viewId)\n }),\n ),\n )\n\n // Check both project and studio level for base and default views\n const scopesToCheck = [\n { projectName },\n { projectName: undefined }, // studio level\n ]\n const queriesToCheck = ['getBaseView', 'getDefaultView'] as const\n\n for (const scope of scopesToCheck) {\n for (const queryName of queriesToCheck) {\n const currentView = getViewsApi.endpoints[queryName].select({\n viewType,\n projectName: scope.projectName,\n })(state)\n\n if (currentView?.isSuccess && currentView.data?.id === viewId) {\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n queryName,\n { viewType, projectName: scope.projectName },\n () => null as any,\n ),\n ),\n )\n }\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, roll back all optimistic updates\n patches.forEach((patch) => patch.undo())\n console.error('Failed to delete view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n getScopeTag(viewType, undefined),\n ],\n },\n setDefaultView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { setDefaultViewRequestModel, projectName, viewType } = arg\n const { viewId } = setDefaultViewRequestModel\n const state = getState()\n // get current state of default view\n const currentDefaultView = getViewsApi.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n\n // check if there is even a cache for the default view\n if (currentDefaultView?.isSuccess && currentDefaultView.data?.id) {\n // Optimistically update the default view\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft) {\n // Try to find the view in the listViews cache\n const listViewData = getViewsApi.endpoints.listViews.select({\n viewType,\n projectName,\n })(state)\n const view = listViewData?.data?.find((v) => v.id === viewId)\n\n if (view) {\n // If the view is found in the listViews cache, update the getDefaultView cache with the full view data\n Object.assign(draft, view)\n } else {\n // If the view is not found, only update the ID\n draft.id = viewId\n }\n }\n },\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic update\n patch.undo()\n console.error('Failed to set default view:', error)\n }\n } else {\n console.warn(\n 'No current default view found, skipping optimistic update and invalidating default view cache',\n )\n // If there is no current default view, we skip the optimistic update\n // it will be handled by the invalidation below\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the default view cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, setDefaultViewRequestModel }) => [\n { type: 'view', id: setDefaultViewRequestModel.viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n },\n})\n\nexport const {\n useCreateViewMutation,\n useUpdateViewMutation,\n useDeleteViewMutation,\n useSetDefaultViewMutation,\n} = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":["updateViewsApi","getViewsApi","arg","dispatch","queryFulfilled","getState","payload","user","patch","draft","newView","existingWorkingIndex","view","existingId","a","b","workingViewPatch","updatedWorkingView","baseViewPatch","newBaseView","uuidv4","error","_r","_e","viewType","projectName","getScopeTag","viewId","state","patches","scopesToCheck","queriesToCheck","scope","queryName","currentView","setDefaultViewRequestModel","currentDefaultView","v","useCreateViewMutation","useUpdateViewMutation","useDeleteViewMutation","useSetDefaultViewMutation"],"mappings":"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"}
1
+ {"version":3,"file":"updateViews.es.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import { ViewListItemModel } from '@shared/api/generated'\nimport { getScopeTag, getViewsApi } from './getViews'\nimport { v4 as uuidv4 } from 'uuid'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { payload } = arg\n const state = getState()\n // @ts-expect-error - user is not typed in the state\n const user = state.user?.name\n\n // Optimistically update the view list\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'listViews',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n const newView: ViewListItemModel = {\n ...payload,\n working: payload.working || false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n position: draft.length + 1, // Add to the end of the list\n owner: user,\n accessLevel: 30,\n }\n if (payload.working) {\n // For working views, find and replace the existing working view\n const existingWorkingIndex = draft.findIndex((view) => view.working === true)\n if (existingWorkingIndex !== -1) {\n // Keep the existing ID but update all other properties\n const existingId = draft[existingWorkingIndex].id\n draft[existingWorkingIndex] = { ...newView, id: existingId }\n } else {\n // No existing working view, add the new one\n draft.push(newView)\n }\n } else {\n // For non-working views, add to the list as usual\n draft.push(newView)\n }\n\n // finally sort the view by position and then by label\n draft.sort((a, b) => {\n if (a.position !== b.position) {\n return a.position - b.position\n }\n return a.label.localeCompare(b.label)\n })\n },\n ),\n )\n\n // Also update the getWorkingView cache if this is a working view\n let workingViewPatch\n if (payload.working) {\n workingViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n // Preserve the existing ID if there's already a working view\n const existingId = draft?.id\n const updatedWorkingView = {\n ...payload,\n working: true,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n ...(existingId && { id: existingId }), // Keep existing ID if it exists\n }\n // Update the working view cache with the new view data\n Object.assign(draft, updatedWorkingView)\n },\n ),\n )\n }\n\n let baseViewPatch\n\n if (payload.label === '__base__') {\n const newBaseView = {\n id: uuidv4(),\n ...payload,\n working: false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n accessLevel: 30,\n position: 0,\n }\n\n baseViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, newBaseView)\n }\n },\n ),\n )\n\n // If the cache wasn't updated (because it didn't exist), upsert it\n if (!baseViewPatch?.patches?.length) {\n dispatch(\n getViewsApi.util.upsertQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n newBaseView as any,\n ),\n )\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n patch.undo()\n if (workingViewPatch) workingViewPatch.undo()\n if (baseViewPatch) baseViewPatch.undo()\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, payload }) => [\n { type: 'view', id: payload.id },\n getScopeTag(viewType, projectName),\n ],\n },\n updateView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled }) => {\n const { viewId, payload, viewType, projectName } = arg\n\n const patches: any[] = []\n\n // 1. Update listViews\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n const view = draft.find((v) => v.id === viewId)\n if (view) {\n Object.assign(view, payload)\n }\n }),\n ),\n )\n\n // 2. Update getWorkingView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType, projectName },\n (draft) => {\n if (draft?.id === viewId) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n // 3. Update getDefaultView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft?.id === viewId) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n // 4. Update getView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getView',\n { viewType, viewId, projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n patches.forEach((patch) => patch.undo())\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n invalidatesTags: (_r, _e, { viewType, projectName, viewId, payload }) => {\n const tags: any[] = [{ type: 'view', id: viewId }]\n\n // Only invalidate the full list if metadata fields (like label) have changed\n const metadataFields = [\n 'label',\n 'owner',\n 'position',\n 'visibility',\n 'scope',\n 'accessLevel',\n 'working',\n ]\n const hasMetadataChanges = Object.keys(payload).some((key) => metadataFields.includes(key))\n\n if (hasMetadataChanges) {\n tags.push(getScopeTag(viewType, projectName))\n }\n\n return tags\n },\n },\n deleteView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { viewId, projectName, viewType } = arg\n const state = getState()\n\n // Optimistically remove the view from the list\n const patches: any[] = []\n\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n return draft.filter((view) => view.id !== viewId)\n }),\n ),\n )\n\n // Check both project and studio level for base and default views\n const scopesToCheck = [\n { projectName },\n { projectName: undefined }, // studio level\n ]\n const queriesToCheck = ['getBaseView', 'getDefaultView'] as const\n\n for (const scope of scopesToCheck) {\n for (const queryName of queriesToCheck) {\n const currentView = getViewsApi.endpoints[queryName].select({\n viewType,\n projectName: scope.projectName,\n })(state)\n\n if (currentView?.isSuccess && currentView.data?.id === viewId) {\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n queryName,\n { viewType, projectName: scope.projectName },\n () => null as any,\n ),\n ),\n )\n }\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, roll back all optimistic updates\n patches.forEach((patch) => patch.undo())\n console.error('Failed to delete view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n getScopeTag(viewType, undefined),\n ],\n },\n setDefaultView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { setDefaultViewRequestModel, projectName, viewType } = arg\n const { viewId } = setDefaultViewRequestModel\n const state = getState()\n // get current state of default view\n const currentDefaultView = getViewsApi.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n\n // check if there is even a cache for the default view\n if (currentDefaultView?.isSuccess && currentDefaultView.data?.id) {\n // Optimistically update the default view\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft) {\n // Try to find the view in the listViews cache\n const listViewData = getViewsApi.endpoints.listViews.select({\n viewType,\n projectName,\n })(state)\n const view = listViewData?.data?.find((v) => v.id === viewId)\n\n if (view) {\n // If the view is found in the listViews cache, update the getDefaultView cache with the full view data\n Object.assign(draft, view)\n } else {\n // If the view is not found, only update the ID\n draft.id = viewId\n }\n }\n },\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic update\n patch.undo()\n console.error('Failed to set default view:', error)\n }\n } else {\n console.warn(\n 'No current default view found, skipping optimistic update and invalidating default view cache',\n )\n // If there is no current default view, we skip the optimistic update\n // it will be handled by the invalidation below\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the default view cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, setDefaultViewRequestModel }) => [\n { type: 'view', id: setDefaultViewRequestModel.viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n },\n})\n\nexport const {\n useCreateViewMutation,\n useUpdateViewMutation,\n useDeleteViewMutation,\n useSetDefaultViewMutation,\n} = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":["updateViewsApi","getViewsApi","arg","dispatch","queryFulfilled","getState","payload","user","patch","draft","newView","existingWorkingIndex","view","existingId","a","b","workingViewPatch","updatedWorkingView","baseViewPatch","newBaseView","uuidv4","error","_r","_e","viewType","projectName","getScopeTag","viewId","patches","v","tags","metadataFields","key","state","scopesToCheck","queriesToCheck","scope","queryName","currentView","setDefaultViewRequestModel","currentDefaultView","useCreateViewMutation","useUpdateViewMutation","useDeleteViewMutation","useSetDefaultViewMutation"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const re=require("../../../../../_virtual/jsx-runtime.cjs.js"),u=require("react");require("react-dom");require("../Views.styled.cjs.js");require("clsx");const ie=require("../ViewsMenuContainer/ViewsMenuContainer.cjs.js"),te=require("../../../hooks/useLocalStorage.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");const se=require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");const c=require("../../../api/queries/views/getViews.cjs.js"),ue=require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");require("lodash");require("react-toastify");require("../../../context/DetailsPanelContext.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");const ne=require("../../../context/PowerpackContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");const oe=require("../../../context/GlobalContext.cjs.js");require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../../../context/UriContext.cjs.js");require("react-redux");require("custom-protocol-check");require("../../ProjectTreeTable/components/GroupSettingsFallback.cjs.js");require("@ynput/ayon-react-components");require("../ViewsMenu/ViewsMenu.cjs.js");require("uuid");const G=require("../hooks/useBuildViewMenuItems.cjs.js"),qe=require("../hooks/useBaseViewMutations.cjs.js"),ae=require("../hooks/useSaveViewFromCurrent.cjs.js"),ce=require("../hooks/useSelectedView.cjs.js"),we=require("../hooks/useViewsMutations.cjs.js");require("../../../util/pubsub.cjs.js");const de=require("../hooks/useViewSettingsChanged.cjs.js"),O=u.createContext(null),Ve=({children:n,viewType:e,projectName:r,dispatch:w,debug:S})=>{let{powerLicense:d}=ne.usePowerpack();S?.powerLicense!==void 0&&(console.warn("Using debug power license:",S.powerLicense),d=S.powerLicense);const{user:h}=oe.useGlobalContext(),[Q,v]=u.useState(!1),[o,p]=u.useState(null),R="viewsMenuCollapsed",[C,D]=te.useLocalStorage(R,{}),F=i=>{const g=i.visibility==="private"?"myViews":"sharedViews";if(C[g]){const E={...C};E[g]=!1,D(E)}},{data:U}=se.useGetShareOptionsQuery({projectName:r},{skip:!d||!o}),[s,q,k]=ce.useSelectedView({viewType:e,projectName:r}),[_,V]=de.useViewSettingsChanged({viewType:e}),{currentData:I=[],isLoading:m}=c.useListViewsQuery({projectName:r,viewType:e},{skip:!e}),a=u.useMemo(()=>I.filter(i=>i.label!==G.BASE_VIEW_ID),[I]),{onCreateView:y,onDeleteView:K,onUpdateView:l,onResetWorkingView:L}=we.useViewsMutations({viewType:e,projectName:r,viewsList:a,onCreate:F}),{currentData:t}=c.useGetWorkingViewQuery({projectName:r,viewType:e},{skip:!e}),{currentData:A}=c.useGetBaseViewQuery({projectName:r,viewType:e},{skip:!e}),{currentData:z}=c.useGetBaseViewQuery({projectName:void 0,viewType:e},{skip:!e}),f=t?.settings,M=!s||s.id===ie.WORKING_VIEW_ID?f:s?.settings,B=s?.id===t?.id,W=_&&B&&k&&k!==t?.id?k:void 0,{currentData:x,isFetching:H}=c.useGetViewQuery({viewId:o,projectName:P(o,a)?void 0:r,viewType:e},{skip:typeof o!="string"||!d}),J=u.useMemo(()=>o===x?.id?x:void 0,[o,x]),{onSaveViewFromCurrent:X}=ae.useSaveViewFromCurrent({viewType:e,projectName:r,viewsList:a,sourceSettings:M,onUpdateView:l}),{onCreateBaseView:Y,onUpdateBaseView:Z,onDeleteBaseView:$,onLoadBaseView:j}=qe.useBaseViewMutations({viewType:e,projectName:r,workingSettings:f,workingView:t,dispatch:w}),N=u.useCallback(async(i,{selectView:g}={})=>{if(!t?.id){console.error("No working view to update");return}await l(t.id,i,!r),g&&q(t.id)},[l,t]),b=u.useCallback(async()=>{try{await L({existingWorkingViewId:t?.id,selectedViewId:s?.id,setSelectedView:q,setSettingsChanged:V,notify:!0})}catch(i){console.error("Failed to reset view:",i)}},[t,L,s,q,V]),T=G.default({viewsList:a,workingView:t,viewType:e,projectName:r,currentUser:h,useWorkingView:!d,editingViewId:W,selectedId:s?.id,collapsed:C,setCollapsed:D,onResetWorkingView:b,onSelect:i=>{q(i),V(!1),v(!1)},onEdit:i=>p(i),onSave:async i=>X(i)}),ee={viewType:e,projectName:r,isMenuOpen:Q,editingView:o,currentUser:h,selectedView:s,viewSettings:M,editingViewData:J,isLoadingEditingViewData:H,viewsList:a,workingSettings:f,workingView:t,isViewWorking:B,onUpdateWorkingView:N,projectBaseView:A,studioBaseView:z,onCreateBaseView:Y,onUpdateBaseView:Z,onDeleteBaseView:$,onLoadBaseView:j,editingViewId:W,viewMenuItems:T,isLoadingViews:m,shareOptions:U,setIsMenuOpen:v,setEditingView:p,setSelectedView:q,onSettingsChanged:V,onCreateView:y,onUpdateView:l,onDeleteView:K,resetWorkingView:b,api:ue.viewsQueries,dispatch:w};return re.jsxRuntimeExports.jsx(O.Provider,{value:ee,children:n})},le=()=>{const n=u.useContext(O);if(!n)throw new Error("useViewsContext must be used within a ViewsProvider");return n},P=(n,e)=>n?e.find(w=>w.id===n)?.scope==="studio":!0;exports.ViewsProvider=Ve;exports.isViewStudioScope=P;exports.useViewsContext=le;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const re=require("../../../../../_virtual/jsx-runtime.cjs.js"),u=require("react");require("react-dom");require("../Views.styled.cjs.js");require("clsx");const ie=require("../ViewsMenuContainer/ViewsMenuContainer.cjs.js"),se=require("../../../hooks/useLocalStorage.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");const te=require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");const c=require("../../../api/queries/views/getViews.cjs.js"),ue=require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");require("lodash");require("react-toastify");require("../../../context/DetailsPanelContext.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");const ne=require("../../../context/PowerpackContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");const oe=require("../../../context/GlobalContext.cjs.js");require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../../../context/UriContext.cjs.js");require("react-redux");require("custom-protocol-check");require("../../ProjectTreeTable/components/GroupSettingsFallback.cjs.js");require("@ynput/ayon-react-components");require("../ViewsMenu/ViewsMenu.cjs.js");require("uuid");const G=require("../hooks/useBuildViewMenuItems.cjs.js"),qe=require("../hooks/useBaseViewMutations.cjs.js"),ae=require("../hooks/useSaveViewFromCurrent.cjs.js"),ce=require("../hooks/useSelectedView.cjs.js"),de=require("../hooks/useViewsMutations.cjs.js");require("../../../util/pubsub.cjs.js");const we=require("../hooks/useViewSettingsChanged.cjs.js"),O=u.createContext(null),Ve=({children:n,viewType:e,projectName:i,dispatch:d,debug:S})=>{let{powerLicense:w}=ne.usePowerpack();S?.powerLicense!==void 0&&(console.warn("Using debug power license:",S.powerLicense),w=S.powerLicense);const{user:h}=oe.useGlobalContext(),[Q,p]=u.useState(!1),[o,D]=u.useState(null),R="viewsMenuCollapsed",[C,I]=se.useLocalStorage(R,{}),F=r=>{const g=r.visibility==="private"?"myViews":"sharedViews";if(C[g]){const E={...C};E[g]=!1,I(E)}},{data:U}=te.useGetShareOptionsQuery({projectName:i},{skip:!w||!o}),[t,q,k]=ce.useSelectedView({viewType:e,projectName:i}),[_,V]=we.useViewSettingsChanged({viewType:e}),{currentData:L=[],isLoading:y}=c.useListViewsQuery({projectName:i,viewType:e},{skip:!e}),a=u.useMemo(()=>L.filter(r=>r.label!==G.BASE_VIEW_ID&&!(i&&r.working&&r.scope==="studio")),[L]),{onCreateView:m,onDeleteView:K,onUpdateView:l,onResetWorkingView:M}=de.useViewsMutations({viewType:e,projectName:i,viewsList:a,onCreate:F}),{currentData:s}=c.useGetWorkingViewQuery({projectName:i,viewType:e},{skip:!e}),{currentData:A}=c.useGetBaseViewQuery({projectName:i,viewType:e},{skip:!e}),{currentData:z}=c.useGetBaseViewQuery({projectName:void 0,viewType:e},{skip:!e}),f=s?.settings,v=!t||t.id===ie.WORKING_VIEW_ID?f:t?.settings,B=t?.id===s?.id,W=_&&B&&k&&k!==s?.id?k:void 0,{currentData:x,isFetching:H}=c.useGetViewQuery({viewId:o,projectName:P(o,a)?void 0:i,viewType:e},{skip:typeof o!="string"||!w}),J=u.useMemo(()=>o===x?.id?x:void 0,[o,x]),{onSaveViewFromCurrent:X}=ae.useSaveViewFromCurrent({viewType:e,projectName:i,viewsList:a,sourceSettings:v,onUpdateView:l}),{onCreateBaseView:Y,onUpdateBaseView:Z,onDeleteBaseView:$,onLoadBaseView:j}=qe.useBaseViewMutations({viewType:e,projectName:i,workingSettings:f,workingView:s,dispatch:d}),N=u.useCallback(async(r,{selectView:g}={})=>{if(!s?.id){console.error("No working view to update");return}await l(s.id,r,!i),g&&q(s.id)},[l,s]),b=u.useCallback(async()=>{try{await M({existingWorkingViewId:s?.id,selectedViewId:t?.id,setSelectedView:q,setSettingsChanged:V,notify:!0})}catch(r){console.error("Failed to reset view:",r)}},[s,M,t,q,V]),T=G.default({viewsList:a,workingView:s,viewType:e,projectName:i,currentUser:h,useWorkingView:!w,editingViewId:W,selectedId:t?.id,collapsed:C,setCollapsed:I,onResetWorkingView:b,onSelect:r=>{q(r),V(!1),p(!1)},onEdit:r=>D(r),onSave:async r=>X(r)}),ee={viewType:e,projectName:i,isMenuOpen:Q,editingView:o,currentUser:h,selectedView:t,viewSettings:v,editingViewData:J,isLoadingEditingViewData:H,viewsList:a,workingSettings:f,workingView:s,isViewWorking:B,onUpdateWorkingView:N,projectBaseView:A,studioBaseView:z,onCreateBaseView:Y,onUpdateBaseView:Z,onDeleteBaseView:$,onLoadBaseView:j,editingViewId:W,viewMenuItems:T,isLoadingViews:y,shareOptions:U,setIsMenuOpen:p,setEditingView:D,setSelectedView:q,onSettingsChanged:V,onCreateView:m,onUpdateView:l,onDeleteView:K,resetWorkingView:b,api:ue.viewsQueries,dispatch:d};return re.jsxRuntimeExports.jsx(O.Provider,{value:ee,children:n})},le=()=>{const n=u.useContext(O);if(!n)throw new Error("useViewsContext must be used within a ViewsProvider");return n},P=(n,e)=>n?e.find(d=>d.id===n)?.scope==="studio":!0;exports.ViewsProvider=Ve;exports.isViewStudioScope=P;exports.useViewsContext=le;
2
2
  //# sourceMappingURL=ViewsContext.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewsContext.cjs.js","sources":["../../../../../../src/containers/Views/context/ViewsContext.tsx"],"sourcesContent":["import { createContext, useContext, FC, ReactNode, useState, useMemo, useCallback } from 'react'\nimport { ViewType, WORKING_VIEW_ID } from '../index'\nimport {\n GetDefaultViewApiResponse,\n useGetWorkingViewQuery,\n useGetViewQuery,\n useListViewsQuery,\n UserModel,\n ViewListItemModel,\n viewsQueries,\n useGetShareOptionsQuery,\n ShareOption,\n useGetBaseViewQuery,\n} from '@shared/api'\nimport useBuildViewMenuItems, { BASE_VIEW_ID } from '../hooks/useBuildViewMenuItems'\nimport { ViewMenuItem } from '../ViewsMenu/ViewsMenu'\nimport { useGlobalContext, usePowerpack } from '@shared/context'\nimport { useSelectedView } from '../hooks/useSelectedView'\nimport { UseViewMutations, useViewsMutations } from '../hooks/useViewsMutations'\nimport { useBaseViewMutations } from '../hooks/useBaseViewMutations'\nimport { useSaveViewFromCurrent } from '../hooks/useSaveViewFromCurrent'\nimport { useViewSettingsChanged } from '../hooks/useViewSettingsChanged'\nimport { useLocalStorage } from '@shared/hooks'\n\nexport type ViewData = GetDefaultViewApiResponse\nexport type ViewSettings = GetDefaultViewApiResponse['settings']\nexport type SelectedViewState = ViewData | undefined // id of view otherwise null with use working\nexport type EditingViewState = string | true | null // id of view being edited otherwise null\n\nexport type CollapsedViewState = Record<string, boolean>\n\nexport interface ViewsContextValue {\n // State\n viewType?: ViewType\n projectName?: string\n currentUser?: UserModel\n isMenuOpen: boolean\n editingView: EditingViewState\n selectedView: SelectedViewState\n\n // Views data\n viewsList: ViewListItemModel[]\n viewSettings: ViewSettings | undefined\n // Working view\n workingSettings: ViewSettings | undefined\n workingView: ViewListItemModel | undefined\n isViewWorking: boolean\n onUpdateWorkingView: (\n payload: Partial<ViewData>,\n options?: { selectView?: boolean },\n ) => Promise<void>\n // base views\n projectBaseView: ViewListItemModel | undefined\n studioBaseView: ViewListItemModel | undefined\n editingViewId: string | undefined\n viewMenuItems: ViewMenuItem[]\n editingViewData?: ViewData\n isLoadingEditingViewData: boolean\n isLoadingViews: boolean\n\n // Data\n shareOptions?: ShareOption[] // available users to share with (undefined means loading)\n\n // Actions\n setIsMenuOpen: (open: boolean) => void\n setEditingView: (editing: EditingViewState) => void\n setSelectedView: (viewId: string) => void\n onSettingsChanged: (changed: boolean) => void\n\n // Mutations\n onCreateView: UseViewMutations['onCreateView']\n onDeleteView: UseViewMutations['onDeleteView']\n onUpdateView: UseViewMutations['onUpdateView']\n\n // Base view mutations\n onCreateBaseView: (isStudioScope: boolean) => Promise<void>\n onUpdateBaseView: (baseViewId: string, isStudioScope: boolean) => Promise<void>\n onDeleteBaseView: (baseViewId: string, isStudioScope: boolean) => Promise<void>\n onLoadBaseView: (isStudioScope: boolean) => Promise<void>\n\n // Actions (shared)\n resetWorkingView: () => Promise<void>\n\n // api\n api: typeof viewsQueries\n dispatch: any // dispatch is used to dispatch api mutations in pp like the share one.\n}\n\nconst ViewsContext = createContext<ViewsContextValue | null>(null)\n\nexport interface ViewsProviderProps {\n children: ReactNode\n viewType?: string\n projectName?: string\n dispatch?: any\n debug?: {\n powerLicense?: boolean\n }\n}\n\nexport const ViewsProvider: FC<ViewsProviderProps> = ({\n children,\n viewType,\n projectName,\n dispatch,\n debug,\n}) => {\n let { powerLicense } = usePowerpack()\n if (debug?.powerLicense !== undefined) {\n console.warn('Using debug power license:', debug.powerLicense)\n powerLicense = debug.powerLicense\n }\n\n const { user: currentUser } = useGlobalContext()\n\n const [isMenuOpen, setIsMenuOpen] = useState(false)\n const [editingView, setEditingView] = useState<EditingViewState>(null)\n // Collapsed state persisted globally across all viewTypes and projects\n const stateKey = 'viewsMenuCollapsed'\n\n const [collapsedSections, setCollapsedSections] = useLocalStorage<CollapsedViewState>(\n stateKey,\n {},\n )\n\n // anything extra to do when a view is created successfully\n const handleOnViewCreated = (view: ViewData) => {\n const key = view.visibility === 'private' ? 'myViews' : 'sharedViews'\n // if the section is collapsed, expand it\n if (collapsedSections[key]) {\n const newCollapsedSections = { ...collapsedSections }\n newCollapsedSections[key] = false\n setCollapsedSections(newCollapsedSections)\n }\n }\n\n // when editing the view, get all users that can be shared to that view\n const { data: shareOptions } = useGetShareOptionsQuery(\n { projectName },\n { skip: !powerLicense || !editingView },\n )\n\n // setting of default views\n const [selectedView, setSelectedView, previousSelectedViewId] = useSelectedView({\n viewType: viewType as string,\n projectName: projectName,\n })\n\n const [viewSettingsChanged, setViewSettingsChanged] = useViewSettingsChanged({\n viewType: viewType as ViewType,\n })\n\n // Fetch views data and filter out base views\n const { currentData: viewsListRaw = [], isLoading: isLoadingViews } = useListViewsQuery(\n { projectName: projectName, viewType: viewType as string },\n { skip: !viewType },\n )\n\n // Filter out base views from the list\n const viewsList = useMemo(\n () => viewsListRaw.filter((view) => view.label !== BASE_VIEW_ID),\n [viewsListRaw],\n )\n\n const { onCreateView, onDeleteView, onUpdateView, onResetWorkingView } = useViewsMutations({\n viewType,\n projectName,\n viewsList,\n onCreate: handleOnViewCreated,\n })\n\n // always get your working view\n const { currentData: workingView } = useGetWorkingViewQuery(\n { projectName: projectName, viewType: viewType as string },\n { skip: !viewType },\n )\n\n // Fetch both project and studio base views\n const { currentData: projectBaseView } = useGetBaseViewQuery(\n { projectName: projectName, viewType: viewType as string },\n { skip: !viewType },\n )\n const { currentData: studioBaseView } = useGetBaseViewQuery(\n { projectName: undefined, viewType: viewType as string },\n { skip: !viewType },\n )\n\n const workingSettings = workingView?.settings\n\n // which settings to use for the view\n const viewSettings =\n !selectedView || selectedView.id === WORKING_VIEW_ID ? workingSettings : selectedView?.settings\n\n // is the working view selected?\n const isViewWorking = selectedView?.id === workingView?.id\n // were we just on a custom view and then edited it and ended up on the working view\n const editingViewId =\n viewSettingsChanged &&\n isViewWorking &&\n !!previousSelectedViewId &&\n previousSelectedViewId !== workingView?.id\n ? previousSelectedViewId\n : undefined\n\n // get data for the view we are editing\n const { currentData: editingViewDataData, isFetching: isLoadingEditingViewData } =\n useGetViewQuery(\n {\n viewId: editingView as string,\n projectName: isViewStudioScope(editingView as string, viewsList) ? undefined : projectName,\n viewType: viewType as string,\n },\n { skip: !(typeof editingView === 'string') || !powerLicense },\n )\n\n const editingViewData = useMemo(\n () => (editingView === editingViewDataData?.id ? editingViewDataData : undefined),\n [editingView, editingViewDataData],\n )\n\n const { onSaveViewFromCurrent } = useSaveViewFromCurrent({\n viewType: viewType,\n projectName,\n viewsList,\n sourceSettings: viewSettings,\n onUpdateView: onUpdateView,\n })\n\n // Base view mutations\n const { onCreateBaseView, onUpdateBaseView, onDeleteBaseView, onLoadBaseView } = useBaseViewMutations({\n viewType: viewType as string,\n projectName,\n workingSettings,\n workingView,\n dispatch,\n })\n\n const onUpdateWorkingView = useCallback(\n async (payload: Partial<ViewData>, { selectView }: { selectView?: boolean } = {}) => {\n if (!workingView?.id) {\n console.error('No working view to update')\n return\n }\n await onUpdateView(workingView.id, payload, !projectName)\n if (selectView) {\n setSelectedView(workingView.id)\n }\n },\n [onUpdateView, workingView],\n )\n\n // Reset working view to default (empty) settings\n const resetWorkingView = useCallback(async () => {\n try {\n await onResetWorkingView({\n existingWorkingViewId: workingView?.id,\n selectedViewId: selectedView?.id,\n setSelectedView,\n setSettingsChanged: setViewSettingsChanged,\n notify: true,\n })\n } catch (error) {\n console.error('Failed to reset view:', error)\n }\n }, [workingView, onResetWorkingView, selectedView, setSelectedView, setViewSettingsChanged])\n\n // build the menu items for the views\n const viewMenuItems = useBuildViewMenuItems({\n viewsList,\n workingView,\n viewType,\n projectName,\n currentUser,\n useWorkingView: !powerLicense,\n editingViewId,\n selectedId: selectedView?.id,\n collapsed: collapsedSections,\n setCollapsed: setCollapsedSections,\n onResetWorkingView: resetWorkingView,\n onSelect: (viewId) => {\n setSelectedView(viewId)\n // reset the settings changed state when switching views\n setViewSettingsChanged(false)\n // close the menu when selecting a view\n setIsMenuOpen(false)\n },\n onEdit: (viewId) => setEditingView(viewId),\n onSave: async (viewId) => onSaveViewFromCurrent(viewId),\n })\n\n const value: ViewsContextValue = {\n viewType,\n projectName,\n isMenuOpen,\n editingView,\n currentUser,\n selectedView,\n viewSettings,\n editingViewData,\n isLoadingEditingViewData,\n viewsList,\n // Working view\n workingSettings,\n workingView,\n isViewWorking,\n onUpdateWorkingView,\n // base views\n projectBaseView,\n studioBaseView,\n // base view mutations\n onCreateBaseView,\n onUpdateBaseView,\n onDeleteBaseView,\n onLoadBaseView,\n editingViewId,\n viewMenuItems,\n isLoadingViews,\n // data\n shareOptions,\n setIsMenuOpen,\n setEditingView,\n setSelectedView,\n onSettingsChanged: setViewSettingsChanged,\n // mutations\n onCreateView,\n onUpdateView,\n onDeleteView,\n // shared actions\n resetWorkingView,\n // api\n api: viewsQueries,\n dispatch,\n }\n\n return <ViewsContext.Provider value={value}>{children}</ViewsContext.Provider>\n}\n\nexport const useViewsContext = (): ViewsContextValue => {\n const context = useContext(ViewsContext)\n if (!context) {\n throw new Error('useViewsContext must be used within a ViewsProvider')\n }\n return context\n}\n\nexport const isViewStudioScope = (viewId: string | undefined, viewsList: ViewListItemModel[]) => {\n if (!viewId) return true\n const view = viewsList.find((v) => v.id === viewId)\n return view?.scope === 'studio'\n}\n"],"names":["ViewsContext","createContext","ViewsProvider","children","viewType","projectName","dispatch","debug","powerLicense","usePowerpack","currentUser","useGlobalContext","isMenuOpen","setIsMenuOpen","useState","editingView","setEditingView","stateKey","collapsedSections","setCollapsedSections","useLocalStorage","handleOnViewCreated","view","key","newCollapsedSections","shareOptions","useGetShareOptionsQuery","selectedView","setSelectedView","previousSelectedViewId","useSelectedView","viewSettingsChanged","setViewSettingsChanged","useViewSettingsChanged","viewsListRaw","isLoadingViews","useListViewsQuery","viewsList","useMemo","BASE_VIEW_ID","onCreateView","onDeleteView","onUpdateView","onResetWorkingView","useViewsMutations","workingView","useGetWorkingViewQuery","projectBaseView","useGetBaseViewQuery","studioBaseView","workingSettings","viewSettings","WORKING_VIEW_ID","isViewWorking","editingViewId","editingViewDataData","isLoadingEditingViewData","useGetViewQuery","isViewStudioScope","editingViewData","onSaveViewFromCurrent","useSaveViewFromCurrent","onCreateBaseView","onUpdateBaseView","onDeleteBaseView","onLoadBaseView","useBaseViewMutations","onUpdateWorkingView","useCallback","payload","selectView","resetWorkingView","error","viewMenuItems","useBuildViewMenuItems","viewId","value","viewsQueries","jsx","useViewsContext","context","useContext","v"],"mappings":"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"}
1
+ {"version":3,"file":"ViewsContext.cjs.js","sources":["../../../../../../src/containers/Views/context/ViewsContext.tsx"],"sourcesContent":["import { createContext, useContext, FC, ReactNode, useState, useMemo, useCallback } from 'react'\nimport { ViewType, WORKING_VIEW_ID } from '../index'\nimport {\n GetDefaultViewApiResponse,\n useGetWorkingViewQuery,\n useGetViewQuery,\n useListViewsQuery,\n UserModel,\n ViewListItemModel,\n viewsQueries,\n useGetShareOptionsQuery,\n ShareOption,\n useGetBaseViewQuery,\n} from '@shared/api'\nimport useBuildViewMenuItems, { BASE_VIEW_ID } from '../hooks/useBuildViewMenuItems'\nimport { ViewMenuItem } from '../ViewsMenu/ViewsMenu'\nimport { useGlobalContext, usePowerpack } from '@shared/context'\nimport { useSelectedView } from '../hooks/useSelectedView'\nimport { UseViewMutations, useViewsMutations } from '../hooks/useViewsMutations'\nimport { useBaseViewMutations } from '../hooks/useBaseViewMutations'\nimport { useSaveViewFromCurrent } from '../hooks/useSaveViewFromCurrent'\nimport { useViewSettingsChanged } from '../hooks/useViewSettingsChanged'\nimport { useLocalStorage } from '@shared/hooks'\n\nexport type ViewData = GetDefaultViewApiResponse\nexport type ViewSettings = GetDefaultViewApiResponse['settings']\nexport type SelectedViewState = ViewData | undefined // id of view otherwise null with use working\nexport type EditingViewState = string | true | null // id of view being edited otherwise null\n\nexport type CollapsedViewState = Record<string, boolean>\n\nexport interface ViewsContextValue {\n // State\n viewType?: ViewType\n projectName?: string\n currentUser?: UserModel\n isMenuOpen: boolean\n editingView: EditingViewState\n selectedView: SelectedViewState\n\n // Views data\n viewsList: ViewListItemModel[]\n viewSettings: ViewSettings | undefined\n // Working view\n workingSettings: ViewSettings | undefined\n workingView: ViewListItemModel | undefined\n isViewWorking: boolean\n onUpdateWorkingView: (\n payload: Partial<ViewData>,\n options?: { selectView?: boolean },\n ) => Promise<void>\n // base views\n projectBaseView: ViewListItemModel | undefined\n studioBaseView: ViewListItemModel | undefined\n editingViewId: string | undefined\n viewMenuItems: ViewMenuItem[]\n editingViewData?: ViewData\n isLoadingEditingViewData: boolean\n isLoadingViews: boolean\n\n // Data\n shareOptions?: ShareOption[] // available users to share with (undefined means loading)\n\n // Actions\n setIsMenuOpen: (open: boolean) => void\n setEditingView: (editing: EditingViewState) => void\n setSelectedView: (viewId: string) => void\n onSettingsChanged: (changed: boolean) => void\n\n // Mutations\n onCreateView: UseViewMutations['onCreateView']\n onDeleteView: UseViewMutations['onDeleteView']\n onUpdateView: UseViewMutations['onUpdateView']\n\n // Base view mutations\n onCreateBaseView: (isStudioScope: boolean) => Promise<void>\n onUpdateBaseView: (baseViewId: string, isStudioScope: boolean) => Promise<void>\n onDeleteBaseView: (baseViewId: string, isStudioScope: boolean) => Promise<void>\n onLoadBaseView: (isStudioScope: boolean) => Promise<void>\n\n // Actions (shared)\n resetWorkingView: () => Promise<void>\n\n // api\n api: typeof viewsQueries\n dispatch: any // dispatch is used to dispatch api mutations in pp like the share one.\n}\n\nconst ViewsContext = createContext<ViewsContextValue | null>(null)\n\nexport interface ViewsProviderProps {\n children: ReactNode\n viewType?: string\n projectName?: string\n dispatch?: any\n debug?: {\n powerLicense?: boolean\n }\n}\n\nexport const ViewsProvider: FC<ViewsProviderProps> = ({\n children,\n viewType,\n projectName,\n dispatch,\n debug,\n}) => {\n let { powerLicense } = usePowerpack()\n if (debug?.powerLicense !== undefined) {\n console.warn('Using debug power license:', debug.powerLicense)\n powerLicense = debug.powerLicense\n }\n\n const { user: currentUser } = useGlobalContext()\n\n const [isMenuOpen, setIsMenuOpen] = useState(false)\n const [editingView, setEditingView] = useState<EditingViewState>(null)\n // Collapsed state persisted globally across all viewTypes and projects\n const stateKey = 'viewsMenuCollapsed'\n\n const [collapsedSections, setCollapsedSections] = useLocalStorage<CollapsedViewState>(\n stateKey,\n {},\n )\n\n // anything extra to do when a view is created successfully\n const handleOnViewCreated = (view: ViewData) => {\n const key = view.visibility === 'private' ? 'myViews' : 'sharedViews'\n // if the section is collapsed, expand it\n if (collapsedSections[key]) {\n const newCollapsedSections = { ...collapsedSections }\n newCollapsedSections[key] = false\n setCollapsedSections(newCollapsedSections)\n }\n }\n\n // when editing the view, get all users that can be shared to that view\n const { data: shareOptions } = useGetShareOptionsQuery(\n { projectName },\n { skip: !powerLicense || !editingView },\n )\n\n // setting of default views\n const [selectedView, setSelectedView, previousSelectedViewId] = useSelectedView({\n viewType: viewType as string,\n projectName: projectName,\n })\n\n const [viewSettingsChanged, setViewSettingsChanged] = useViewSettingsChanged({\n viewType: viewType as ViewType,\n })\n\n // Fetch views data and filter out base views\n const { currentData: viewsListRaw = [], isLoading: isLoadingViews } = useListViewsQuery(\n { projectName: projectName, viewType: viewType as string },\n { skip: !viewType },\n )\n\n // Filter out base views from the list\n // Filter out studio working view if in project scope\n const viewsList = useMemo(\n () =>\n viewsListRaw.filter(\n (view) =>\n view.label !== BASE_VIEW_ID && !(projectName && view.working && view.scope === 'studio'),\n ),\n [viewsListRaw],\n )\n\n const { onCreateView, onDeleteView, onUpdateView, onResetWorkingView } = useViewsMutations({\n viewType,\n projectName,\n viewsList,\n onCreate: handleOnViewCreated,\n })\n\n // always get your working view\n const { currentData: workingView } = useGetWorkingViewQuery(\n { projectName: projectName, viewType: viewType as string },\n { skip: !viewType },\n )\n\n // Fetch both project and studio base views\n const { currentData: projectBaseView } = useGetBaseViewQuery(\n { projectName: projectName, viewType: viewType as string },\n { skip: !viewType },\n )\n const { currentData: studioBaseView } = useGetBaseViewQuery(\n { projectName: undefined, viewType: viewType as string },\n { skip: !viewType },\n )\n\n const workingSettings = workingView?.settings\n\n // which settings to use for the view\n const viewSettings =\n !selectedView || selectedView.id === WORKING_VIEW_ID ? workingSettings : selectedView?.settings\n\n // is the working view selected?\n const isViewWorking = selectedView?.id === workingView?.id\n // were we just on a custom view and then edited it and ended up on the working view\n const editingViewId =\n viewSettingsChanged &&\n isViewWorking &&\n !!previousSelectedViewId &&\n previousSelectedViewId !== workingView?.id\n ? previousSelectedViewId\n : undefined\n\n // get data for the view we are editing\n const { currentData: editingViewDataData, isFetching: isLoadingEditingViewData } =\n useGetViewQuery(\n {\n viewId: editingView as string,\n projectName: isViewStudioScope(editingView as string, viewsList) ? undefined : projectName,\n viewType: viewType as string,\n },\n { skip: !(typeof editingView === 'string') || !powerLicense },\n )\n\n const editingViewData = useMemo(\n () => (editingView === editingViewDataData?.id ? editingViewDataData : undefined),\n [editingView, editingViewDataData],\n )\n\n const { onSaveViewFromCurrent } = useSaveViewFromCurrent({\n viewType: viewType,\n projectName,\n viewsList,\n sourceSettings: viewSettings,\n onUpdateView: onUpdateView,\n })\n\n // Base view mutations\n const { onCreateBaseView, onUpdateBaseView, onDeleteBaseView, onLoadBaseView } =\n useBaseViewMutations({\n viewType: viewType as string,\n projectName,\n workingSettings,\n workingView,\n dispatch,\n })\n\n const onUpdateWorkingView = useCallback(\n async (payload: Partial<ViewData>, { selectView }: { selectView?: boolean } = {}) => {\n if (!workingView?.id) {\n console.error('No working view to update')\n return\n }\n await onUpdateView(workingView.id, payload, !projectName)\n if (selectView) {\n setSelectedView(workingView.id)\n }\n },\n [onUpdateView, workingView],\n )\n\n // Reset working view to default (empty) settings\n const resetWorkingView = useCallback(async () => {\n try {\n await onResetWorkingView({\n existingWorkingViewId: workingView?.id,\n selectedViewId: selectedView?.id,\n setSelectedView,\n setSettingsChanged: setViewSettingsChanged,\n notify: true,\n })\n } catch (error) {\n console.error('Failed to reset view:', error)\n }\n }, [workingView, onResetWorkingView, selectedView, setSelectedView, setViewSettingsChanged])\n\n // build the menu items for the views\n const viewMenuItems = useBuildViewMenuItems({\n viewsList,\n workingView,\n viewType,\n projectName,\n currentUser,\n useWorkingView: !powerLicense,\n editingViewId,\n selectedId: selectedView?.id,\n collapsed: collapsedSections,\n setCollapsed: setCollapsedSections,\n onResetWorkingView: resetWorkingView,\n onSelect: (viewId) => {\n setSelectedView(viewId)\n // reset the settings changed state when switching views\n setViewSettingsChanged(false)\n // close the menu when selecting a view\n setIsMenuOpen(false)\n },\n onEdit: (viewId) => setEditingView(viewId),\n onSave: async (viewId) => onSaveViewFromCurrent(viewId),\n })\n\n const value: ViewsContextValue = {\n viewType,\n projectName,\n isMenuOpen,\n editingView,\n currentUser,\n selectedView,\n viewSettings,\n editingViewData,\n isLoadingEditingViewData,\n viewsList,\n // Working view\n workingSettings,\n workingView,\n isViewWorking,\n onUpdateWorkingView,\n // base views\n projectBaseView,\n studioBaseView,\n // base view mutations\n onCreateBaseView,\n onUpdateBaseView,\n onDeleteBaseView,\n onLoadBaseView,\n editingViewId,\n viewMenuItems,\n isLoadingViews,\n // data\n shareOptions,\n setIsMenuOpen,\n setEditingView,\n setSelectedView,\n onSettingsChanged: setViewSettingsChanged,\n // mutations\n onCreateView,\n onUpdateView,\n onDeleteView,\n // shared actions\n resetWorkingView,\n // api\n api: viewsQueries,\n dispatch,\n }\n\n return <ViewsContext.Provider value={value}>{children}</ViewsContext.Provider>\n}\n\nexport const useViewsContext = (): ViewsContextValue => {\n const context = useContext(ViewsContext)\n if (!context) {\n throw new Error('useViewsContext must be used within a ViewsProvider')\n }\n return context\n}\n\nexport const isViewStudioScope = (viewId: string | undefined, viewsList: ViewListItemModel[]) => {\n if (!viewId) return true\n const view = viewsList.find((v) => v.id === viewId)\n return view?.scope === 'studio'\n}\n"],"names":["ViewsContext","createContext","ViewsProvider","children","viewType","projectName","dispatch","debug","powerLicense","usePowerpack","currentUser","useGlobalContext","isMenuOpen","setIsMenuOpen","useState","editingView","setEditingView","stateKey","collapsedSections","setCollapsedSections","useLocalStorage","handleOnViewCreated","view","key","newCollapsedSections","shareOptions","useGetShareOptionsQuery","selectedView","setSelectedView","previousSelectedViewId","useSelectedView","viewSettingsChanged","setViewSettingsChanged","useViewSettingsChanged","viewsListRaw","isLoadingViews","useListViewsQuery","viewsList","useMemo","BASE_VIEW_ID","onCreateView","onDeleteView","onUpdateView","onResetWorkingView","useViewsMutations","workingView","useGetWorkingViewQuery","projectBaseView","useGetBaseViewQuery","studioBaseView","workingSettings","viewSettings","WORKING_VIEW_ID","isViewWorking","editingViewId","editingViewDataData","isLoadingEditingViewData","useGetViewQuery","isViewStudioScope","editingViewData","onSaveViewFromCurrent","useSaveViewFromCurrent","onCreateBaseView","onUpdateBaseView","onDeleteBaseView","onLoadBaseView","useBaseViewMutations","onUpdateWorkingView","useCallback","payload","selectView","resetWorkingView","error","viewMenuItems","useBuildViewMenuItems","viewId","value","viewsQueries","jsx","useViewsContext","context","useContext","v"],"mappings":"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"}