@ynput/ayon-frontend-shared 0.2.25 → 0.2.26

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 (56) hide show
  1. package/dist/Views.cjs.js +1 -1
  2. package/dist/Views.es.js +14 -14
  3. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  4. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  5. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +33 -25
  6. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  7. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  8. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  9. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +10 -10
  10. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  11. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  12. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  13. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +229 -68
  14. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  15. package/dist/shared/src/containers/Slicer/createFilterFromSlicer.cjs.js +1 -1
  16. package/dist/shared/src/containers/Slicer/createFilterFromSlicer.cjs.js.map +1 -1
  17. package/dist/shared/src/containers/Slicer/createFilterFromSlicer.es.js +21 -25
  18. package/dist/shared/src/containers/Slicer/createFilterFromSlicer.es.js.map +1 -1
  19. package/dist/shared/src/containers/Views/ViewItem/ViewItem.cjs.js +1 -1
  20. package/dist/shared/src/containers/Views/ViewItem/ViewItem.cjs.js.map +1 -1
  21. package/dist/shared/src/containers/Views/ViewItem/ViewItem.es.js +64 -54
  22. package/dist/shared/src/containers/Views/ViewItem/ViewItem.es.js.map +1 -1
  23. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.cjs.js.map +1 -1
  24. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.es.js.map +1 -1
  25. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +1 -1
  26. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -1
  27. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +22 -20
  28. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -1
  29. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  30. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  31. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +60 -59
  32. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  33. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js +1 -1
  34. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js.map +1 -1
  35. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js +14 -14
  36. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js.map +1 -1
  37. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js +1 -1
  38. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js.map +1 -1
  39. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js +17 -18
  40. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js.map +1 -1
  41. package/dist/shared/src/hooks/useActionTriggers.cjs.js +1 -1
  42. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  43. package/dist/shared/src/hooks/useActionTriggers.es.js +38 -33
  44. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  45. package/dist/shared/src/hooks/useCustomProtocolCheck.cjs.js +2 -0
  46. package/dist/shared/src/hooks/useCustomProtocolCheck.cjs.js.map +1 -0
  47. package/dist/shared/src/hooks/useCustomProtocolCheck.es.js +43 -0
  48. package/dist/shared/src/hooks/useCustomProtocolCheck.es.js.map +1 -0
  49. package/dist/types/containers/Slicer/createFilterFromSlicer.d.ts +3 -1
  50. package/dist/types/containers/Slicer/types.d.ts +1 -1
  51. package/dist/types/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.d.ts +1 -0
  52. package/dist/types/containers/Views/context/ViewsContext.d.ts +2 -1
  53. package/dist/types/containers/Views/hooks/useViewsMutations.d.ts +3 -3
  54. package/dist/types/hooks/useActionTriggers.d.ts +1 -1
  55. package/dist/types/hooks/useCustomProtocolCheck.d.ts +10 -0
  56. package/package.json +1 -1
@@ -76,33 +76,32 @@ import "../../../api/queries/versions/updateVersions.es.js";
76
76
  import "../../../api/queries/views/getViews.es.js";
77
77
  import { useCreateViewMutation as E, useDeleteViewMutation as M, useUpdateViewMutation as W } from "../../../api/queries/views/updateViews.es.js";
78
78
  import "../../../api/queries/watchers/getWatchers.es.js";
79
- import { useCallback as s } from "react";
79
+ import { useCallback as a } from "react";
80
80
  import { generateWorkingView as v } from "../utils/generateWorkingView.es.js";
81
81
  import { toast as V } from "react-toastify";
