@equinor/subsurface-app-management 4.0.1 → 4.1.0

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.
@@ -1 +1 @@
1
- import{jsx as o,Fragment as e}from"react/jsx-runtime";import"../../providers/FeatureToggleProvider.js";import{useFeatureToggling as r}from"../../hooks/useFeatureToggling.js";import"@tanstack/react-query";import"../../api/core/OpenAPI.js";import"../../api/models/ApplicationCategory.js";import"../../api/models/ServiceNowUrgency.js";import"../../api/models/TutorialPosition.js";import"../../types/Environment.js";import"../../types/ReleaseNotes.js";const t=({children:t,fallback:i,...s})=>{const{showContent:p}=r({...s});return p?o(e,{children:t}):void 0===i?null:o(e,{children:i})};export{t as Feature};
1
+ import{jsx as o,Fragment as r}from"react/jsx-runtime";import"../../providers/FeatureToggleProvider.js";import{useFeatureToggling as e}from"../../hooks/useFeatureToggling.js";import"@tanstack/react-query";import"../../api/core/OpenAPI.js";import"../../api/models/ApplicationCategory.js";import"../../api/models/ServiceNowUrgency.js";import"../../api/models/TutorialPosition.js";import"../../types/Environment.js";import"../../types/ReleaseNotes.js";import"react";import"@microsoft/signalr";const t=({children:t,fallback:i,...s})=>{const{showContent:p}=e({...s});return p?o(r,{children:t}):void 0===i?null:o(r,{children:i})};export{t as Feature};
@@ -3,3 +3,4 @@ export { useFeatureToggling } from './useFeatureToggling';
3
3
  export { useReleaseNotesQuery } from './useReleaseNotesQuery';
4
4
  export { useTutorialsQuery } from './useTutorialsQuery';
5
5
  export { useTutorialStepImage } from './useTutorialStepImage';
6
+ export { useSignalRMessages } from './useSignalRMessages';
@@ -0,0 +1,12 @@
1
+ export declare function useSignalRMessages<T extends {
2
+ SequenceNumber?: number | null;
3
+ Read?: boolean | null;
4
+ Subject?: string | null;
5
+ }>(topic: string): {
6
+ messages: T[];
7
+ hasUnreadMessages: boolean;
8
+ setMessageAsRead: (message: T) => void;
9
+ setAllMessagesAsRead: () => void;
10
+ deleteMessage: (message: T) => Promise<void>;
11
+ closeConnection: () => Promise<void>;
12
+ };
@@ -0,0 +1 @@
1
+ import{useRef as e,useState as r,useMemo as t,useEffect as n}from"react";import*as o from"@microsoft/signalr";import{LogLevel as i}from"@microsoft/signalr";import{useQuery as s}from"@tanstack/react-query";import{getJSEmbarkToken as c}from"../api/core/OpenAPI.js";import"../api/models/ApplicationCategory.js";import"../api/models/ServiceNowUrgency.js";import"../api/models/TutorialPosition.js";import{EnvironmentType as a}from"../types/Environment.js";import{getEnvironmentName as u}from"../utils/environment.js";function m(m){const p=e(void 0),[d,l]=r([]),[f,g]=r(),[b,v]=r(),w=e(void 0),y=e(void 0),{data:S}=s({queryKey:["get-amplify-portal-token"],queryFn:()=>c()}),N=t((()=>{const e=u(import.meta.env.VITE_ENVIRONMENT_NAME);return`wss://api-amplify-portal-${e===a.LOCALHOST?a.DEVELOP:e}.radix.equinor.com`}),[]);n((()=>{(async function(){if(void 0===S||w.current===m&&y.current===S)return;void 0!==p.current&&w.current&&y.current&&(w.current!==m||y.current!==S)&&await p.current.stop(),y.current=S,w.current=m;const e=(new o.HubConnectionBuilder).configureLogging(i.Error).withUrl(`${N}/hubs/notifications`,{accessTokenFactory:()=>S,withCredentials:!1,skipNegotiation:!0,transport:o.HttpTransportType.WebSockets}).withAutomaticReconnect().build();try{await e.start(),e.on("ActiveMessages",((e,r)=>{l(r.map((r=>({...r,Subject:e}))).reverse())})),e.onreconnected((()=>e.invoke("Subscribe",m))),e.on("NewMessage",((e,r)=>{l((t=>[{...r,Subject:e},...t]))})),e.on("UpdateMessage",((e,r)=>{v({...r,Subject:e})})),e.on("Delete",((e,r)=>{g(r)})),e.on("Error",(e=>{throw new Error("Connection error: "+e)})),await e.invoke("Subscribe",m),await e.invoke("PeekMessages")}catch(e){console.error("Connection failed",e)}p.current=e})().catch((e=>{console.error("Error setting up connection",e)}))}),[N,m,S]),n((()=>{if(b){const e=d.findIndex((e=>e.SequenceNumber===b.SequenceNumber)),r=[...d];e>-1&&(r[e]=b,l(r),v(void 0))}}),[b,d]),n((()=>{if(f){const e=d.findIndex((e=>e.SequenceNumber===f)),r=[...d];e>-1&&(r.splice(e,1),l(r),g(void 0))}}),[f,d]);const E=e=>{p.current&&(e.Read=!e.Read,p.current.invoke("PatchMessage",e.SequenceNumber,e).catch((e=>{console.error("Error setting message as read",e)})))},M=t((()=>d.some((e=>!1===e.Read))),[d]);return{messages:d,hasUnreadMessages:M,setMessageAsRead:E,setAllMessagesAsRead:()=>{d.forEach((e=>{e.Read||E(e)}))},deleteMessage:async function(e){p.current&&null!==e.SequenceNumber&&(await p.current.invoke("DeleteMessage",e.SequenceNumber),g(e.SequenceNumber))},closeConnection:async()=>{if(p.current)return await p.current.stop()}}}export{m as useSignalRMessages};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{Feature}from"./components/Feature/Feature.js";export{FeatureRoute}from"./components/FeatureRoute/FeatureRoute.js";export{FeatureToggleProvider,useFeatureToggleContext}from"./providers/FeatureToggleProvider.js";export{useFeatureToggling}from"./hooks/useFeatureToggling.js";export{useReleaseNotesQuery}from"./hooks/useReleaseNotesQuery.js";export{useTutorialsQuery}from"./hooks/useTutorialsQuery.js";export{useTutorialStepImage}from"./hooks/useTutorialStepImage.js";export{TutorialProvider,useTutorials}from"./providers/TutorialProvider/TutorialProvider.js";export{ApplicationInsightsProvider}from"./providers/ApplicationInsightsProvider.js";export{EnvironmentType}from"./types/Environment.js";export{RELEASENOTE_TYPES_INFORMATION,ReleaseNoteType}from"./types/ReleaseNotes.js";import*as e from"./utils/environment.js";export{e as environment};export{ApiError}from"./api/core/ApiError.js";export{CancelError,CancelablePromise}from"./api/core/CancelablePromise.js";export{OpenAPI_APP,getJSEmbarkToken,getPortalToken,getSAMToken}from"./api/core/OpenAPI.js";export{request}from"./api/core/request.js";export{ApplicationCategory}from"./api/models/ApplicationCategory.js";export{ServiceNowUrgency}from"./api/models/ServiceNowUrgency.js";export{TutorialPosition}from"./api/models/TutorialPosition.js";export{AmplifyApplicationService}from"./api/services/AmplifyApplicationService.js";export{FeatureToggleService}from"./api/services/FeatureToggleService.js";export{ImpersonateUserService}from"./api/services/ImpersonateUserService.js";export{ReleaseNotesService}from"./api/services/ReleaseNotesService.js";export{ServiceNowService}from"./api/services/ServiceNowService.js";export{SlackService}from"./api/services/SlackService.js";export{TutorialService}from"./api/services/TutorialService.js";export{GET_FEATURE_TOGGLES_FOR_APP,GET_RELEASE_NOTES,GET_TUTORIALS_FOR_APP,GET_TUTORIALS_SAS_TOKEN,GET_TUTORIAL_STEP_IMAGE,SAM_QUERIES}from"./constants/queryKeys.js";
1
+ export{Feature}from"./components/Feature/Feature.js";export{FeatureRoute}from"./components/FeatureRoute/FeatureRoute.js";export{FeatureToggleProvider,useFeatureToggleContext}from"./providers/FeatureToggleProvider.js";export{useFeatureToggling}from"./hooks/useFeatureToggling.js";export{useReleaseNotesQuery}from"./hooks/useReleaseNotesQuery.js";export{useTutorialsQuery}from"./hooks/useTutorialsQuery.js";export{useTutorialStepImage}from"./hooks/useTutorialStepImage.js";export{useSignalRMessages}from"./hooks/useSignalRMessages.js";export{TutorialProvider,useTutorials}from"./providers/TutorialProvider/TutorialProvider.js";export{ApplicationInsightsProvider}from"./providers/ApplicationInsightsProvider.js";export{EnvironmentType}from"./types/Environment.js";export{RELEASENOTE_TYPES_INFORMATION,ReleaseNoteType}from"./types/ReleaseNotes.js";import*as e from"./utils/environment.js";export{e as environment};export{ApiError}from"./api/core/ApiError.js";export{CancelError,CancelablePromise}from"./api/core/CancelablePromise.js";export{OpenAPI_APP,getJSEmbarkToken,getPortalToken,getSAMToken}from"./api/core/OpenAPI.js";export{request}from"./api/core/request.js";export{ApplicationCategory}from"./api/models/ApplicationCategory.js";export{ServiceNowUrgency}from"./api/models/ServiceNowUrgency.js";export{TutorialPosition}from"./api/models/TutorialPosition.js";export{AmplifyApplicationService}from"./api/services/AmplifyApplicationService.js";export{FeatureToggleService}from"./api/services/FeatureToggleService.js";export{ImpersonateUserService}from"./api/services/ImpersonateUserService.js";export{ReleaseNotesService}from"./api/services/ReleaseNotesService.js";export{ServiceNowService}from"./api/services/ServiceNowService.js";export{SlackService}from"./api/services/SlackService.js";export{TutorialService}from"./api/services/TutorialService.js";export{GET_FEATURE_TOGGLES_FOR_APP,GET_RELEASE_NOTES,GET_TUTORIALS_FOR_APP,GET_TUTORIALS_SAS_TOKEN,GET_TUTORIAL_STEP_IMAGE,SAM_QUERIES}from"./constants/queryKeys.js";
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import{createContext as o,useState as t,useMemo as i,useContext as e}from"react";import{useLocation as s,matchPath as n}from"react-router";import{useSeenTutorials as a}from"./useSeenTutorials.js";import"../FeatureToggleProvider.js";import"@tanstack/react-query";import"../../api/core/OpenAPI.js";import{useTutorialsQuery as u}from"../../hooks/useTutorialsQuery.js";import{usePrefetchTutorialStepImages as d}from"./hooks/usePrefetchTutorialStepImages.js";const l=o(void 0);function p(){const r=e(l);if(void 0===r)throw new Error("'useTutorials' must be used within provider");return r}const c=({children:o})=>{const{pathname:e}=s(),{data:p=[]}=u(),[c,v]=t(void 0),[f,m]=t(void 0),[h,T]=a();d();const w=i((()=>p?.filter((r=>null!==n(r.path,e)))),[e,p]),g=i((()=>w?.filter((r=>!h.includes(r.id)&&r.willPopUp))),[h,w]);return r(l.Provider,{value:{allTutorials:p,tutorialsOnThisPage:w,unseenTutorialsOnThisPage:g,activeTutorial:c,activeStep:f,seenTutorialIDs:h,startTutorial:r=>{if(!p?.some((o=>r===o.id)))throw new Error("Tutorial not found");v(p.find((o=>r===o.id))),m(0)},skipTutorial:r=>{c&&c.id===r&&(v(void 0),m(void 0)),T(r)},goToNextStep:()=>{if(!c)throw new Error("No currently active tutorial!");if(void 0===f)throw new Error("activeStep is undefined!");f+1>=c.steps.length?(T(c.id),v(void 0),m(void 0)):m(f+1)},goToPreviousStep:()=>{if(!c)throw new Error("No currently active tutorial!");if(void 0===f)throw new Error("activeStep is undefined!");0===f?(v(void 0),m(void 0)):m(f-1)}},children:o})};export{l as TutorialDataContext,c as TutorialProvider,p as useTutorials};
1
+ import{jsx as o}from"react/jsx-runtime";import{createContext as r,useState as i,useMemo as t,useContext as e}from"react";import{useLocation as s,matchPath as n}from"react-router";import{useSeenTutorials as a}from"./useSeenTutorials.js";import"../FeatureToggleProvider.js";import"@tanstack/react-query";import"../../api/core/OpenAPI.js";import{useTutorialsQuery as u}from"../../hooks/useTutorialsQuery.js";import"@microsoft/signalr";import"../../api/models/ApplicationCategory.js";import"../../api/models/ServiceNowUrgency.js";import"../../api/models/TutorialPosition.js";import"../../types/Environment.js";import{usePrefetchTutorialStepImages as l}from"./hooks/usePrefetchTutorialStepImages.js";const p=r(void 0);function d(){const o=e(p);if(void 0===o)throw new Error("'useTutorials' must be used within provider");return o}const m=({children:r})=>{const{pathname:e}=s(),{data:d=[]}=u(),[m,c]=i(void 0),[v,f]=i(void 0),[h,T]=a();l();const w=t((()=>d?.filter((o=>null!==n(o.path,e)))),[e,d]),g=t((()=>w?.filter((o=>!h.includes(o.id)&&o.willPopUp))),[h,w]);return o(p.Provider,{value:{allTutorials:d,tutorialsOnThisPage:w,unseenTutorialsOnThisPage:g,activeTutorial:m,activeStep:v,seenTutorialIDs:h,startTutorial:o=>{if(!d?.some((r=>o===r.id)))throw new Error("Tutorial not found");c(d.find((r=>o===r.id))),f(0)},skipTutorial:o=>{m&&m.id===o&&(c(void 0),f(void 0)),T(o)},goToNextStep:()=>{if(!m)throw new Error("No currently active tutorial!");if(void 0===v)throw new Error("activeStep is undefined!");v+1>=m.steps.length?(T(m.id),c(void 0),f(void 0)):f(v+1)},goToPreviousStep:()=>{if(!m)throw new Error("No currently active tutorial!");if(void 0===v)throw new Error("activeStep is undefined!");0===v?(c(void 0),f(void 0)):f(v-1)}},children:r})};export{p as TutorialDataContext,m as TutorialProvider,d as useTutorials};
@@ -1 +1 @@
1
- import{useRef as r,useEffect as e}from"react";import{useQueryClient as o}from"@tanstack/react-query";import{TutorialService as t}from"../../../api/services/TutorialService.js";import{GET_TUTORIAL_STEP_IMAGE as i}from"../../../constants/queryKeys.js";import"../../FeatureToggleProvider.js";import"../../../api/core/OpenAPI.js";import{useTutorialsQuery as s}from"../../../hooks/useTutorialsQuery.js";function m(){const{data:m=[]}=s(),c=o(),u=r([]);e((()=>{const r=r=>{for(const e of r.steps)e.imgUrl&&c.prefetchQuery({queryKey:[i,e.imgUrl],queryFn:()=>t.getTutorialImage(e.imgUrl),staleTime:1/0,gcTime:1/0})};for(const e of m)u.current.includes(e.id)||(u.current.push(e.id),r(e))}),[c,m])}export{m as usePrefetchTutorialStepImages};
1
+ import{useRef as r,useEffect as o}from"react";import{useQueryClient as e}from"@tanstack/react-query";import{TutorialService as t}from"../../../api/services/TutorialService.js";import{GET_TUTORIAL_STEP_IMAGE as i}from"../../../constants/queryKeys.js";import"../../FeatureToggleProvider.js";import"../../../api/core/OpenAPI.js";import{useTutorialsQuery as s}from"../../../hooks/useTutorialsQuery.js";import"@microsoft/signalr";import"../../../api/models/ApplicationCategory.js";import"../../../api/models/ServiceNowUrgency.js";import"../../../api/models/TutorialPosition.js";import"../../../types/Environment.js";function m(){const{data:m=[]}=s(),p=e(),a=r([]);o((()=>{const r=r=>{for(const o of r.steps)o.imgUrl&&p.prefetchQuery({queryKey:[i,o.imgUrl],queryFn:()=>t.getTutorialImage(o.imgUrl),staleTime:1/0,gcTime:1/0})};for(const o of m)a.current.includes(o.id)||(a.current.push(o.id),r(o))}),[p,m])}export{m as usePrefetchTutorialStepImages};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@equinor/subsurface-app-management",
3
- "version": "4.0.1",
3
+ "version": "4.1.0",
4
4
  "description": "React Typescript components/hooks to communicate with equinor/sam",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -113,6 +113,7 @@
113
113
  "@microsoft/applicationinsights-clickanalytics-js": "^3.3.6",
114
114
  "@microsoft/applicationinsights-react-js": "^18.3.6",
115
115
  "@microsoft/applicationinsights-web": "^3.3.6",
116
+ "@microsoft/signalr": "^8.0.7",
116
117
  "jwt-decode": "^4.0.0"
117
118
  }
118
119
  }