82
82
  const Tr = ({
83
83
  viewType: r,
84
84
  projectName: e,
85
- onCreate: a,
85
+ onCreate: s,
86
86
  onDelete: w,
87
87
  onUpdate: c
88
88
  }) => {
89
- const [m] = E(), [d] = M(), [g] = W(), h = s(
89
+ const [m] = E(), [u] = M(), [g] = W(), h = a(
90
90
  async (i, t) => {
91
91
  if (!r)
92
92
  throw new Error("viewType are required for creating a view");
93
- console.log(i, t);
94
93
  try {
95
94
  await m({
96
95
  viewType: r,
97
- projectName: t ? e : void 0,
96
+ projectName: t ? void 0 : e,
98
97
  payload: i
99
- }).unwrap(), a && a(i);
98
+ }).unwrap(), s && s(i);
100
99
  } catch (o) {
101
100
  throw console.error("Failed to create view:", o), o;
102
101
  }
103
102
  },
104
- [m, r, e, a]
105
- ), k = s(
103
+ [m, r, e, s]
104
+ ), k = a(
106
105
  async (i, t, o) => {
107
106
  if (!r)
108
107
  throw new Error("viewType are required for updating a view");
@@ -110,7 +109,7 @@ const Tr = ({
110
109
  await g({
111
110
  viewId: i,
112
111
  viewType: r,
113
- projectName: o ? e : void 0,
112
+ projectName: o ? void 0 : e,
114
113
  payload: t
115
114
  }).unwrap(), c && c({ ...t, id: i });
116
115
  } catch (p) {
@@ -118,35 +117,35 @@ const Tr = ({
118
117
  }
119
118
  },
120
119
  [m, r, e, c]
121
- ), F = s(
120
+ ), F = a(
122
121
  async (i, t) => {
123
122
  if (!r)
124
123
  throw new Error("viewType are required for deleting a view");
125
124
  try {
126
- await d({
125
+ await u({
127
126
  viewType: r,
128
- projectName: t ? e : void 0,
127
+ projectName: t ? void 0 : e,
129
128
  viewId: i
130
129
  }).unwrap(), w && w(i);
131
130
  } catch (o) {
132
131
  throw console.error("Failed to delete view:", o), o;
133
132
  }
134
133
  },
135
- [d, r, e, w]
136
- ), q = s(
134
+ [u, r, e, w]
135
+ ), q = a(
137
136
  async (i) => {
138
137
  const { existingWorkingViewId: t, selectedViewId: o, setSelectedView: p, setSettingsChanged: f, notify: l } = i || {};
139
138
  if (!r)
140
139
  throw new Error("viewType are required for resetting a view");
141
- const u = v({});
142
- t && (u.id = t);
140
+ const d = v({});
141
+ t && (d.id = t);
143
142
  try {
144
143
  await m({
145
144
  viewType: r,
146
145
  projectName: e,
147
- payload: u
146
+ payload: d
148
147
  }).unwrap();
149
- const n = u.id;
148
+ const n = d.id;
150
149
  return p && f && o && t && o !== t && (p(n), f(!0)), l && V.success("View reset to default settings"), n;
151
150
  } catch (n) {
152
151
  throw console.error("Failed to reset working view:", n), l && V.error("Failed to reset view to default"), n;
@@ -1 +1 @@
1
- {"version":3,"file":"useViewsMutations.es.js","sources":["../../../../../../src/containers/Views/hooks/useViewsMutations.ts"],"sourcesContent":["import {\n CreateViewApiArg,\n useCreateViewMutation,\n useDeleteViewMutation,\n useUpdateViewMutation,\n} from '@shared/api'\nimport { useCallback } from 'react'\nimport { ViewData } from '../context/ViewsContext'\nimport { generateWorkingView } from '../utils/generateWorkingView'\nimport { toast } from 'react-toastify'\n\ntype Props = {\n viewType?: string\n projectName?: string\n onCreate?: (view: ViewData) => void\n onUpdate?: (view: ViewData) => void\n onDelete?: (viewId: string) => void\n}\n\nexport type UseViewMutations = {\n onCreateView: (payload: CreateViewApiArg['payload'], isProjectScope: boolean) => Promise<void>\n onDeleteView: (viewId: string, isProjectScope: boolean) => Promise<void>\n onUpdateView: (\n viewId: string,\n payload: Partial<ViewData>,\n isProjectScope: boolean,\n ) => Promise<void>\n onResetWorkingView: (args?: {\n existingWorkingViewId?: string\n selectedViewId?: string\n setSelectedView?: (id: string) => void\n setSettingsChanged?: (changed: boolean) => void\n notify?: boolean\n }) => Promise<string>\n}\ntype R = UseViewMutations\n\nexport const useViewsMutations = ({\n viewType,\n projectName,\n onCreate,\n onDelete,\n onUpdate,\n}: Props): UseViewMutations => {\n // forward mutations to the dialog\n const [createView] = useCreateViewMutation()\n const [deleteView] = useDeleteViewMutation()\n const [updateView] = useUpdateViewMutation()\n\n const onCreateView = useCallback<R['onCreateView']>(\n async (payload, isProjectScope) => {\n if (!viewType) {\n throw new Error('viewType are required for creating a view')\n }\n\n console.log(payload, isProjectScope)\n\n try {\n await createView({\n viewType: viewType,\n projectName: isProjectScope ? projectName : undefined,\n payload,\n }).unwrap()\n\n if (onCreate) {\n onCreate(payload as ViewData)\n }\n } catch (error) {\n console.error('Failed to create view:', error)\n throw error\n }\n },\n [createView, viewType, projectName, onCreate],\n )\n\n const onUpdateView = useCallback<R['onUpdateView']>(\n async (viewId, payload, isProjectScope) => {\n if (!viewType) {\n throw new Error('viewType are required for updating a view')\n }\n\n try {\n await updateView({\n viewId,\n viewType,\n projectName: isProjectScope ? projectName : undefined,\n payload,\n }).unwrap()\n\n if (onUpdate) {\n onUpdate({ ...payload, id: viewId } as ViewData)\n }\n } catch (error) {\n console.error('Failed to update view:', error)\n throw error\n }\n },\n [createView, viewType, projectName, onUpdate],\n )\n\n const onDeleteView = useCallback<R['onDeleteView']>(\n async (viewId, isProjectScope) => {\n if (!viewType) {\n throw new Error('viewType are required for deleting a view')\n }\n\n try {\n await deleteView({\n viewType: viewType,\n projectName: isProjectScope ? projectName : undefined,\n viewId,\n }).unwrap()\n\n if (onDelete) {\n onDelete(viewId)\n }\n } catch (error) {\n console.error('Failed to delete view:', error)\n throw error\n }\n },\n [deleteView, viewType, projectName, onDelete],\n )\n\n const onResetWorkingView = useCallback<R['onResetWorkingView']>(\n async (args) => {\n const { existingWorkingViewId, selectedViewId, setSelectedView, setSettingsChanged, notify } =\n args || {}\n if (!viewType) {\n throw new Error('viewType are required for resetting a view')\n }\n\n const freshWorkingView = generateWorkingView({})\n if (existingWorkingViewId) {\n freshWorkingView.id = existingWorkingViewId\n }\n\n try {\n await createView({\n viewType,\n projectName,\n payload: freshWorkingView,\n }).unwrap()\n const newId = freshWorkingView.id as string\n\n // If we're not currently on the working view, switch to it and mark settings as changed\n if (setSelectedView && setSettingsChanged && selectedViewId && existingWorkingViewId) {\n if (selectedViewId !== existingWorkingViewId) {\n setSelectedView(newId)\n setSettingsChanged(true)\n }\n }\n\n if (notify) {\n toast.success('View reset to default settings')\n }\n\n return newId\n } catch (error) {\n console.error('Failed to reset working view:', error)\n if (notify) toast.error('Failed to reset view to default')\n throw error\n }\n },\n [createView, viewType, projectName],\n )\n\n return {\n onCreateView,\n onUpdateView,\n onDeleteView,\n onResetWorkingView,\n }\n}\n"],"names":["useViewsMutations","viewType","projectName","onCreate","onDelete","onUpdate","createView","useCreateViewMutation","deleteView","useDeleteViewMutation","updateView","useUpdateViewMutation","onCreateView","useCallback","payload","isProjectScope","error","onUpdateView","viewId","onDeleteView","onResetWorkingView","args","existingWorkingViewId","selectedViewId","setSelectedView","setSettingsChanged","notify","freshWorkingView","generateWorkingView","newId","toast"],"mappings":"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"}
1
+ {"version":3,"file":"useViewsMutations.es.js","sources":["../../../../../../src/containers/Views/hooks/useViewsMutations.ts"],"sourcesContent":["import {\n CreateViewApiArg,\n useCreateViewMutation,\n useDeleteViewMutation,\n useUpdateViewMutation,\n} from '@shared/api'\nimport { useCallback } from 'react'\nimport { ViewData } from '../context/ViewsContext'\nimport { generateWorkingView } from '../utils/generateWorkingView'\nimport { toast } from 'react-toastify'\n\ntype Props = {\n viewType?: string\n projectName?: string\n onCreate?: (view: ViewData) => void\n onUpdate?: (view: ViewData) => void\n onDelete?: (viewId: string) => void\n}\n\nexport type UseViewMutations = {\n onCreateView: (payload: CreateViewApiArg['payload'], isStudioScope: boolean) => Promise<void>\n onDeleteView: (viewId: string, isStudioScope: boolean) => Promise<void>\n onUpdateView: (\n viewId: string,\n payload: Partial<ViewData>,\n isStudioScope: boolean,\n ) => Promise<void>\n onResetWorkingView: (args?: {\n existingWorkingViewId?: string\n selectedViewId?: string\n setSelectedView?: (id: string) => void\n setSettingsChanged?: (changed: boolean) => void\n notify?: boolean\n }) => Promise<string>\n}\ntype R = UseViewMutations\n\nexport const useViewsMutations = ({\n viewType,\n projectName,\n onCreate,\n onDelete,\n onUpdate,\n}: Props): UseViewMutations => {\n // forward mutations to the dialog\n const [createView] = useCreateViewMutation()\n const [deleteView] = useDeleteViewMutation()\n const [updateView] = useUpdateViewMutation()\n\n const onCreateView = useCallback<R['onCreateView']>(\n async (payload, isStudioScope) => {\n if (!viewType) {\n throw new Error('viewType are required for creating a view')\n }\n\n try {\n await createView({\n viewType: viewType,\n projectName: isStudioScope ? undefined : projectName,\n payload,\n }).unwrap()\n\n if (onCreate) {\n onCreate(payload as ViewData)\n }\n } catch (error) {\n console.error('Failed to create view:', error)\n throw error\n }\n },\n [createView, viewType, projectName, onCreate],\n )\n\n const onUpdateView = useCallback<R['onUpdateView']>(\n async (viewId, payload, isStudioScope) => {\n if (!viewType) {\n throw new Error('viewType are required for updating a view')\n }\n\n try {\n await updateView({\n viewId,\n viewType,\n projectName: isStudioScope ? undefined : projectName,\n payload,\n }).unwrap()\n\n if (onUpdate) {\n onUpdate({ ...payload, id: viewId } as ViewData)\n }\n } catch (error) {\n console.error('Failed to update view:', error)\n throw error\n }\n },\n [createView, viewType, projectName, onUpdate],\n )\n\n const onDeleteView = useCallback<R['onDeleteView']>(\n async (viewId, isStudioScope) => {\n if (!viewType) {\n throw new Error('viewType are required for deleting a view')\n }\n\n try {\n await deleteView({\n viewType: viewType,\n projectName: isStudioScope ? undefined : projectName,\n viewId,\n }).unwrap()\n\n if (onDelete) {\n onDelete(viewId)\n }\n } catch (error) {\n console.error('Failed to delete view:', error)\n throw error\n }\n },\n [deleteView, viewType, projectName, onDelete],\n )\n\n const onResetWorkingView = useCallback<R['onResetWorkingView']>(\n async (args) => {\n const { existingWorkingViewId, selectedViewId, setSelectedView, setSettingsChanged, notify } =\n args || {}\n if (!viewType) {\n throw new Error('viewType are required for resetting a view')\n }\n\n const freshWorkingView = generateWorkingView({})\n if (existingWorkingViewId) {\n freshWorkingView.id = existingWorkingViewId\n }\n\n try {\n await createView({\n viewType,\n projectName,\n payload: freshWorkingView,\n }).unwrap()\n const newId = freshWorkingView.id as string\n\n // If we're not currently on the working view, switch to it and mark settings as changed\n if (setSelectedView && setSettingsChanged && selectedViewId && existingWorkingViewId) {\n if (selectedViewId !== existingWorkingViewId) {\n setSelectedView(newId)\n setSettingsChanged(true)\n }\n }\n\n if (notify) {\n toast.success('View reset to default settings')\n }\n\n return newId\n } catch (error) {\n console.error('Failed to reset working view:', error)\n if (notify) toast.error('Failed to reset view to default')\n throw error\n }\n },\n [createView, viewType, projectName],\n )\n\n return {\n onCreateView,\n onUpdateView,\n onDeleteView,\n onResetWorkingView,\n }\n}\n"],"names":["useViewsMutations","viewType","projectName","onCreate","onDelete","onUpdate","createView","useCreateViewMutation","deleteView","useDeleteViewMutation","updateView","useUpdateViewMutation","onCreateView","useCallback","payload","isStudioScope","error","onUpdateView","viewId","onDeleteView","onResetWorkingView","args","existingWorkingViewId","selectedViewId","setSelectedView","setSettingsChanged","notify","freshWorkingView","generateWorkingView","newId","toast"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react-redux"),s=require("custom-protocol-check"),d=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/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/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/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/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");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/versions/updateVersions.cjs.js");require("../api/queries/views/getViews.cjs.js");require("../api/queries/views/updateViews.cjs.js");require("../api/queries/watchers/getWatchers.cjs.js");const f=({searchParams:q,onSetSearchParams:t,onNavigate:n})=>{const o=l.useDispatch();return{handleActionPayload:(u,e)=>{if(e){if(u==="launcher")e!=null&&e.uri&&s(e.uri,()=>{},()=>{},2e3);else if(u==="query")if(Object.values(e.query).every(r=>typeof r=="string")){for(const[r,c]of Object.entries(e.query))q.set(r,c);t(q)}else throw new Error("Invalid payload: query");else if(u==="navigate"){if(typeof e.uri!="string")throw new Error("Invalid payload: navigate");n(e.uri)}else if(u==="redirect"){if(typeof e.uri!="string")throw new Error("Invalid payload: redirect");{const i=(e==null?void 0:e.new_tab)||!1;window.open(e.uri,i?"_blank":"_self")}}if("extra_download"in e){if(typeof e.extra_download!="string")throw new Error("Invalid payload: extra_download");{const i=new URL(e.extra_download,window.location.origin).href;console.log(i);const r=document.createElement("a");r.href=i,r.target="_blank",r.rel="noopener noreferrer",r.download="",document.body.appendChild(r),r.click(),document.body.removeChild(r)}}if("extra_clipboard"in e){if(typeof e.extra_clipboard!="string")throw new Error("Invalid payload: extra_clipboard");navigator.clipboard.writeText(e.extra_clipboard).catch(i=>{console.error("Failed to copy text to clipboard:",i)})}if("extra_reload"in e){if(!Array.isArray(e.extra_reload))throw new Error("Invalid payload: extra_reload");e.extra_reload.length&&o(d.api.util.invalidateTags(e.extra_reload))}}}}};exports.useActionTriggers=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react-redux"),a=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/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/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/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/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");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/versions/updateVersions.cjs.js");require("../api/queries/views/getViews.cjs.js");require("../api/queries/views/updateViews.cjs.js");require("../api/queries/watchers/getWatchers.cjs.js");const d=require("./useCustomProtocolCheck.cjs.js"),f=({searchParams:t,onSetSearchParams:o,onNavigate:n})=>{const q=l.useDispatch(),{checkProtocol:c}=d.useCustomProtocolCheck({timeout:2e3,showSuccessMessage:!1,showErrorMessage:!0,enableFallback:!0});return{handleActionPayload:async(u,e)=>{if(e){if(u==="launcher")if(e!=null&&e.uri)try{await c(e.uri)||console.log("Protocol launch failed - AYON client may not be running")}catch(i){console.error("Protocol launch error:",i)}else console.warn("Launcher action has no URI:",e);else if(u==="query")if(Object.values(e.query).every(r=>typeof r=="string")){for(const[r,s]of Object.entries(e.query))t.set(r,s);o(t)}else throw new Error("Invalid payload: query");else if(u==="navigate"){if(typeof e.uri!="string")throw new Error("Invalid payload: navigate");n(e.uri)}else if(u==="redirect"){if(typeof e.uri!="string")throw new Error("Invalid payload: redirect");{const i=(e==null?void 0:e.new_tab)||!1;window.open(e.uri,i?"_blank":"_self")}}if("extra_download"in e){if(typeof e.extra_download!="string")throw new Error("Invalid payload: extra_download");{const i=new URL(e.extra_download,window.location.origin).href;console.log(i);const r=document.createElement("a");r.href=i,r.target="_blank",r.rel="noopener noreferrer",r.download="",document.body.appendChild(r),r.click(),document.body.removeChild(r)}}if("extra_clipboard"in e){if(typeof e.extra_clipboard!="string")throw new Error("Invalid payload: extra_clipboard");navigator.clipboard.writeText(e.extra_clipboard).catch(i=>{console.error("Failed to copy text to clipboard:",i)})}if("extra_reload"in e){if(!Array.isArray(e.extra_reload))throw new Error("Invalid payload: extra_reload");e.extra_reload.length&&q(a.api.util.invalidateTags(e.extra_reload))}}}}};exports.useActionTriggers=f;
2
2
  //# sourceMappingURL=useActionTriggers.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useActionTriggers.cjs.js","sources":["../../../../src/hooks/useActionTriggers.ts"],"sourcesContent":["import { useDispatch } from 'react-redux'\nimport customProtocolCheck from 'custom-protocol-check'\nimport { api } from '@shared/api'\n\n\nexport type ActionTriggersProps = {\n searchParams: URLSearchParams\n onSetSearchParams: (params: URLSearchParams) => void\n onNavigate: (uri: string) => void\n}\n\ninterface QueryParams {\n [key: string]: string\n}\n\ninterface ActionPayload {\n query?: QueryParams // adds query params to the URL\n uri?: string // navigates to a different page\n new_tab?: boolean // opens a new tab\n extra_download?: string // triggers a file download from a URL\n extra_clipboard?: string // copies string content to clipboard\n extra_reload?: string[] // list of tags to invalidate\n [key: string]: any\n}\n\nexport const useActionTriggers = ({\n searchParams,\n onSetSearchParams,\n onNavigate,\n}: ActionTriggersProps) => {\n const dispatch = useDispatch()\n const handleActionPayload = (actionType: string, payload: ActionPayload | null): void => {\n if (!payload) return\n\n if (actionType === 'launcher') {\n if (payload?.uri) {\n customProtocolCheck(\n payload.uri,\n () => {},\n () => {},\n 2000,\n )\n }\n } else if (actionType === 'query') {\n // Validate it is an object of key:value pairs with value being string\n const isValid = Object.values(payload.query as QueryParams).every((value) => {\n return typeof value === 'string'\n })\n\n if (!isValid) {\n throw new Error('Invalid payload: query')\n } else {\n // Add query params to URL\n for (const [key, value] of Object.entries(payload.query as QueryParams)) {\n searchParams.set(key, value)\n }\n onSetSearchParams(searchParams)\n }\n } else if (actionType === 'navigate') {\n // Validate it is a string\n if (typeof payload.uri !== 'string') {\n throw new Error('Invalid payload: navigate')\n } else {\n // Navigate to the specified page\n onNavigate(payload.uri)\n }\n } else if (actionType === 'redirect') {\n // Validate it is a string\n if (typeof payload.uri !== 'string') {\n throw new Error('Invalid payload: redirect')\n } else {\n const newTab = payload?.new_tab || false\n window.open(payload.uri, newTab ? '_blank' : '_self')\n }\n }\n\n //\n // Sub-actions\n //\n\n if ('extra_download' in payload) {\n // Validate it is a string\n if (typeof payload.extra_download !== 'string') {\n throw new Error('Invalid payload: extra_download')\n } else {\n // Trigger file download from the URL\n const downloadUrl = new URL(payload.extra_download, window.location.origin).href\n console.log(downloadUrl)\n // Create a hidden anchor element\n const link = document.createElement('a')\n link.href = downloadUrl\n link.target = '_blank'\n link.rel = 'noopener noreferrer'\n // Set download attribute if it's a direct file download\n // If it's an API endpoint that handles the download, this is still good\n link.download = ''\n // Append to document, click and then remove\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n }\n }\n\n if ('extra_clipboard' in payload) {\n // Validate it is a string\n if (typeof payload.extra_clipboard !== 'string') {\n throw new Error('Invalid payload: extra_clipboard')\n } else {\n // Copy content to clipboard\n navigator.clipboard.writeText(payload.extra_clipboard).catch((err) => {\n console.error('Failed to copy text to clipboard:', err)\n })\n }\n }\n\n if ('extra_reload' in payload) {\n if (!Array.isArray(payload.extra_reload)) {\n throw new Error('Invalid payload: extra_reload')\n }\n\n if (payload.extra_reload.length) {\n dispatch(api.util.invalidateTags(payload.extra_reload))\n }\n }\n\n }\n\n return { handleActionPayload }\n}"],"names":["useActionTriggers","searchParams","onSetSearchParams","onNavigate","dispatch","useDispatch","actionType","payload","customProtocolCheck","value","key","newTab","downloadUrl","link","err","api"],"mappings":"q6HAyBO,MAAMA,EAAoB,CAAC,CAChC,aAAAC,EACA,kBAAAC,EACA,WAAAC,CACF,IAA2B,CACzB,MAAMC,EAAWC,EAAAA,YAAY,EAiG7B,MAAO,CAAE,oBAhGmB,CAACC,EAAoBC,IAAwC,CACvF,GAAKA,EAEL,IAAID,IAAe,WACbC,GAAA,MAAAA,EAAS,KACXC,EACED,EAAQ,IACR,IAAM,CAAC,EACP,IAAM,CAAC,EACP,GACF,UAEOD,IAAe,QAMxB,GAJgB,OAAO,OAAOC,EAAQ,KAAoB,EAAE,MAAOE,GAC1D,OAAOA,GAAU,QACzB,EAIM,CAEM,SAAA,CAACC,EAAKD,CAAK,IAAK,OAAO,QAAQF,EAAQ,KAAoB,EACvDN,EAAA,IAAIS,EAAKD,CAAK,EAE7BP,EAAkBD,CAAY,CAAA,KANxB,OAAA,IAAI,MAAM,wBAAwB,UAQjCK,IAAe,WAAY,CAEhC,GAAA,OAAOC,EAAQ,KAAQ,SACnB,MAAA,IAAI,MAAM,2BAA2B,EAG3CJ,EAAWI,EAAQ,GAAG,CACxB,SACSD,IAAe,WAAY,CAEhC,GAAA,OAAOC,EAAQ,KAAQ,SACnB,MAAA,IAAI,MAAM,2BAA2B,EACtC,CACC,MAAAI,GAASJ,GAAA,YAAAA,EAAS,UAAW,GACnC,OAAO,KAAKA,EAAQ,IAAKI,EAAS,SAAW,OAAO,CAAA,CACtD,CAOF,GAAI,mBAAoBJ,EAAS,CAE3B,GAAA,OAAOA,EAAQ,gBAAmB,SAC9B,MAAA,IAAI,MAAM,iCAAiC,EAC5C,CAEC,MAAAK,EAAc,IAAI,IAAIL,EAAQ,eAAgB,OAAO,SAAS,MAAM,EAAE,KAC5E,QAAQ,IAAIK,CAAW,EAEjB,MAAAC,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAOD,EACZC,EAAK,OAAS,SACdA,EAAK,IAAM,sBAGXA,EAAK,SAAW,GAEP,SAAA,KAAK,YAAYA,CAAI,EAC9BA,EAAK,MAAM,EACF,SAAA,KAAK,YAAYA,CAAI,CAAA,CAChC,CAGF,GAAI,oBAAqBN,EAAS,CAE5B,GAAA,OAAOA,EAAQ,iBAAoB,SAC/B,MAAA,IAAI,MAAM,kCAAkC,EAGlD,UAAU,UAAU,UAAUA,EAAQ,eAAe,EAAE,MAAOO,GAAQ,CAC5D,QAAA,MAAM,oCAAqCA,CAAG,CAAA,CACvD,CACH,CAGF,GAAI,iBAAkBP,EAAS,CAC7B,GAAI,CAAC,MAAM,QAAQA,EAAQ,YAAY,EAC/B,MAAA,IAAI,MAAM,+BAA+B,EAG7CA,EAAQ,aAAa,QACvBH,EAASW,EAAI,IAAA,KAAK,eAAeR,EAAQ,YAAY,CAAC,CACxD,EAGJ,CAE6B,CAC/B"}
1
+ {"version":3,"file":"useActionTriggers.cjs.js","sources":["../../../../src/hooks/useActionTriggers.ts"],"sourcesContent":["import { useDispatch } from 'react-redux'\nimport { api } from '@shared/api'\nimport { useCustomProtocolCheck } from './useCustomProtocolCheck'\n\n\nexport type ActionTriggersProps = {\n searchParams: URLSearchParams\n onSetSearchParams: (params: URLSearchParams) => void\n onNavigate: (uri: string) => void\n}\n\ninterface QueryParams {\n [key: string]: string\n}\n\ninterface ActionPayload {\n query?: QueryParams // adds query params to the URL\n uri?: string // navigates to a different page\n new_tab?: boolean // opens a new tab\n extra_download?: string // triggers a file download from a URL\n extra_clipboard?: string // copies string content to clipboard\n extra_reload?: string[] // list of tags to invalidate\n [key: string]: any\n}\n\nexport const useActionTriggers = ({\n searchParams,\n onSetSearchParams,\n onNavigate,\n}: ActionTriggersProps) => {\n const dispatch = useDispatch()\n \n const { checkProtocol } = useCustomProtocolCheck({\n timeout: 2000,\n showSuccessMessage: false,\n showErrorMessage: true,\n enableFallback: true\n })\n \n const handleActionPayload = async (actionType: string, payload: ActionPayload | null): Promise<void> => {\n if (!payload) return\n\n if (actionType === 'launcher') {\n if (payload?.uri) {\n try {\n const success = await checkProtocol(payload.uri)\n \n if (!success) {\n console.log('Protocol launch failed - AYON client may not be running')\n }\n } catch (error) {\n console.error('Protocol launch error:', error)\n }\n } else {\n console.warn('Launcher action has no URI:', payload)\n }\n } else if (actionType === 'query') {\n // Validate it is an object of key:value pairs with value being string\n const isValid = Object.values(payload.query as QueryParams).every((value) => {\n return typeof value === 'string'\n })\n\n if (!isValid) {\n throw new Error('Invalid payload: query')\n } else {\n // Add query params to URL\n for (const [key, value] of Object.entries(payload.query as QueryParams)) {\n searchParams.set(key, value)\n }\n onSetSearchParams(searchParams)\n }\n } else if (actionType === 'navigate') {\n // Validate it is a string\n if (typeof payload.uri !== 'string') {\n throw new Error('Invalid payload: navigate')\n } else {\n // Navigate to the specified page\n onNavigate(payload.uri)\n }\n } else if (actionType === 'redirect') {\n // Validate it is a string\n if (typeof payload.uri !== 'string') {\n throw new Error('Invalid payload: redirect')\n } else {\n const newTab = payload?.new_tab || false\n window.open(payload.uri, newTab ? '_blank' : '_self')\n }\n }\n\n //\n // Sub-actions\n //\n\n if ('extra_download' in payload) {\n // Validate it is a string\n if (typeof payload.extra_download !== 'string') {\n throw new Error('Invalid payload: extra_download')\n } else {\n // Trigger file download from the URL\n const downloadUrl = new URL(payload.extra_download, window.location.origin).href\n console.log(downloadUrl)\n // Create a hidden anchor element\n const link = document.createElement('a')\n link.href = downloadUrl\n link.target = '_blank'\n link.rel = 'noopener noreferrer'\n // Set download attribute if it's a direct file download\n // If it's an API endpoint that handles the download, this is still good\n link.download = ''\n // Append to document, click and then remove\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n }\n }\n\n if ('extra_clipboard' in payload) {\n // Validate it is a string\n if (typeof payload.extra_clipboard !== 'string') {\n throw new Error('Invalid payload: extra_clipboard')\n } else {\n // Copy content to clipboard\n navigator.clipboard.writeText(payload.extra_clipboard).catch((err) => {\n console.error('Failed to copy text to clipboard:', err)\n })\n }\n }\n\n if ('extra_reload' in payload) {\n if (!Array.isArray(payload.extra_reload)) {\n throw new Error('Invalid payload: extra_reload')\n }\n\n if (payload.extra_reload.length) {\n dispatch(api.util.invalidateTags(payload.extra_reload))\n }\n }\n\n }\n\n return { handleActionPayload }\n}"],"names":["useActionTriggers","searchParams","onSetSearchParams","onNavigate","dispatch","useDispatch","checkProtocol","useCustomProtocolCheck","actionType","payload","error","value","key","newTab","downloadUrl","link","err","api"],"mappings":"q7HAyBaA,EAAoB,CAAC,CAChC,aAAAC,EACA,kBAAAC,EACA,WAAAC,CACF,IAA2B,CACzB,MAAMC,EAAWC,EAAAA,YAAY,EAEvB,CAAE,cAAAC,CAAc,EAAIC,yBAAuB,CAC/C,QAAS,IACT,mBAAoB,GACpB,iBAAkB,GAClB,eAAgB,EAAA,CACjB,EAuGD,MAAO,CAAE,oBArGmB,MAAOC,EAAoBC,IAAiD,CACtG,GAAKA,EAEL,IAAID,IAAe,WACjB,GAAIC,GAAA,MAAAA,EAAS,IACP,GAAA,CACc,MAAMH,EAAcG,EAAQ,GAAG,GAG7C,QAAQ,IAAI,yDAAyD,QAEhEC,EAAO,CACN,QAAA,MAAM,yBAA0BA,CAAK,CAAA,MAGvC,QAAA,KAAK,8BAA+BD,CAAO,UAE5CD,IAAe,QAMxB,GAJgB,OAAO,OAAOC,EAAQ,KAAoB,EAAE,MAAOE,GAC1D,OAAOA,GAAU,QACzB,EAIM,CAEM,SAAA,CAACC,EAAKD,CAAK,IAAK,OAAO,QAAQF,EAAQ,KAAoB,EACvDR,EAAA,IAAIW,EAAKD,CAAK,EAE7BT,EAAkBD,CAAY,CAAA,KANxB,OAAA,IAAI,MAAM,wBAAwB,UAQjCO,IAAe,WAAY,CAEhC,GAAA,OAAOC,EAAQ,KAAQ,SACnB,MAAA,IAAI,MAAM,2BAA2B,EAG3CN,EAAWM,EAAQ,GAAG,CACxB,SACSD,IAAe,WAAY,CAEhC,GAAA,OAAOC,EAAQ,KAAQ,SACnB,MAAA,IAAI,MAAM,2BAA2B,EACtC,CACC,MAAAI,GAASJ,GAAA,YAAAA,EAAS,UAAW,GACnC,OAAO,KAAKA,EAAQ,IAAKI,EAAS,SAAW,OAAO,CAAA,CACtD,CAOF,GAAI,mBAAoBJ,EAAS,CAE3B,GAAA,OAAOA,EAAQ,gBAAmB,SAC9B,MAAA,IAAI,MAAM,iCAAiC,EAC5C,CAEC,MAAAK,EAAc,IAAI,IAAIL,EAAQ,eAAgB,OAAO,SAAS,MAAM,EAAE,KAC5E,QAAQ,IAAIK,CAAW,EAEjB,MAAAC,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAOD,EACZC,EAAK,OAAS,SACdA,EAAK,IAAM,sBAGXA,EAAK,SAAW,GAEP,SAAA,KAAK,YAAYA,CAAI,EAC9BA,EAAK,MAAM,EACF,SAAA,KAAK,YAAYA,CAAI,CAAA,CAChC,CAGF,GAAI,oBAAqBN,EAAS,CAE5B,GAAA,OAAOA,EAAQ,iBAAoB,SAC/B,MAAA,IAAI,MAAM,kCAAkC,EAGlD,UAAU,UAAU,UAAUA,EAAQ,eAAe,EAAE,MAAOO,GAAQ,CAC5D,QAAA,MAAM,oCAAqCA,CAAG,CAAA,CACvD,CACH,CAGF,GAAI,iBAAkBP,EAAS,CAC7B,GAAI,CAAC,MAAM,QAAQA,EAAQ,YAAY,EAC/B,MAAA,IAAI,MAAM,+BAA+B,EAG7CA,EAAQ,aAAa,QACvBL,EAASa,EAAI,IAAA,KAAK,eAAeR,EAAQ,YAAY,CAAC,CACxD,EAGJ,CAE6B,CAC/B"}
@@ -1,6 +1,5 @@
1
- import { useDispatch as s } from "react-redux";
2
- import c from "custom-protocol-check";
3
- import { api as f } from "../api/base/client.es.js";
1
+ import { useDispatch as l } from "react-redux";
2
+ import { api as a } from "../api/base/client.es.js";
4
3
  import "../api/generated/graphql.es.js";
5
4
  import "../api/generated/graphqlLinks.es.js";
6
5
  import "../api/generated/access.es.js";
@@ -78,68 +77,74 @@ import "../api/queries/versions/updateVersions.es.js";
78
77
  import "../api/queries/views/getViews.es.js";
79
78
  import "../api/queries/views/updateViews.es.js";
80
79
  import "../api/queries/watchers/getWatchers.es.js";
81
- const Br = ({
80
+ import { useCustomProtocolCheck as f } from "./useCustomProtocolCheck.es.js";
81
+ const Tr = ({
82
82
  searchParams: e,
83
83
  onSetSearchParams: m,
84
- onNavigate: p
84
+ onNavigate: n
85
85
  }) => {
86
- const n = s();
87
- return { handleActionPayload: (o, r) => {
86
+ const p = l(), { checkProtocol: s } = f({
87
+ timeout: 2e3,
88
+ showSuccessMessage: !1,
89
+ showErrorMessage: !0,
90
+ enableFallback: !0
91
+ });
92
+ return { handleActionPayload: async (i, r) => {
88
93
  if (r) {
89
- if (o === "launcher")
90
- r != null && r.uri && c(
91
- r.uri,
92
- () => {
93
- },
94
- () => {
95
- },
96
- 2e3
97
- );
98
- else if (o === "query")
99
- if (Object.values(r.query).every((t) => typeof t == "string")) {
100
- for (const [t, l] of Object.entries(r.query))
101
- e.set(t, l);
94
+ if (i === "launcher")
95
+ if (r != null && r.uri)
96
+ try {
97
+ await s(r.uri) || console.log("Protocol launch failed - AYON client may not be running");
98
+ } catch (t) {
99
+ console.error("Protocol launch error:", t);
100
+ }
101
+ else
102
+ console.warn("Launcher action has no URI:", r);
103
+ else if (i === "query")
104
+ if (Object.values(r.query).every((o) => typeof o == "string")) {
105
+ for (const [o, c] of Object.entries(r.query))
106
+ e.set(o, c);
102
107
  m(e);
103
108
  } else
104
109
  throw new Error("Invalid payload: query");
105
- else if (o === "navigate") {
110
+ else if (i === "navigate") {
106
111
  if (typeof r.uri != "string")
107
112
  throw new Error("Invalid payload: navigate");
108
- p(r.uri);
109
- } else if (o === "redirect") {
113
+ n(r.uri);
114
+ } else if (i === "redirect") {
110
115
  if (typeof r.uri != "string")
111
116
  throw new Error("Invalid payload: redirect");
112
117
  {
113
- const i = (r == null ? void 0 : r.new_tab) || !1;
114
- window.open(r.uri, i ? "_blank" : "_self");
118
+ const t = (r == null ? void 0 : r.new_tab) || !1;
119
+ window.open(r.uri, t ? "_blank" : "_self");
115
120
  }
116
121
  }
117
122
  if ("extra_download" in r) {
118
123
  if (typeof r.extra_download != "string")
119
124
  throw new Error("Invalid payload: extra_download");
120
125
  {
121
- const i = new URL(r.extra_download, window.location.origin).href;
122
- console.log(i);
123
- const t = document.createElement("a");
124
- t.href = i, t.target = "_blank", t.rel = "noopener noreferrer", t.download = "", document.body.appendChild(t), t.click(), document.body.removeChild(t);
126
+ const t = new URL(r.extra_download, window.location.origin).href;
127
+ console.log(t);
128
+ const o = document.createElement("a");
129
+ o.href = t, o.target = "_blank", o.rel = "noopener noreferrer", o.download = "", document.body.appendChild(o), o.click(), document.body.removeChild(o);
125
130
  }
126
131
  }
127
132
  if ("extra_clipboard" in r) {
128
133
  if (typeof r.extra_clipboard != "string")
129
134
  throw new Error("Invalid payload: extra_clipboard");
130
- navigator.clipboard.writeText(r.extra_clipboard).catch((i) => {
131
- console.error("Failed to copy text to clipboard:", i);
135
+ navigator.clipboard.writeText(r.extra_clipboard).catch((t) => {
136
+ console.error("Failed to copy text to clipboard:", t);
132
137
  });
133
138
  }
134
139
  if ("extra_reload" in r) {
135
140
  if (!Array.isArray(r.extra_reload))
136
141
  throw new Error("Invalid payload: extra_reload");
137
- r.extra_reload.length && n(f.util.invalidateTags(r.extra_reload));
142
+ r.extra_reload.length && p(a.util.invalidateTags(r.extra_reload));
138
143
  }
139
144
  }
140
145
  } };
141
146
  };
142
147
  export {
143
- Br as useActionTriggers
148
+ Tr as useActionTriggers
144
149
  };
145
150
  //# sourceMappingURL=useActionTriggers.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useActionTriggers.es.js","sources":["../../../../src/hooks/useActionTriggers.ts"],"sourcesContent":["import { useDispatch } from 'react-redux'\nimport customProtocolCheck from 'custom-protocol-check'\nimport { api } from '@shared/api'\n\n\nexport type ActionTriggersProps = {\n searchParams: URLSearchParams\n onSetSearchParams: (params: URLSearchParams) => void\n onNavigate: (uri: string) => void\n}\n\ninterface QueryParams {\n [key: string]: string\n}\n\ninterface ActionPayload {\n query?: QueryParams // adds query params to the URL\n uri?: string // navigates to a different page\n new_tab?: boolean // opens a new tab\n extra_download?: string // triggers a file download from a URL\n extra_clipboard?: string // copies string content to clipboard\n extra_reload?: string[] // list of tags to invalidate\n [key: string]: any\n}\n\nexport const useActionTriggers = ({\n searchParams,\n onSetSearchParams,\n onNavigate,\n}: ActionTriggersProps) => {\n const dispatch = useDispatch()\n const handleActionPayload = (actionType: string, payload: ActionPayload | null): void => {\n if (!payload) return\n\n if (actionType === 'launcher') {\n if (payload?.uri) {\n customProtocolCheck(\n payload.uri,\n () => {},\n () => {},\n 2000,\n )\n }\n } else if (actionType === 'query') {\n // Validate it is an object of key:value pairs with value being string\n const isValid = Object.values(payload.query as QueryParams).every((value) => {\n return typeof value === 'string'\n })\n\n if (!isValid) {\n throw new Error('Invalid payload: query')\n } else {\n // Add query params to URL\n for (const [key, value] of Object.entries(payload.query as QueryParams)) {\n searchParams.set(key, value)\n }\n onSetSearchParams(searchParams)\n }\n } else if (actionType === 'navigate') {\n // Validate it is a string\n if (typeof payload.uri !== 'string') {\n throw new Error('Invalid payload: navigate')\n } else {\n // Navigate to the specified page\n onNavigate(payload.uri)\n }\n } else if (actionType === 'redirect') {\n // Validate it is a string\n if (typeof payload.uri !== 'string') {\n throw new Error('Invalid payload: redirect')\n } else {\n const newTab = payload?.new_tab || false\n window.open(payload.uri, newTab ? '_blank' : '_self')\n }\n }\n\n //\n // Sub-actions\n //\n\n if ('extra_download' in payload) {\n // Validate it is a string\n if (typeof payload.extra_download !== 'string') {\n throw new Error('Invalid payload: extra_download')\n } else {\n // Trigger file download from the URL\n const downloadUrl = new URL(payload.extra_download, window.location.origin).href\n console.log(downloadUrl)\n // Create a hidden anchor element\n const link = document.createElement('a')\n link.href = downloadUrl\n link.target = '_blank'\n link.rel = 'noopener noreferrer'\n // Set download attribute if it's a direct file download\n // If it's an API endpoint that handles the download, this is still good\n link.download = ''\n // Append to document, click and then remove\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n }\n }\n\n if ('extra_clipboard' in payload) {\n // Validate it is a string\n if (typeof payload.extra_clipboard !== 'string') {\n throw new Error('Invalid payload: extra_clipboard')\n } else {\n // Copy content to clipboard\n navigator.clipboard.writeText(payload.extra_clipboard).catch((err) => {\n console.error('Failed to copy text to clipboard:', err)\n })\n }\n }\n\n if ('extra_reload' in payload) {\n if (!Array.isArray(payload.extra_reload)) {\n throw new Error('Invalid payload: extra_reload')\n }\n\n if (payload.extra_reload.length) {\n dispatch(api.util.invalidateTags(payload.extra_reload))\n }\n }\n\n }\n\n return { handleActionPayload }\n}"],"names":["useActionTriggers","searchParams","onSetSearchParams","onNavigate","dispatch","useDispatch","actionType","payload","customProtocolCheck","value","key","newTab","downloadUrl","link","err","api"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,MAAMA,KAAoB,CAAC;AAAA,EAChC,cAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,YAAAC;AACF,MAA2B;AACzB,QAAMC,IAAWC,EAAY;AAiG7B,SAAO,EAAE,qBAhGmB,CAACC,GAAoBC,MAAwC;AACvF,QAAKA,GAEL;AAAA,UAAID,MAAe;AACjB,QAAIC,KAAA,QAAAA,EAAS,OACXC;AAAA,UACED,EAAQ;AAAA,UACR,MAAM;AAAA,UAAC;AAAA,UACP,MAAM;AAAA,UAAC;AAAA,UACP;AAAA,QACF;AAAA,eAEOD,MAAe;AAMxB,YAJgB,OAAO,OAAOC,EAAQ,KAAoB,EAAE,MAAM,CAACE,MAC1D,OAAOA,KAAU,QACzB,GAIM;AAEM,qBAAA,CAACC,GAAKD,CAAK,KAAK,OAAO,QAAQF,EAAQ,KAAoB;AACvD,YAAAN,EAAA,IAAIS,GAAKD,CAAK;AAE7B,UAAAP,EAAkBD,CAAY;AAAA,QAAA;AANxB,gBAAA,IAAI,MAAM,wBAAwB;AAAA,eAQjCK,MAAe,YAAY;AAEhC,YAAA,OAAOC,EAAQ,OAAQ;AACnB,gBAAA,IAAI,MAAM,2BAA2B;AAG3C,QAAAJ,EAAWI,EAAQ,GAAG;AAAA,MACxB,WACSD,MAAe,YAAY;AAEhC,YAAA,OAAOC,EAAQ,OAAQ;AACnB,gBAAA,IAAI,MAAM,2BAA2B;AACtC;AACC,gBAAAI,KAASJ,KAAA,gBAAAA,EAAS,YAAW;AACnC,iBAAO,KAAKA,EAAQ,KAAKI,IAAS,WAAW,OAAO;AAAA,QAAA;AAAA,MACtD;AAOF,UAAI,oBAAoBJ,GAAS;AAE3B,YAAA,OAAOA,EAAQ,kBAAmB;AAC9B,gBAAA,IAAI,MAAM,iCAAiC;AAC5C;AAEC,gBAAAK,IAAc,IAAI,IAAIL,EAAQ,gBAAgB,OAAO,SAAS,MAAM,EAAE;AAC5E,kBAAQ,IAAIK,CAAW;AAEjB,gBAAAC,IAAO,SAAS,cAAc,GAAG;AACvC,UAAAA,EAAK,OAAOD,GACZC,EAAK,SAAS,UACdA,EAAK,MAAM,uBAGXA,EAAK,WAAW,IAEP,SAAA,KAAK,YAAYA,CAAI,GAC9BA,EAAK,MAAM,GACF,SAAA,KAAK,YAAYA,CAAI;AAAA,QAAA;AAAA,MAChC;AAGF,UAAI,qBAAqBN,GAAS;AAE5B,YAAA,OAAOA,EAAQ,mBAAoB;AAC/B,gBAAA,IAAI,MAAM,kCAAkC;AAGlD,kBAAU,UAAU,UAAUA,EAAQ,eAAe,EAAE,MAAM,CAACO,MAAQ;AAC5D,kBAAA,MAAM,qCAAqCA,CAAG;AAAA,QAAA,CACvD;AAAA,MACH;AAGF,UAAI,kBAAkBP,GAAS;AAC7B,YAAI,CAAC,MAAM,QAAQA,EAAQ,YAAY;AAC/B,gBAAA,IAAI,MAAM,+BAA+B;AAG7C,QAAAA,EAAQ,aAAa,UACvBH,EAASW,EAAI,KAAK,eAAeR,EAAQ,YAAY,CAAC;AAAA,MACxD;AAAA;AAAA,EAGJ,EAE6B;AAC/B;"}
1
+ {"version":3,"file":"useActionTriggers.es.js","sources":["../../../../src/hooks/useActionTriggers.ts"],"sourcesContent":["import { useDispatch } from 'react-redux'\nimport { api } from '@shared/api'\nimport { useCustomProtocolCheck } from './useCustomProtocolCheck'\n\n\nexport type ActionTriggersProps = {\n searchParams: URLSearchParams\n onSetSearchParams: (params: URLSearchParams) => void\n onNavigate: (uri: string) => void\n}\n\ninterface QueryParams {\n [key: string]: string\n}\n\ninterface ActionPayload {\n query?: QueryParams // adds query params to the URL\n uri?: string // navigates to a different page\n new_tab?: boolean // opens a new tab\n extra_download?: string // triggers a file download from a URL\n extra_clipboard?: string // copies string content to clipboard\n extra_reload?: string[] // list of tags to invalidate\n [key: string]: any\n}\n\nexport const useActionTriggers = ({\n searchParams,\n onSetSearchParams,\n onNavigate,\n}: ActionTriggersProps) => {\n const dispatch = useDispatch()\n \n const { checkProtocol } = useCustomProtocolCheck({\n timeout: 2000,\n showSuccessMessage: false,\n showErrorMessage: true,\n enableFallback: true\n })\n \n const handleActionPayload = async (actionType: string, payload: ActionPayload | null): Promise<void> => {\n if (!payload) return\n\n if (actionType === 'launcher') {\n if (payload?.uri) {\n try {\n const success = await checkProtocol(payload.uri)\n \n if (!success) {\n console.log('Protocol launch failed - AYON client may not be running')\n }\n } catch (error) {\n console.error('Protocol launch error:', error)\n }\n } else {\n console.warn('Launcher action has no URI:', payload)\n }\n } else if (actionType === 'query') {\n // Validate it is an object of key:value pairs with value being string\n const isValid = Object.values(payload.query as QueryParams).every((value) => {\n return typeof value === 'string'\n })\n\n if (!isValid) {\n throw new Error('Invalid payload: query')\n } else {\n // Add query params to URL\n for (const [key, value] of Object.entries(payload.query as QueryParams)) {\n searchParams.set(key, value)\n }\n onSetSearchParams(searchParams)\n }\n } else if (actionType === 'navigate') {\n // Validate it is a string\n if (typeof payload.uri !== 'string') {\n throw new Error('Invalid payload: navigate')\n } else {\n // Navigate to the specified page\n onNavigate(payload.uri)\n }\n } else if (actionType === 'redirect') {\n // Validate it is a string\n if (typeof payload.uri !== 'string') {\n throw new Error('Invalid payload: redirect')\n } else {\n const newTab = payload?.new_tab || false\n window.open(payload.uri, newTab ? '_blank' : '_self')\n }\n }\n\n //\n // Sub-actions\n //\n\n if ('extra_download' in payload) {\n // Validate it is a string\n if (typeof payload.extra_download !== 'string') {\n throw new Error('Invalid payload: extra_download')\n } else {\n // Trigger file download from the URL\n const downloadUrl = new URL(payload.extra_download, window.location.origin).href\n console.log(downloadUrl)\n // Create a hidden anchor element\n const link = document.createElement('a')\n link.href = downloadUrl\n link.target = '_blank'\n link.rel = 'noopener noreferrer'\n // Set download attribute if it's a direct file download\n // If it's an API endpoint that handles the download, this is still good\n link.download = ''\n // Append to document, click and then remove\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n }\n }\n\n if ('extra_clipboard' in payload) {\n // Validate it is a string\n if (typeof payload.extra_clipboard !== 'string') {\n throw new Error('Invalid payload: extra_clipboard')\n } else {\n // Copy content to clipboard\n navigator.clipboard.writeText(payload.extra_clipboard).catch((err) => {\n console.error('Failed to copy text to clipboard:', err)\n })\n }\n }\n\n if ('extra_reload' in payload) {\n if (!Array.isArray(payload.extra_reload)) {\n throw new Error('Invalid payload: extra_reload')\n }\n\n if (payload.extra_reload.length) {\n dispatch(api.util.invalidateTags(payload.extra_reload))\n }\n }\n\n }\n\n return { handleActionPayload }\n}"],"names":["useActionTriggers","searchParams","onSetSearchParams","onNavigate","dispatch","useDispatch","checkProtocol","useCustomProtocolCheck","actionType","payload","error","value","key","newTab","downloadUrl","link","err","api"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,MAAMA,KAAoB,CAAC;AAAA,EAChC,cAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,YAAAC;AACF,MAA2B;AACzB,QAAMC,IAAWC,EAAY,GAEvB,EAAE,eAAAC,EAAc,IAAIC,EAAuB;AAAA,IAC/C,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,EAAA,CACjB;AAuGD,SAAO,EAAE,qBArGmB,OAAOC,GAAoBC,MAAiD;AACtG,QAAKA,GAEL;AAAA,UAAID,MAAe;AACjB,YAAIC,KAAA,QAAAA,EAAS;AACP,cAAA;AAGF,YAFgB,MAAMH,EAAcG,EAAQ,GAAG,KAG7C,QAAQ,IAAI,yDAAyD;AAAA,mBAEhEC,GAAO;AACN,oBAAA,MAAM,0BAA0BA,CAAK;AAAA,UAAA;AAAA;AAGvC,kBAAA,KAAK,+BAA+BD,CAAO;AAAA,eAE5CD,MAAe;AAMxB,YAJgB,OAAO,OAAOC,EAAQ,KAAoB,EAAE,MAAM,CAACE,MAC1D,OAAOA,KAAU,QACzB,GAIM;AAEM,qBAAA,CAACC,GAAKD,CAAK,KAAK,OAAO,QAAQF,EAAQ,KAAoB;AACvD,YAAAR,EAAA,IAAIW,GAAKD,CAAK;AAE7B,UAAAT,EAAkBD,CAAY;AAAA,QAAA;AANxB,gBAAA,IAAI,MAAM,wBAAwB;AAAA,eAQjCO,MAAe,YAAY;AAEhC,YAAA,OAAOC,EAAQ,OAAQ;AACnB,gBAAA,IAAI,MAAM,2BAA2B;AAG3C,QAAAN,EAAWM,EAAQ,GAAG;AAAA,MACxB,WACSD,MAAe,YAAY;AAEhC,YAAA,OAAOC,EAAQ,OAAQ;AACnB,gBAAA,IAAI,MAAM,2BAA2B;AACtC;AACC,gBAAAI,KAASJ,KAAA,gBAAAA,EAAS,YAAW;AACnC,iBAAO,KAAKA,EAAQ,KAAKI,IAAS,WAAW,OAAO;AAAA,QAAA;AAAA,MACtD;AAOF,UAAI,oBAAoBJ,GAAS;AAE3B,YAAA,OAAOA,EAAQ,kBAAmB;AAC9B,gBAAA,IAAI,MAAM,iCAAiC;AAC5C;AAEC,gBAAAK,IAAc,IAAI,IAAIL,EAAQ,gBAAgB,OAAO,SAAS,MAAM,EAAE;AAC5E,kBAAQ,IAAIK,CAAW;AAEjB,gBAAAC,IAAO,SAAS,cAAc,GAAG;AACvC,UAAAA,EAAK,OAAOD,GACZC,EAAK,SAAS,UACdA,EAAK,MAAM,uBAGXA,EAAK,WAAW,IAEP,SAAA,KAAK,YAAYA,CAAI,GAC9BA,EAAK,MAAM,GACF,SAAA,KAAK,YAAYA,CAAI;AAAA,QAAA;AAAA,MAChC;AAGF,UAAI,qBAAqBN,GAAS;AAE5B,YAAA,OAAOA,EAAQ,mBAAoB;AAC/B,gBAAA,IAAI,MAAM,kCAAkC;AAGlD,kBAAU,UAAU,UAAUA,EAAQ,eAAe,EAAE,MAAM,CAACO,MAAQ;AAC5D,kBAAA,MAAM,qCAAqCA,CAAG;AAAA,QAAA,CACvD;AAAA,MACH;AAGF,UAAI,kBAAkBP,GAAS;AAC7B,YAAI,CAAC,MAAM,QAAQA,EAAQ,YAAY;AAC/B,gBAAA,IAAI,MAAM,+BAA+B;AAG7C,QAAAA,EAAQ,aAAa,UACvBL,EAASa,EAAI,KAAK,eAAeR,EAAQ,YAAY,CAAC;AAAA,MACxD;AAAA;AAAA,EAGJ,EAE6B;AAC/B;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("react"),f=require("custom-protocol-check"),a=require("react-toastify"),P=(n={})=>{const{timeout:t=2e3,showSuccessMessage:l=!1,showErrorMessage:o=!0,enableFallback:u=!0}=n;return{checkProtocol:m.useCallback(i=>new Promise(h=>{let c=!1;const e=s=>{c||(c=!0,h(s))},r=setTimeout(()=>{e(!1)},t+500);try{f(i,()=>{clearTimeout(r),e(!0)},()=>{clearTimeout(r),o&&a.toast.error("AYON client is not running. Please start the AYON client application and try again.",{autoClose:8e3,toastId:"ayon-client-not-running"}),e(!1)},t)}catch{clearTimeout(r),o&&a.toast.error("Failed to launch AYON client action"),e(!1)}}),[t,l,o,u])}};exports.useCustomProtocolCheck=P;
2
+ //# sourceMappingURL=useCustomProtocolCheck.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCustomProtocolCheck.cjs.js","sources":["../../../../src/hooks/useCustomProtocolCheck.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport customProtocolCheck from 'custom-protocol-check'\nimport { toast } from 'react-toastify'\n\ninterface UseCustomProtocolCheckOptions {\n timeout?: number\n showSuccessMessage?: boolean\n showErrorMessage?: boolean\n enableFallback?: boolean\n}\n\nexport const useCustomProtocolCheck = (options: UseCustomProtocolCheckOptions = {}) => {\n const {\n timeout = 2000,\n showSuccessMessage = false,\n showErrorMessage = true,\n enableFallback = true,\n } = options\n\n const checkProtocol = useCallback((uri: string): Promise<boolean> => {\n return new Promise((resolve) => {\n let hasResolved = false\n \n const resolveOnce = (result: boolean) => {\n if (hasResolved) return\n hasResolved = true\n resolve(result)\n }\n\n const timeoutId = setTimeout(() => {\n resolveOnce(false)\n }, timeout + 500) // Add a small buffer to the timeout\n\n try {\n customProtocolCheck(\n uri,\n () => {\n clearTimeout(timeoutId)\n \n // On success: show nothing\n \n resolveOnce(true)\n },\n () => {\n clearTimeout(timeoutId)\n if (showErrorMessage) {\n toast.error(\n 'AYON client is not running. Please start the AYON client application and try again.',\n { \n autoClose: 8000,\n toastId: 'ayon-client-not-running'\n }\n )\n }\n resolveOnce(false)\n },\n timeout\n )\n } catch (error) {\n clearTimeout(timeoutId)\n if (showErrorMessage) {\n toast.error('Failed to launch AYON client action')\n }\n resolveOnce(false)\n }\n })\n }, [timeout, showSuccessMessage, showErrorMessage, enableFallback])\n\n return { checkProtocol }\n}\n"],"names":["useCustomProtocolCheck","options","timeout","showSuccessMessage","showErrorMessage","enableFallback","useCallback","uri","resolve","hasResolved","resolveOnce","result","timeoutId","customProtocolCheck","toast"],"mappings":"wKAWaA,EAAyB,CAACC,EAAyC,KAAO,CAC/E,KAAA,CACJ,QAAAC,EAAU,IACV,mBAAAC,EAAqB,GACrB,iBAAAC,EAAmB,GACnB,eAAAC,EAAiB,EAAA,EACfJ,EAmDJ,MAAO,CAAE,cAjDaK,cAAaC,GAC1B,IAAI,QAASC,GAAY,CAC9B,IAAIC,EAAc,GAEZ,MAAAC,EAAeC,GAAoB,CACnCF,IACUA,EAAA,GACdD,EAAQG,CAAM,EAChB,EAEMC,EAAY,WAAW,IAAM,CACjCF,EAAY,EAAK,CAAA,EAChBR,EAAU,GAAG,EAEZ,GAAA,CACFW,EACEN,EACA,IAAM,CACJ,aAAaK,CAAS,EAItBF,EAAY,EAAI,CAClB,EACA,IAAM,CACJ,aAAaE,CAAS,EAClBR,GACIU,EAAAA,MAAA,MACJ,sFACA,CACE,UAAW,IACX,QAAS,yBAAA,CAEb,EAEFJ,EAAY,EAAK,CACnB,EACAR,CACF,OACc,CACd,aAAaU,CAAS,EAClBR,GACFU,EAAA,MAAM,MAAM,qCAAqC,EAEnDJ,EAAY,EAAK,CAAA,CACnB,CACD,EACA,CAACR,EAASC,EAAoBC,EAAkBC,CAAc,CAAC,CAE3C,CACzB"}
@@ -0,0 +1,43 @@
1
+ import { useCallback as f } from "react";
2
+ import h from "custom-protocol-check";
3
+ import { toast as a } from "react-toastify";
4
+ const g = (l = {}) => {
5
+ const {
6
+ timeout: t = 2e3,
7
+ showSuccessMessage: n = !1,
8
+ showErrorMessage: o = !0,
9
+ enableFallback: i = !0
10
+ } = l;
11
+ return { checkProtocol: f((u) => new Promise((m) => {
12
+ let c = !1;
13
+ const e = (s) => {
14
+ c || (c = !0, m(s));
15
+ }, r = setTimeout(() => {
16
+ e(!1);
17
+ }, t + 500);
18
+ try {
19
+ h(
20
+ u,
21
+ () => {
22
+ clearTimeout(r), e(!0);
23
+ },
24
+ () => {
25
+ clearTimeout(r), o && a.error(
26
+ "AYON client is not running. Please start the AYON client application and try again.",
27
+ {
28
+ autoClose: 8e3,
29
+ toastId: "ayon-client-not-running"
30
+ }
31
+ ), e(!1);
32
+ },
33
+ t
34
+ );
35
+ } catch {
36
+ clearTimeout(r), o && a.error("Failed to launch AYON client action"), e(!1);
37
+ }
38
+ }), [t, n, o, i]) };
39
+ };
40
+ export {
41
+ g as useCustomProtocolCheck
42
+ };
43
+ //# sourceMappingURL=useCustomProtocolCheck.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCustomProtocolCheck.es.js","sources":["../../../../src/hooks/useCustomProtocolCheck.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport customProtocolCheck from 'custom-protocol-check'\nimport { toast } from 'react-toastify'\n\ninterface UseCustomProtocolCheckOptions {\n timeout?: number\n showSuccessMessage?: boolean\n showErrorMessage?: boolean\n enableFallback?: boolean\n}\n\nexport const useCustomProtocolCheck = (options: UseCustomProtocolCheckOptions = {}) => {\n const {\n timeout = 2000,\n showSuccessMessage = false,\n showErrorMessage = true,\n enableFallback = true,\n } = options\n\n const checkProtocol = useCallback((uri: string): Promise<boolean> => {\n return new Promise((resolve) => {\n let hasResolved = false\n \n const resolveOnce = (result: boolean) => {\n if (hasResolved) return\n hasResolved = true\n resolve(result)\n }\n\n const timeoutId = setTimeout(() => {\n resolveOnce(false)\n }, timeout + 500) // Add a small buffer to the timeout\n\n try {\n customProtocolCheck(\n uri,\n () => {\n clearTimeout(timeoutId)\n \n // On success: show nothing\n \n resolveOnce(true)\n },\n () => {\n clearTimeout(timeoutId)\n if (showErrorMessage) {\n toast.error(\n 'AYON client is not running. Please start the AYON client application and try again.',\n { \n autoClose: 8000,\n toastId: 'ayon-client-not-running'\n }\n )\n }\n resolveOnce(false)\n },\n timeout\n )\n } catch (error) {\n clearTimeout(timeoutId)\n if (showErrorMessage) {\n toast.error('Failed to launch AYON client action')\n }\n resolveOnce(false)\n }\n })\n }, [timeout, showSuccessMessage, showErrorMessage, enableFallback])\n\n return { checkProtocol }\n}\n"],"names":["useCustomProtocolCheck","options","timeout","showSuccessMessage","showErrorMessage","enableFallback","useCallback","uri","resolve","hasResolved","resolveOnce","result","timeoutId","customProtocolCheck","toast"],"mappings":";;;AAWO,MAAMA,IAAyB,CAACC,IAAyC,OAAO;AAC/E,QAAA;AAAA,IACJ,SAAAC,IAAU;AAAA,IACV,oBAAAC,IAAqB;AAAA,IACrB,kBAAAC,IAAmB;AAAA,IACnB,gBAAAC,IAAiB;AAAA,EAAA,IACfJ;AAmDJ,SAAO,EAAE,eAjDaK,EAAY,CAACC,MAC1B,IAAI,QAAQ,CAACC,MAAY;AAC9B,QAAIC,IAAc;AAEZ,UAAAC,IAAc,CAACC,MAAoB;AACvC,MAAIF,MACUA,IAAA,IACdD,EAAQG,CAAM;AAAA,IAChB,GAEMC,IAAY,WAAW,MAAM;AACjC,MAAAF,EAAY,EAAK;AAAA,IAAA,GAChBR,IAAU,GAAG;AAEZ,QAAA;AACF,MAAAW;AAAA,QACEN;AAAA,QACA,MAAM;AACJ,uBAAaK,CAAS,GAItBF,EAAY,EAAI;AAAA,QAClB;AAAA,QACA,MAAM;AACJ,uBAAaE,CAAS,GAClBR,KACIU,EAAA;AAAA,YACJ;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,SAAS;AAAA,YAAA;AAAA,UAEb,GAEFJ,EAAY,EAAK;AAAA,QACnB;AAAA,QACAR;AAAA,MACF;AAAA,YACc;AACd,mBAAaU,CAAS,GAClBR,KACFU,EAAM,MAAM,qCAAqC,GAEnDJ,EAAY,EAAK;AAAA,IAAA;AAAA,EACnB,CACD,GACA,CAACR,GAASC,GAAoBC,GAAkBC,CAAc,CAAC,EAE3C;AACzB;"}
@@ -1,6 +1,8 @@
1
+ import { ProjectTableAttribute } from '../ProjectTreeTable/hooks/useAttributesList';
1
2
  import { SelectionData, SliceFilter, SliceType } from './types';
2
- export type CreateFilterFromSlicer = ({ selection, type, }: {
3
+ export type CreateFilterFromSlicer = ({ selection, type, attribFields, }: {
3
4
  selection: SelectionData;
4
5
  type: SliceType;
6
+ attribFields: ProjectTableAttribute[];
5
7
  }) => SliceFilter | null;
6
8
  export declare const createFilterFromSlicer: CreateFilterFromSlicer;
@@ -1,5 +1,5 @@
1
1
  import { FilterValue } from '@ynput/ayon-react-components';
2
- export type SliceType = 'hierarchy' | 'assignees' | 'status' | 'type' | 'taskType';
2
+ export type SliceType = 'hierarchy' | 'assignees' | 'status' | 'type' | 'taskType' | string;
3
3
  export type SliceDataItem = {
4
4
  id: string;
5
5
  name?: string | null;
@@ -6,6 +6,7 @@ export interface ViewFormDialogProps {
6
6
  viewId?: string;
7
7
  };
8
8
  setEditingView: (viewId: string | null) => void;
9
+ isLoading: boolean;
9
10
  viewType: ViewType;
10
11
  viewSettings?: ViewSettings;
11
12
  currentUser?: UserModel;
@@ -22,6 +22,7 @@ export interface ViewsContextValue {
22
22
  editingViewId: string | undefined;
23
23
  viewMenuItems: ViewMenuItem[];
24
24
  editingViewData?: ViewData;
25
+ isLoadingEditingViewData: boolean;
25
26
  isLoadingViews: boolean;
26
27
  isViewWorking: boolean;
27
28
  shareOptions?: ShareOption[];
@@ -47,4 +48,4 @@ export interface ViewsProviderProps {
47
48
  }
48
49
  export declare const ViewsProvider: FC<ViewsProviderProps>;
49
50
  export declare const useViewsContext: () => ViewsContextValue;
50
- export declare const isViewProjectScope: (viewId: string | undefined, viewsList: ViewListItemModel[]) => boolean;
51
+ export declare const isViewStudioScope: (viewId: string | undefined, viewsList: ViewListItemModel[]) => boolean;
@@ -8,9 +8,9 @@ type Props = {
8
8
  onDelete?: (viewId: string) => void;
9
9
  };
10
10
  export type UseViewMutations = {
11
- onCreateView: (payload: CreateViewApiArg['payload'], isProjectScope: boolean) => Promise<void>;
12
- onDeleteView: (viewId: string, isProjectScope: boolean) => Promise<void>;
13
- onUpdateView: (viewId: string, payload: Partial<ViewData>, isProjectScope: boolean) => Promise<void>;
11
+ onCreateView: (payload: CreateViewApiArg['payload'], isStudioScope: boolean) => Promise<void>;
12
+ onDeleteView: (viewId: string, isStudioScope: boolean) => Promise<void>;
13
+ onUpdateView: (viewId: string, payload: Partial<ViewData>, isStudioScope: boolean) => Promise<void>;
14
14
  onResetWorkingView: (args?: {
15
15
  existingWorkingViewId?: string;
16
16
  selectedViewId?: string;
@@ -16,6 +16,6 @@ interface ActionPayload {
16
16
  [key: string]: any;
17
17
  }
18
18
  export declare const useActionTriggers: ({ searchParams, onSetSearchParams, onNavigate, }: ActionTriggersProps) => {
19
- handleActionPayload: (actionType: string, payload: ActionPayload | null) => void;
19
+ handleActionPayload: (actionType: string, payload: ActionPayload | null) => Promise<void>;
20
20
  };
21
21
  export {};
@@ -0,0 +1,10 @@
1
+ interface UseCustomProtocolCheckOptions {
2
+ timeout?: number;
3
+ showSuccessMessage?: boolean;
4
+ showErrorMessage?: boolean;
5
+ enableFallback?: boolean;
6
+ }
7
+ export declare const useCustomProtocolCheck: (options?: UseCustomProtocolCheckOptions) => {
8
+ checkProtocol: (uri: string) => Promise<boolean>;
9
+ };
10
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ynput/ayon-frontend-shared",
3
- "version": "0.2.25",
3
+ "version": "0.2.26",
4
4
  "description": "Shared React components for AYON frontend",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.es.js",