@equinor/subsurface-app-management 1.0.5 → 1.0.7

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 (36) hide show
  1. package/dist/api/core/OpenAPI.d.ts +1 -1
  2. package/dist/api/core/OpenAPI.js +1 -1
  3. package/dist/api/index.d.ts +1 -1
  4. package/dist/components/Feature/Feature.d.ts +1 -1
  5. package/dist/components/Feature/Feature.js +1 -1
  6. package/dist/hooks/index.d.ts +1 -4
  7. package/dist/hooks/useFeatureToggling.d.ts +7 -1
  8. package/dist/hooks/useFeatureToggling.js +1 -1
  9. package/dist/hooks/useReleaseNotesQuery.d.ts +1 -0
  10. package/dist/hooks/useReleaseNotesQuery.js +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/providers/FeatureToggleProvider.d.ts +9 -4
  13. package/dist/providers/FeatureToggleProvider.js +1 -1
  14. package/dist/providers/TutorialProvider/TutorialProvider.d.ts +7 -2
  15. package/dist/providers/TutorialProvider/TutorialProvider.hooks.d.ts +1 -1
  16. package/dist/providers/TutorialProvider/TutorialProvider.hooks.js +1 -1
  17. package/dist/providers/TutorialProvider/TutorialProvider.js +1 -1
  18. package/dist/providers/TutorialProvider/TutorialProvider.styles.js +14 -16
  19. package/dist/providers/TutorialProvider/TutorialProviderInner.js +1 -1
  20. package/dist/providers/index.d.ts +2 -6
  21. package/dist/utils/environment.d.ts +11 -0
  22. package/dist/utils/environment.js +1 -0
  23. package/dist/utils/index.d.ts +1 -2
  24. package/package.json +2 -3
  25. package/dist/providers/AuthProvider/AuthProvider.d.ts +0 -17
  26. package/dist/providers/AuthProvider/AuthProvider.js +0 -1
  27. package/dist/providers/AuthProvider/AuthProviderInner.d.ts +0 -16
  28. package/dist/providers/AuthProvider/AuthProviderInner.js +0 -1
  29. package/dist/providers/ReleaseNotesProvider.d.ts +0 -20
  30. package/dist/providers/ReleaseNotesProvider.js +0 -1
  31. package/dist/providers/TutorialStepsProvider.d.ts +0 -13
  32. package/dist/providers/TutorialStepsProvider.js +0 -1
  33. package/dist/utils/auth_environment.d.ts +0 -47
  34. package/dist/utils/auth_environment.js +0 -1
  35. package/dist/utils/releaseNotes.d.ts +0 -8
  36. package/dist/utils/releaseNotes.js +0 -1
@@ -26,7 +26,7 @@ export declare class TokenService {
26
26
  static getAmplifyPortalProductionToken(): CancelablePromise<string>;
27
27
  }
28
28
  export declare const getPortalToken: () => Promise<string>;
29
- export declare const OpenAPI: OpenAPIConfig;
29
+ export declare const OpenAPI_SAM: OpenAPIConfig;
30
30
  export declare const OpenAPI_Portal: OpenAPIConfig;
31
31
  export declare const OpenAPI_Portal_Prod: OpenAPIConfig;
32
32
  export {};
@@ -1 +1 @@
1
- import{auth as t,environment as o}from"../../utils/auth_environment.js";import{request as i}from"./request.js";import{getLocalStorage as e,updateLocalStorage as r}from"../../utils/localStorage.js";import{jwtDecode as E}from"jwt-decode";const{getToken:n}=t,{getApiUrl:a,getEnvironmentName:l}=o,p=l(import.meta.env.VITE_ENVIRONMENT_NAME),m="localhost"===p?"development":p;class A{static getAmplifyPortalToken(){return i(S,{method:"GET",url:"/api/v1/Token/AmplifyPortal"})}static getAmplifyPortalProductionToken(){return i(S,{method:"GET",url:"/api/v1/Token/AmplifyPortal/Production"})}}const T=t=>{if(0===t.length)return!1;try{return!(t=>{const o=E(t),i=(new Date).getTime()/1e3;return o.exp&&i>o.exp})(t)}catch(t){return!1}},d=async(t,o)=>{const i=e(t,"");if(T(i))return i;const E=await o();return r(t,E),E},c=async()=>d(`amplify-portal-${p}`,A.getAmplifyPortalToken),S={BASE:a(import.meta.env.VITE_API_URL),VERSION:"1.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:n,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},u={BASE:`https://api-amplify-portal-${m}.radix.equinor.com`,VERSION:"1.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:c,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},N={BASE:"https://api-amplify-portal-production.radix.equinor.com",VERSION:"1.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:async()=>d("amplify-portal-production",A.getAmplifyPortalProductionToken),USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0};export{S as OpenAPI,u as OpenAPI_Portal,N as OpenAPI_Portal_Prod,A as TokenService,c as getPortalToken};
1
+ import*as o from"../../utils/environment.js";import{request as t}from"./request.js";import{getLocalStorage as i,updateLocalStorage as r}from"../../utils/localStorage.js";import{jwtDecode as e}from"jwt-decode";const{getEnvironmentName:E,getApiUrl:n}=o,a=E(import.meta.env.VITE_ENVIRONMENT_NAME),l="localhost"===a?"development":a;class p{static getAmplifyPortalToken(){return t(T,{method:"GET",url:"/api/v1/Token/AmplifyPortal"})}static getAmplifyPortalProductionToken(){return t(T,{method:"GET",url:"/api/v1/Token/AmplifyPortal/Production"})}}const m=o=>{if(0===o.length)return!1;try{return!(o=>{const t=e(o),i=(new Date).getTime()/1e3;return t.exp&&i>t.exp})(o)}catch(o){return!1}},A=async(o,t)=>{const e=i(o,"");if(m(e))return e;const E=await t();return r(o,E),E},d=async()=>A(`amplify-portal-${a}`,p.getAmplifyPortalToken),T={BASE:n(import.meta.env.VITE_API_URL),VERSION:"1.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},c={BASE:`https://api-amplify-portal-${l}.radix.equinor.com`,VERSION:"1.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:d,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},S={BASE:"https://api-amplify-portal-production.radix.equinor.com",VERSION:"1.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:async()=>A("amplify-portal-production",p.getAmplifyPortalProductionToken),USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0};export{c as OpenAPI_Portal,S as OpenAPI_Portal_Prod,T as OpenAPI_SAM,p as TokenService,d as getPortalToken};
@@ -1,6 +1,6 @@
1
1
  export { ApiError } from './core/ApiError';
2
2
  export { CancelablePromise, CancelError } from './core/CancelablePromise';
3
- export { OpenAPI, getPortalToken } from './core/OpenAPI';
3
+ export { OpenAPI_SAM, getPortalToken } from './core/OpenAPI';
4
4
  export { request } from './core/request';
5
5
  export type { OpenAPIConfig } from './core/OpenAPI';
6
6
  export type { CustomTutorialStep } from './models/CustomTutorialStep';
@@ -3,7 +3,7 @@ interface FeatureProps {
3
3
  featureKey: string;
4
4
  children: ReactNode;
5
5
  fallback?: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
6
- showIfKeyMissing?: boolean;
6
+ showIfKeyIsMissing?: boolean;
7
7
  }
8
8
  export declare const Feature: FC<FeatureProps>;
9
9
  export {};
@@ -1 +1 @@
1
- import{jsx as r,Fragment as e}from"react/jsx-runtime";import"../../providers/AuthProvider/AuthProvider.js";import"../../providers/ReleaseNotesProvider.js";import"../../providers/TutorialStepsProvider.js";import{useFeatureToggling as o}from"../../hooks/useFeatureToggling.js";import"@tanstack/react-query";import"../../api/core/OpenAPI.js";import"../../utils/auth_environment.js";const t=({featureKey:t,children:i,fallback:s,showIfKeyMissing:n=!0})=>{const{showContent:p}=o(t,n);return r(e,p?{children:i}:{children:s??null})};export{t as Feature};
1
+ import{jsx as e,Fragment as r}from"react/jsx-runtime";import{useFeatureToggling as t}from"../../hooks/useFeatureToggling.js";import"@tanstack/react-query";import"../../api/core/OpenAPI.js";const o=({featureKey:o,children:s,fallback:n,showIfKeyIsMissing:i=!0})=>{const{showContent:a}=t({featureKey:o,showIfKeyIsMissing:i});return e(r,a?{children:s}:{children:n??null})};export{o as Feature};
@@ -1,6 +1,3 @@
1
- import { useAuth } from '../providers/AuthProvider/AuthProvider';
2
- import { useReleaseNotes } from '../providers/ReleaseNotesProvider';
3
- import { useTutorialSteps } from '../providers/TutorialStepsProvider';
4
1
  import { useFeatureToggling } from './useFeatureToggling';
5
2
  import { useReleaseNotesQuery } from './useReleaseNotesQuery';
6
- export { useAuth, useFeatureToggling, useReleaseNotesQuery, useTutorialSteps, useReleaseNotes, };
3
+ export { useFeatureToggling, useReleaseNotesQuery };
@@ -1,3 +1,9 @@
1
- export declare function useFeatureToggling(featureKey: string, showIfKeyMissing?: boolean): {
1
+ interface UseFeatureTogglingOptions {
2
+ featureKey: string;
3
+ username?: string;
4
+ showIfKeyIsMissing?: boolean;
5
+ }
6
+ export declare function useFeatureToggling({ featureKey, username, showIfKeyIsMissing, }: UseFeatureTogglingOptions): {
2
7
  showContent: boolean;
3
8
  };
9
+ export {};
@@ -1 +1 @@
1
- import{useMemo as r}from"react";import{useFeatureToggleContext as e,isUserInActiveUserArray as t}from"../providers/FeatureToggleProvider.js";import{useAuth as o}from"../providers/AuthProvider/AuthProvider.js";import{environment as n}from"../utils/auth_environment.js";const{getEnvironmentName:i}=n;function s(n,s){const m=s??!0,{account:u}=o(),a=`${u?.username}`,v=i(import.meta.env.VITE_ENVIRONMENT_NAME),{features:c,isError:f}=e(),p=c?.find((r=>r.featureKey===n));return{showContent:r((()=>p?!!t(a,p.activeUsers)||p.activeEnvironments.includes(v):!f&&m),[m,v,p,f,a])}}export{s as useFeatureToggling};
1
+ import{useMemo as e}from"react";import{useFeatureToggleContext as r,isUserInActiveUserArray as t}from"../providers/FeatureToggleProvider.js";function s({featureKey:s,username:n,showIfKeyIsMissing:i}){const o=i??!0,{features:a,isError:u,environmentName:v}=r(),c=a?.find((e=>e.featureKey===s));return{showContent:e((()=>c?(void 0===n&&c.activeUsers&&c.activeUsers.length>0&&console.warn(`[FeatureToggle] Feature ${c.featureKey} has activeUsers set but username wasn't provided! Was this intentional?`),!!t(n,c.activeUsers)||c.activeEnvironments.includes(v)):!u&&o),[v,o,c,u,n])}}export{s as useFeatureToggling};
@@ -1,6 +1,7 @@
1
1
  import { ReleaseNote } from '../api/models/ReleaseNote';
2
2
  interface ReleaseNotesQueryProps {
3
3
  enabled?: boolean;
4
+ overrideAppName?: string;
4
5
  }
5
6
  export declare function useReleaseNotesQuery(options?: ReleaseNotesQueryProps): import("@tanstack/react-query").UseQueryResult<ReleaseNote[], Error>;
6
7
  export {};
@@ -1 +1 @@
1
- import{useQuery as e}from"@tanstack/react-query";import{ReleaseNotesService as t}from"../api/services/ReleaseNotesService.js";import{environment as r}from"../utils/auth_environment.js";const{getAppName:n}=r;function o(r){const o=n(import.meta.env.VITE_NAME);return e({queryKey:["get-all-release-notes"],queryFn:()=>t.getReleasenoteList(o),enabled:r?.enabled??!0})}export{o as useReleaseNotesQuery};
1
+ import{useQuery as e}from"@tanstack/react-query";import{ReleaseNotesService as t}from"../api/services/ReleaseNotesService.js";import*as r from"../utils/environment.js";const{getAppName:o}=r;function n(r){const n=r?.overrideAppName??o(import.meta.env.VITE_NAME);return e({queryKey:["get-all-release-notes"],queryFn:()=>t.getReleasenoteList(n),enabled:r?.enabled??!0})}export{n as useReleaseNotesQuery};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{Feature}from"./components/Feature/Feature.js";export{default as AuthProvider,useAuth}from"./providers/AuthProvider/AuthProvider.js";export{default as ReleaseNotesProvider,useReleaseNotes}from"./providers/ReleaseNotesProvider.js";export{default as TutorialStepsProvider,useTutorialSteps}from"./providers/TutorialStepsProvider.js";export{useFeatureToggling}from"./hooks/useFeatureToggling.js";export{useReleaseNotesQuery}from"./hooks/useReleaseNotesQuery.js";export{default as TutorialProvider}from"./providers/TutorialProvider/TutorialProvider.js";export{default as FeatureToggleProvider}from"./providers/FeatureToggleProvider.js";export{EnvironmentType}from"./types/Environment.js";export{RELEASENOTE_TYPES_INFORMATION,ReleaseNoteType}from"./types/ReleaseNotes.js";export{auth,environment}from"./utils/auth_environment.js";export{ApiError}from"./api/core/ApiError.js";export{CancelError,CancelablePromise}from"./api/core/CancelablePromise.js";export{OpenAPI,getPortalToken}from"./api/core/OpenAPI.js";export{request}from"./api/core/request.js";export{ServiceNowUrgency}from"./api/models/ServiceNowUrgency.js";export{TutorialPosition}from"./api/models/TutorialPosition.js";export{PortalService}from"./api/services/PortalService.js";export{ReleaseNotesService}from"./api/services/ReleaseNotesService.js";export{TutorialService}from"./api/services/TutorialService.js";
1
+ export{Feature}from"./components/Feature/Feature.js";export{useFeatureToggling}from"./hooks/useFeatureToggling.js";export{useReleaseNotesQuery}from"./hooks/useReleaseNotesQuery.js";export{TutorialProvider}from"./providers/TutorialProvider/TutorialProvider.js";export{FeatureToggleProvider}from"./providers/FeatureToggleProvider.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_SAM,getPortalToken}from"./api/core/OpenAPI.js";export{request}from"./api/core/request.js";export{ServiceNowUrgency}from"./api/models/ServiceNowUrgency.js";export{TutorialPosition}from"./api/models/TutorialPosition.js";export{PortalService}from"./api/services/PortalService.js";export{ReleaseNotesService}from"./api/services/ReleaseNotesService.js";export{TutorialService}from"./api/services/TutorialService.js";
@@ -1,14 +1,19 @@
1
- import { FC, ReactNode } from 'react';
1
+ import { FC, ReactElement, ReactNode } from 'react';
2
2
  import { FeatureAPIType, GraphUser } from '../api';
3
- export declare const isUserInActiveUserArray: (username: string, activeUsers: GraphUser[] | undefined | null) => boolean;
3
+ import { EnvironmentType } from '../types';
4
+ export declare const isUserInActiveUserArray: (username: string | undefined, activeUsers: GraphUser[] | undefined | null) => boolean;
4
5
  interface FeatureToggleContextType {
5
6
  isLoading: boolean;
6
7
  isError: boolean;
8
+ environmentName: EnvironmentType;
7
9
  features?: FeatureAPIType[] | null;
8
10
  }
9
11
  export declare function useFeatureToggleContext(): FeatureToggleContextType;
10
12
  interface FeatureToggleProviderProps {
11
13
  children: ReactNode;
14
+ loadingComponent?: ReactElement;
15
+ overrideAppName?: string;
16
+ overrideEnvironment?: EnvironmentType;
12
17
  }
13
- declare const FeatureToggleProvider: FC<FeatureToggleProviderProps>;
14
- export default FeatureToggleProvider;
18
+ export declare const FeatureToggleProvider: FC<FeatureToggleProviderProps>;
19
+ export {};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{createContext as r,useContext as t}from"react";import{FullPageSpinner as o}from"@equinor/amplify-components";import{useQuery as i}from"@tanstack/react-query";import{environment as a}from"../utils/auth_environment.js";import{PortalService as n}from"../api/services/PortalService.js";const{getAppName:m}=a,s=(e,r)=>!!(r&&r.length>0)&&r.map((e=>e.mail.toLowerCase())).includes(e.toLowerCase()),u=r(void 0);function p(){const e=t(u);if(void 0===e)throw new Error("'useFeatureToggleContext' must be used within provider");return e}const c=({children:r})=>{const t=m(import.meta.env.VITE_NAME),{data:a,isLoading:s,isError:p}=i({queryKey:["getFeatureToggleFromAppName"],queryFn:async()=>n.getFeatureToggleFromApplicationName(t)});return s?e(o,{variant:"equinor",withoutScrim:!0}):e(u.Provider,{value:{features:a?.features,isLoading:s,isError:p},children:r})};export{c as default,s as isUserInActiveUserArray,p as useFeatureToggleContext};
1
+ import{jsx as e}from"react/jsx-runtime";import{createContext as r,useContext as o}from"react";import{useQuery as t}from"@tanstack/react-query";import{PortalService as i}from"../api/services/PortalService.js";import*as n from"../utils/environment.js";import{getEnvironmentName as a}from"../utils/environment.js";const{getAppName:m}=n,s=(e,r)=>!!(e&&r&&r.length>0)&&r.map((e=>e.mail.toLowerCase())).includes(e.toLowerCase()),p=r(void 0);function u(){const e=o(p);if(void 0===e)throw new Error("'useFeatureToggleContext' must be used within provider");return e}const c=({children:r,loadingComponent:o,overrideAppName:n,overrideEnvironment:s})=>{const u=n??m(import.meta.env.VITE_NAME),c=s??a(import.meta.env.VITE_ENVIRONMENT_NAME),{data:v,isLoading:d,isError:l}=t({queryKey:["getFeatureToggleFromAppName"],queryFn:async()=>i.getFeatureToggleFromApplicationName(u)});return d&&o?o:e(p.Provider,{value:{features:v?.features,isLoading:d,isError:l,environmentName:c},children:r})};export{c as FeatureToggleProvider,s as isUserInActiveUserArray,u as useFeatureToggleContext};
@@ -1,6 +1,7 @@
1
1
  import { Dispatch, FC, MutableRefObject, ReactNode, SetStateAction } from 'react';
2
2
  import { CustomTutorialComponent } from './TutorialProvider.types';
3
3
  import { CustomTutorialStep, GenericTutorialStep, Tutorial } from '../../api';
4
+ import { EnvironmentType } from '../../types';
4
5
  export interface TutorialContextType {
5
6
  activeTutorial: Tutorial | undefined;
6
7
  setActiveTutorial: Dispatch<SetStateAction<Tutorial | undefined>>;
@@ -19,12 +20,16 @@ export interface TutorialContextType {
19
20
  tutorialError: boolean;
20
21
  setTutorialError: Dispatch<SetStateAction<boolean>>;
21
22
  viewportWidth: number;
23
+ appName: string;
24
+ environmentName: EnvironmentType;
22
25
  }
23
26
  export declare const TutorialContext: import("react").Context<TutorialContextType | undefined>;
24
27
  interface TutorialProviderProps {
25
28
  children: ReactNode;
29
+ overrideAppName?: string;
30
+ overrideEnvironmentName?: EnvironmentType;
26
31
  customStepComponents?: CustomTutorialComponent[];
27
32
  tutorials?: Tutorial[];
28
33
  }
29
- declare const TutorialProvider: FC<TutorialProviderProps>;
30
- export default TutorialProvider;
34
+ export declare const TutorialProvider: FC<TutorialProviderProps>;
35
+ export {};
@@ -1,3 +1,3 @@
1
- export declare const useGetTutorialsForApp: () => import("@tanstack/react-query").UseQueryResult<import("../..").Tutorial[], Error>;
1
+ export declare const useGetTutorialsForApp: (appName: string) => import("@tanstack/react-query").UseQueryResult<import("../..").Tutorial[], Error>;
2
2
  export declare const useGetTutorialSasToken: () => import("@tanstack/react-query").UseQueryResult<string, Error>;
3
3
  export declare const useTutorial: () => import("./TutorialProvider").TutorialContextType;
@@ -1 +1 @@
1
- import{useContext as r}from"react";import{useQuery as t}from"@tanstack/react-query";import{GET_TUTORIALS_FOR_APP as o,GET_TUTORIALS_SAS_TOKEN as e}from"./TutorialProvider.const.js";import{TutorialService as i}from"../../api/services/TutorialService.js";import{TutorialContext as u}from"./TutorialProvider.js";import{environment as a}from"../../utils/auth_environment.js";const{getAppName:m}=a,n=()=>{const r=m(import.meta.env.VITE_NAME);return t({queryKey:[o,r],queryFn:()=>i.getTutorialsForApplication(r)})},s=()=>t({queryKey:[e],queryFn:()=>i.getTutorialSasToken()}),p=()=>{const t=r(u);if(void 0===t)throw new Error("'useTutorial' must be used within a TutorialProvider");return t};export{s as useGetTutorialSasToken,n as useGetTutorialsForApp,p as useTutorial};
1
+ import{useContext as r}from"react";import{useQuery as o}from"@tanstack/react-query";import{GET_TUTORIALS_FOR_APP as t,GET_TUTORIALS_SAS_TOKEN as e}from"./TutorialProvider.const.js";import{TutorialService as i}from"../../api/services/TutorialService.js";import{TutorialContext as u}from"./TutorialProvider.js";const a=r=>o({queryKey:[t,r],queryFn:()=>i.getTutorialsForApplication(r)}),s=()=>o({queryKey:[e],queryFn:()=>i.getTutorialSasToken()}),m=()=>{const o=r(u);if(void 0===o)throw new Error("'useTutorial' must be used within a TutorialProvider");return o};export{s as useGetTutorialSasToken,a as useGetTutorialsForApp,m as useTutorial};
@@ -1 +1 @@
1
- import{jsxs as e,jsx as t}from"react/jsx-runtime";import{createContext as r,useState as o,useRef as i,useMemo as n,useCallback as s,useEffect as l}from"react";import{useSearchParams as a}from"react-router-dom";import{TUTORIAL_SEARCH_PARAM_KEY as u}from"./TutorialProvider.const.js";import{getAllElementsToHighlight as m}from"./TutorialProvider.utils.js";import c from"./TutorialProviderInner.js";const d=r(void 0),h=({children:r,customStepComponents:h,tutorials:p})=>{const[f,v]=o(void 0),[g,w]=o(!1),[y,T]=a(),[P,E]=o(void 0),[S,k]=o(0),[C,j]=o(void 0),[x,F]=o(window.innerWidth),H=i(null),L=n((()=>{if(f)return f.steps.at(S)}),[f,S]),W=n((()=>!!f&&S>=f?.steps.length-1),[f,S]),z=s((()=>{y.delete(u),T(y),E(void 0)}),[y,T]);return l((()=>{if(P)return;const e=y.get(u);e&&E(e)}),[y,P]),l((()=>{const e=()=>{F(window.innerWidth)};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]),l((()=>{if(!f||g)return;const e=m(f);e.every((e=>null!==e))?j(e):(async()=>{await new Promise((e=>setTimeout(e,300)));const e=m(f);e.every((e=>null!==e))?j(e):(console.error("Could not find all elements to highlight for the tutorial. \n This is a list of elements that were found for each step: ",e),w(!0))})().catch((e=>{console.error("Error trying to get elements to highlight",e)}))}),[f,S,g,P]),l((()=>{if(!f||g)return;const e=f.steps.filter((e=>void 0!==e.key&&null!==e.key)).map((e=>e.key));if(0===e.length)return;const t=h?.map((e=>e.key));if(!t||0===t.length)return console.error("Could not find any custom components passed to the TutorialProvider \nExpected these keys for the active tutorial: ",e),void w(!0);e.map((e=>t?.includes(e))).some((e=>!0!==e))&&(console.error("Could not find the custom components related to the active tutorial. \n The active tutorial expected to find these keys: ",e,"\n However in the custom components we only found these keys: ",t),w(!0))}),[f,h,g]),e(d.Provider,{value:{currentStepObject:L,activeTutorial:f,setActiveTutorial:v,currentStep:S,setCurrentStep:k,allElementsToHighlight:C,setAllElementsToHighlight:j,customStepComponents:h,isLastStep:W,dialogRef:H,clearSearchParam:z,shortNameFromParams:P,setShortNameFromParams:E,tutorialsFromProps:p??[],tutorialError:g,setTutorialError:w,viewportWidth:x},children:[t(c,{}),r]})};export{d as TutorialContext,h as default};
1
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import{createContext as r,useState as o,useRef as i,useMemo as n,useCallback as s,useEffect as l}from"react";import{useSearchParams as a}from"react-router-dom";import{TUTORIAL_SEARCH_PARAM_KEY as m}from"./TutorialProvider.const.js";import{getAllElementsToHighlight as u}from"./TutorialProvider.utils.js";import c from"./TutorialProviderInner.js";import{getAppName as d,getEnvironmentName as p}from"../../utils/environment.js";const h=r(void 0),v=({children:r,overrideAppName:v,overrideEnvironmentName:f,customStepComponents:g,tutorials:E})=>{const[T,w]=o(void 0),[y,N]=o(!1),[P,S]=a(),[k,j]=o(void 0),[C,A]=o(0),[x,I]=o(void 0),[F,H]=o(window.innerWidth),L=i(null),M=v??d(import.meta.env.VITE_NAME),V=f??p(import.meta.env.VITE_ENVIRONMENT_NAME),W=n((()=>{if(T)return T.steps.at(C)}),[T,C]),_=n((()=>!!T&&C>=T?.steps.length-1),[T,C]),z=s((()=>{P.delete(m),S(P),j(void 0)}),[P,S]);return l((()=>{if(k)return;const e=P.get(m);e&&j(e)}),[P,k]),l((()=>{const e=()=>{H(window.innerWidth)};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]),l((()=>{if(!T||y)return;const e=u(T);e.every((e=>null!==e))?I(e):(async()=>{await new Promise((e=>setTimeout(e,300)));const e=u(T);e.every((e=>null!==e))?I(e):(console.error("Could not find all elements to highlight for the tutorial. \n This is a list of elements that were found for each step: ",e),N(!0))})().catch((e=>{console.error("Error trying to get elements to highlight",e)}))}),[T,C,y,k]),l((()=>{if(!T||y)return;const e=T.steps.filter((e=>void 0!==e.key&&null!==e.key)).map((e=>e.key));if(0===e.length)return;const t=g?.map((e=>e.key));if(!t||0===t.length)return console.error("Could not find any custom components passed to the TutorialProvider \nExpected these keys for the active tutorial: ",e),void N(!0);e.map((e=>t?.includes(e))).some((e=>!0!==e))&&(console.error("Could not find the custom components related to the active tutorial. \n The active tutorial expected to find these keys: ",e,"\n However in the custom components we only found these keys: ",t),N(!0))}),[T,g,y]),e(h.Provider,{value:{currentStepObject:W,activeTutorial:T,setActiveTutorial:w,currentStep:C,setCurrentStep:A,allElementsToHighlight:x,setAllElementsToHighlight:I,customStepComponents:g,isLastStep:_,dialogRef:L,clearSearchParam:z,shortNameFromParams:k,setShortNameFromParams:j,tutorialsFromProps:E??[],tutorialError:y,setTutorialError:N,viewportWidth:F,appName:M,environmentName:V},children:[t(c,{}),r]})};export{h as TutorialContext,v as TutorialProvider};
@@ -1,19 +1,18 @@
1
- import{Dialog as o}from"@equinor/eds-core-react";import{tokens as i}from"../../node_modules/@equinor/eds-tokens/dist/esm/base/index.js";import t,{keyframes as e}from"styled-components";import{style as n}from"@equinor/amplify-components";const{elevation:a,shape:r}=i,{spacings:d}=n,s=e`
1
+ import{Dialog as o}from"@equinor/eds-core-react";import{tokens as i}from"../../node_modules/@equinor/eds-tokens/dist/esm/base/index.js";import t,{keyframes as e}from"styled-components";const{elevation:a,shape:n,spacings:r}=i,d=e`
2
2
  from {
3
3
  box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0);
4
4
  }
5
5
  to {
6
6
  box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.3);
7
7
  }
8
-
9
- `,p=t.div`
8
+ `,s=t.div`
10
9
  position: absolute;
11
10
  z-index: 10000;
12
11
  pointer-events: none;
13
12
  transition: top, left, width, height;
14
13
  transition-duration: 300ms;
15
14
  border-radius: 4px;
16
- animation: ${s} 300ms;
15
+ animation: ${d} 300ms;
17
16
  animation-fill-mode: forwards;
18
17
  `,m=t.div`
19
18
  position: absolute;
@@ -27,11 +26,10 @@ import{Dialog as o}from"@equinor/eds-core-react";import{tokens as i}from"../../n
27
26
  to {
28
27
  opacity: 1;
29
28
  }
30
-
31
- `,f=t.dialog`
29
+ `,p=t.dialog`
32
30
  border: none;
33
31
  box-shadow: ${a.above_scrim};
34
- border-radius: ${r.corners.borderRadius};
32
+ border-radius: ${n.corners.borderRadius};
35
33
  transition: all;
36
34
  transition-duration: 300ms;
37
35
  animation: ${l} 300ms;
@@ -39,29 +37,29 @@ import{Dialog as o}from"@equinor/eds-core-react";import{tokens as i}from"../../n
39
37
  &::backdrop {
40
38
  background: transparent;
41
39
  }
42
- `,x=t.div`
40
+ `,c=t.div`
43
41
  display: flex;
44
42
  flex-direction: column;
45
- gap: ${d.large};
43
+ gap: ${r.comfortable.large};
46
44
  width: 300px;
47
- `,c=t.img`
45
+ `,f=t.img`
48
46
  max-height: 300px;
49
47
  min-height: 50px;
50
48
  object-fit: contain;
51
49
  `,b=t.div`
52
50
  display: flex;
53
51
  justify-content: space-between;
54
- `,g=t.div`
52
+ `,x=t.div`
55
53
  display: flex;
56
- gap: ${d.medium};
57
- `,u=t(o)`
54
+ gap: ${r.comfortable.medium};
55
+ `,g=t(o)`
58
56
  width: 300px;
59
57
  height: fit-content;
60
58
  display: flex;
61
59
  flex-direction: column;
62
- padding: ${d.medium};
63
- gap: ${d.large};
60
+ padding: ${r.comfortable.medium};
61
+ gap: ${r.comfortable.large};
64
62
  button {
65
63
  align-self: flex-end;
66
64
  }
67
- `;export{b as DialogActions,x as DialogContent,c as DialogImage,m as DialogWrapper,p as Highlighter,g as NavigateSteps,f as StyledTutorialDialog,u as TutorialErrorDialog};
65
+ `;export{b as DialogActions,c as DialogContent,f as DialogImage,m as DialogWrapper,s as Highlighter,x as NavigateSteps,p as StyledTutorialDialog,g as TutorialErrorDialog};
@@ -1 +1 @@
1
- import{jsxs as t,jsx as r,Fragment as o}from"react/jsx-runtime";import{useRef as e,useMemo as i,useCallback as n,useEffect as l}from"react";import{useLocation as a}from"react-router";import{Typography as s,Button as m}from"@equinor/eds-core-react";import h from"./TutorialDialog.js";import{HIGHLIGHT_PADDING as p,TUTORIAL_HIGHLIGHTER_DATATEST_ID as u}from"./TutorialProvider.const.js";import{useTutorial as c,useGetTutorialsForApp as d}from"./TutorialProvider.hooks.js";import{TutorialErrorDialog as f,Highlighter as g}from"./TutorialProvider.styles.js";import{EnvironmentType as w}from"../../types/Environment.js";import{environment as v}from"../../utils/auth_environment.js";const{getEnvironmentName:T}=v,P=()=>{const{pathname:v}=a(),{activeTutorial:P,setActiveTutorial:E,dialogRef:N,allElementsToHighlight:j,shortNameFromParams:x,tutorialError:I,tutorialsFromProps:b,currentStep:C,viewportWidth:k,setTutorialError:R,clearSearchParam:$}=c(),y=e(!1),{data:D}=d(),M=i((()=>{if(!(D||b&&0!==b.length))return[];const t=[];return b&&t.push(...b),D&&t.push(...D),t}),[D,b]),O=i((()=>{if(!j||!P||!k)return;const t=j[C],r=t.getBoundingClientRect();return t&&t.scrollIntoView({behavior:"smooth",block:"center"}),{top:r.top-p+window.scrollY,left:r.left-p,height:r.height+2*p,width:r.width+2*p}}),[P,j,C,k]),S=i((()=>M.filter((t=>t.path===v))),[M,v]),V=n((t=>{y.current||(E(t),y.current=!0)}),[E]);l((()=>{O&&!N.current?.open&&N.current?.showModal()}),[N,O]),l((()=>{if(S.length<1)return;const t=S.find((t=>!window.localStorage.getItem(t.shortName)||x&&S.some((t=>t.shortName===x))));t&&V(t)}),[V,x,S]);const _=()=>{$(),R(!1),E(void 0)};return(P?.showInProd||T(import.meta.env.VITE_ENVIRONMENT_NAME)!==w.PRODUCTION)&&(P?.willPopUp||x)?I&&x?t(f,{open:!0,isDismissable:!0,onClose:_,children:[r(s,{children:"There was a problem starting this tutorial. Please report this in using the feedback function in the Top Bar."}),r(m,{variant:"outlined",onClick:_,children:"Close"})]}):I?null:t(o,{children:[O&&r(g,{"data-testid":u,style:{top:`${O.top}px`,left:`${O.left}px`,width:`${O.width}px`,height:`${O.height}px`}}),r(h,{})]}):null};export{P as default};
1
+ import{jsxs as t,jsx as r,Fragment as o}from"react/jsx-runtime";import{useRef as e,useMemo as i,useCallback as n,useEffect as l}from"react";import{useLocation as a}from"react-router";import{Typography as s,Button as h}from"@equinor/eds-core-react";import m from"./TutorialDialog.js";import{HIGHLIGHT_PADDING as p,TUTORIAL_HIGHLIGHTER_DATATEST_ID as c}from"./TutorialProvider.const.js";import{useTutorial as u,useGetTutorialsForApp as d}from"./TutorialProvider.hooks.js";import{TutorialErrorDialog as f,Highlighter as g}from"./TutorialProvider.styles.js";import{EnvironmentType as w}from"../../types/Environment.js";const v=()=>{const{pathname:v}=a(),{activeTutorial:T,setActiveTutorial:P,dialogRef:j,allElementsToHighlight:x,shortNameFromParams:N,tutorialError:b,tutorialsFromProps:C,currentStep:k,viewportWidth:E,setTutorialError:I,clearSearchParam:$,appName:y,environmentName:D}=u(),R=e(!1),{data:S}=d(y),B=i((()=>{if(!(S||C&&0!==C.length))return[];const t=[];return C&&t.push(...C),S&&t.push(...S),t}),[S,C]),F=i((()=>{if(!x||!T||!E)return;const t=x[k],r=t.getBoundingClientRect();return t&&t.scrollIntoView({behavior:"smooth",block:"center"}),{top:r.top-p+window.scrollY,left:r.left-p,height:r.height+2*p,width:r.width+2*p}}),[T,x,k,E]),O=i((()=>B.filter((t=>t.path===v))),[B,v]),U=n((t=>{R.current||(P(t),R.current=!0)}),[P]);l((()=>{F&&!j.current?.open&&j.current?.showModal()}),[j,F]),l((()=>{if(O.length<1)return;const t=O.find((t=>!window.localStorage.getItem(t.shortName)||N&&O.some((t=>t.shortName===N))));t&&U(t)}),[U,N,O]);const q=()=>{$(),I(!1),P(void 0)};return(T?.showInProd||D!==w.PRODUCTION)&&(T?.willPopUp||N)?b&&N?t(f,{open:!0,isDismissable:!0,onClose:q,children:[r(s,{children:"There was a problem starting this tutorial. Please report this in using the feedback function in the Top Bar."}),r(h,{variant:"outlined",onClick:q,children:"Close"})]}):b?null:t(o,{children:[F&&r(g,{"data-testid":c,style:{top:`${F.top}px`,left:`${F.left}px`,width:`${F.width}px`,height:`${F.height}px`}}),r(m,{})]}):null};export{v as default};
@@ -1,6 +1,2 @@
1
- import AuthProvider from './AuthProvider/AuthProvider';
2
- import TutorialProvider from './TutorialProvider/TutorialProvider';
3
- import FeatureToggleProvider from './FeatureToggleProvider';
4
- import ReleaseNotesProvider from './ReleaseNotesProvider';
5
- import TutorialStepsProvider from './TutorialStepsProvider';
6
- export { AuthProvider, FeatureToggleProvider, TutorialProvider, TutorialStepsProvider, ReleaseNotesProvider, };
1
+ export { TutorialProvider } from './TutorialProvider/TutorialProvider';
2
+ export { FeatureToggleProvider } from './FeatureToggleProvider';
@@ -0,0 +1,11 @@
1
+ import { EnvironmentType } from '../types/Environment';
2
+ interface EnvVariables {
3
+ NAME: string;
4
+ ENVIRONMENT_NAME: string;
5
+ API_URL: string;
6
+ }
7
+ declare const getConfig: (param: keyof EnvVariables) => string;
8
+ declare const getAppName: (appName: string | undefined) => string;
9
+ declare const getEnvironmentName: (environmentName: string | EnvironmentType | undefined) => EnvironmentType;
10
+ declare const getApiUrl: (apiUrl: string | undefined) => string;
11
+ export { getConfig, getAppName, getEnvironmentName, getApiUrl };
@@ -0,0 +1 @@
1
+ const n=n=>{if(!window._env_)return"";if(void 0===window._env_[n])throw new Error("Missing required environment variable: "+n);return window._env_[n]},r=r=>r||n("NAME"),e=r=>r||n("ENVIRONMENT_NAME"),i=r=>r||n("API_URL");export{i as getApiUrl,r as getAppName,n as getConfig,e as getEnvironmentName};
@@ -1,2 +1 @@
1
- import { auth, environment } from './auth_environment';
2
- export { auth, environment };
1
+ export * as environment from './environment';
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@equinor/subsurface-app-management",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "React Typescript components/hooks to communicate with equinor/sam",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
+ "type": "module",
7
8
  "author": "Amplify Team",
8
9
  "license": "ISC",
9
10
  "homepage": "https://github.com/equinor/subsurface-app-management#readme",
@@ -50,7 +51,6 @@
50
51
  "jwt-decode": "^4.0.0"
51
52
  },
52
53
  "devDependencies": {
53
- "@equinor/amplify-components": "^7.10.5",
54
54
  "@equinor/eds-icons": "^0.21.0",
55
55
  "@faker-js/faker": "^8.4.1",
56
56
  "@rollup/plugin-commonjs": "^25.0.7",
@@ -113,7 +113,6 @@
113
113
  "vitest": "^1.2.2"
114
114
  },
115
115
  "peerDependencies": {
116
- "@equinor/amplify-components": "*",
117
116
  "@equinor/eds-core-react": "*",
118
117
  "@equinor/eds-icons": "*",
119
118
  "@tanstack/react-query": "*",
@@ -1,17 +0,0 @@
1
- import { FC, ReactElement, ReactNode } from 'react';
2
- import { AccountInfo } from '@azure/msal-browser';
3
- export type AuthState = 'loading' | 'authorized' | 'unauthorized';
4
- export interface AuthContextType {
5
- account: AccountInfo | undefined;
6
- photo: string | undefined;
7
- roles: string[] | undefined;
8
- logout: () => void;
9
- }
10
- export declare const useAuth: () => AuthContextType;
11
- interface AuthProviderProps {
12
- children: ReactNode;
13
- loadingComponent?: ReactElement;
14
- unauthorizedComponent?: ReactElement;
15
- }
16
- declare const AuthProvider: FC<AuthProviderProps>;
17
- export default AuthProvider;
@@ -1 +0,0 @@
1
- import{jsx as o}from"react/jsx-runtime";import{createContext as t,useContext as e,useState as n,useMemo as r}from"react";import{MsalProvider as c}from"@azure/msal-react";import u from"./AuthProviderInner.js";import{auth as i,environment as a}from"../../utils/auth_environment.js";const{msalApp:m}=i,{getIsMock:s}=a,d=t(void 0),l=()=>{const o=e(d);if(void 0===o)throw new Error("useAuth must be used within a AuthContext provider");return o},h=({children:t,loadingComponent:e,unauthorizedComponent:i})=>{const[a,l]=n(void 0),[h,p]=n(),[v,g]=n("loading"),[k,A]=n(),f=r((()=>s(import.meta.env.VITE_IS_MOCK)),[]);return o(d.Provider,f?{value:{roles:["mock"],account:{homeAccountId:"mock-home-account-id",environment:"mock",tenantId:"mock-tenant-id",username:"MockUser@euquinor.com",localAccountId:"mock-local-account-id",name:"Mock mocksnes"},photo:k,logout:()=>console.log("Logged out the user!")},children:t}:{value:{roles:h,account:a,photo:k,logout:()=>m.logoutRedirect()},children:o(c,{instance:m,children:o(u,{loadingComponent:e,unauthorizedComponent:i,account:a,setAccount:l,setRoles:p,setPhoto:A,authState:v,setAuthState:g,children:t})})})};export{h as default,l as useAuth};
@@ -1,16 +0,0 @@
1
- import { FC, ReactElement, ReactNode } from 'react';
2
- import { AccountInfo } from '@azure/msal-common';
3
- import { AuthState } from './AuthProvider';
4
- export interface AuthProviderInnerProps {
5
- children: ReactNode;
6
- account: AccountInfo | undefined;
7
- setAccount: (val: AccountInfo | undefined) => void;
8
- setPhoto: (val: string | undefined) => void;
9
- setRoles: (val: string[] | undefined) => void;
10
- authState: AuthState;
11
- setAuthState: (val: AuthState) => void;
12
- loadingComponent?: ReactElement;
13
- unauthorizedComponent?: ReactElement;
14
- }
15
- declare const AuthProviderInner: FC<AuthProviderInnerProps>;
16
- export default AuthProviderInner;
@@ -1 +0,0 @@
1
- import{jsx as o,Fragment as e}from"react/jsx-runtime";import{useState as t,useRef as r,useEffect as n}from"react";import{InteractionType as i,InteractionRequiredAuthError as c}from"@azure/msal-browser";import{useMsal as a,useMsalAuthentication as s}from"@azure/msal-react";import{FullPageSpinner as u,Unauthorized as l}from"@equinor/amplify-components";import{auth as d,environment as h}from"../../utils/auth_environment.js";import{jwtDecode as A}from"jwt-decode";const{GRAPH_ENDPOINTS:g,GRAPH_REQUESTS_LOGIN:m,GRAPH_REQUESTS_PHOTO:P,GRAPH_REQUESTS_BACKEND:v,fetchMsGraph:f,isInIframe:p}=d,{getApiScope:w}=h,S=({children:d,account:h,setAccount:S,setPhoto:T,setRoles:E,authState:R,setAuthState:y,loadingComponent:z,unauthorizedComponent:_})=>{const{instance:k,accounts:O,inProgress:I}=a(),{login:U,result:G,error:H,acquireToken:b}=s(i.Silent,m),[N,j]=t(!1),q=r(!1);return n((()=>{if(N)return;(async()=>{console.log("[AuthProvider] Initializing"),await k.initialize(),console.log("[AuthProvider] Finished initializing"),j(!0)})().catch((o=>{console.error("[AuthProvider] Error during initialization",o)}))}),[k,N]),n((()=>{N&&(H instanceof c&&!p()?(console.error(H),console.log("[AuthProvider] No account found, need to login via. redirect"),U(i.Redirect,m).catch((o=>{console.error("[AuthProvider] Error during login",o)}))):G?.account&&!h?(console.log("[AuthProvider] Found account in useMsalAuth result, setting that one as active"),k.setActiveAccount(G.account),S(G.account)):O.length>0&&!h?(console.log("[AuthProvider] Found account in accounts array, setting that one as active"),k.setActiveAccount(O[0]),S(O[0])):H&&console.error("[AuthProvider] Unexpected error:",H))}),[h,O,H,k,N,U,G,S]),n((()=>{if(!h||!N||q.current||"none"!==I)return;q.current=!0;(async()=>{await(async()=>{try{const o=await b(i.Silent,P);if(o){const e=await f(g.PHOTO,o.accessToken);if(404===e.status)return null;const t=await e.blob(),r=(window.URL??window.webkitURL).createObjectURL(t);T(r)}}catch(o){console.error(o)}})(),await(async()=>{try{const o=await b(i.Silent,v(w(import.meta.env.VITE_API_SCOPE)));if(console.log("[AuthProvider] Successfully acquired token"),o&&o.accessToken){console.log("[AuthProvider] Decoding token");const e=A(o.accessToken);console.log("[AuthProvider] Token was valid"),e.roles&&(console.log("[AuthProvider] Found roles"),E(e.roles)),y("authorized")}}catch(o){console.error("[AuthProvider] Token error when trying to get roles!",o),y("unauthorized")}})()})()}),[h,b,H,N,I,y,T,E]),"loading"===R||void 0===h?z??o(u,{variant:"equinor",withoutScrim:!0}):"unauthorized"===R?_??o(l,{}):o(e,{children:d})};export{S as default};
@@ -1,20 +0,0 @@
1
- import { Dispatch, FC, ReactNode, SetStateAction } from 'react';
2
- import { Option, SieveValue, TableOfContentsItemType } from '@equinor/amplify-components';
3
- import { ReleaseNote } from '../api/models/ReleaseNote';
4
- interface ReleaseNotesContextState {
5
- search: SieveValue;
6
- setSearch: Dispatch<SetStateAction<SieveValue>>;
7
- selectedReleaseNoteTypes?: Option[];
8
- open: boolean;
9
- setOpen: (open: boolean) => void;
10
- toggle: () => void;
11
- filteredData: ReleaseNote[];
12
- releaseNotesYears: TableOfContentsItemType[];
13
- }
14
- export declare const useReleaseNotes: () => ReleaseNotesContextState;
15
- interface ReleaseNotesContextProviderProps {
16
- children: ReactNode;
17
- enabled?: boolean;
18
- }
19
- declare const ReleaseNotesProvider: FC<ReleaseNotesContextProviderProps>;
20
- export default ReleaseNotesProvider;
@@ -1 +0,0 @@
1
- import{jsx as e}from"react/jsx-runtime";import{createContext as r,useContext as s,useState as t,useMemo as a}from"react";import{useReleaseNotesQuery as o}from"../hooks/useReleaseNotesQuery.js";import{extractDatesFromReleaseNotes as l,sortReleaseNotesByDate as i}from"../utils/releaseNotes.js";const u={filterValues:void 0,searchValue:void 0,sortValue:void 0},n=r(void 0),c=()=>{const e=s(n);if(void 0===e)throw new Error("useReleaseNotes must be used within a ReleaseNotesProvider");return e},d=({children:r,enabled:s})=>{const{data:c}=o({enabled:s}),[d,m]=t(u),[h,f]=t(!1),p=a((()=>l(c??[])),[c]),v=d.filterValues?.Type,V=a((()=>{let e=c??[];if(v&&v.length>0&&(e=e.filter((e=>e.tags?.some((e=>v.map((e=>e.value)).includes(e)))))),d?.searchValue&&""!==d?.searchValue?.trim()){const r=d.searchValue.trim().toLowerCase().split(" ");e=e.filter((e=>Object.values(e).join(" ").toLowerCase().includes(r.join(" "))))}return i(e),e}),[c,d.searchValue,v]),j={search:d,setSearch:m,selectedReleaseNoteTypes:v,open:h,setOpen:f,toggle:()=>{f((e=>!e))},filteredData:V,releaseNotesYears:p};return e(n.Provider,{value:j,children:r})};export{d as default,c as useReleaseNotes};
@@ -1,13 +0,0 @@
1
- import { FC, ReactNode } from 'react';
2
- interface TutorialContextState {
3
- tutorialStep: string;
4
- setTutorialStep: (val: string) => void;
5
- showTutorialIntro: boolean;
6
- setShowTutorialIntro: (val: boolean) => void;
7
- }
8
- export declare const useTutorialSteps: () => TutorialContextState;
9
- declare const TutorialStepsProvider: FC<{
10
- children: ReactNode;
11
- startOpen?: boolean;
12
- }>;
13
- export default TutorialStepsProvider;
@@ -1 +0,0 @@
1
- import{jsx as t}from"react/jsx-runtime";import{createContext as r,useContext as o,useState as e,useEffect as s}from"react";const i="tutorialstepscontext",a=()=>{const t=localStorage.getItem(i);return t?JSON.parse(t):{step:"",showTutorialIntro:!1}},n=r(void 0),u=()=>{const t=o(n);if(void 0===t)throw new Error("useTutorialSteps must be used within a TutorialStepsProvider");return t},l=({children:r,startOpen:o=!1})=>{const[u,l]=e(a().step),[p,c]=e(o||a().showTutorialIntro);return s((()=>{var t;t={step:u,showTutorialIntro:p},localStorage.setItem(i,JSON.stringify(t))}),[p,u]),t(n.Provider,{value:{tutorialStep:u,setTutorialStep:l,showTutorialIntro:p,setShowTutorialIntro:c},children:r})};export{l as default,u as useTutorialSteps};
@@ -1,47 +0,0 @@
1
- import { PublicClientApplication } from '@azure/msal-browser';
2
- import { EnvironmentType } from '../types/Environment';
3
- interface EnvVariables {
4
- CLIENT_ID: string;
5
- NAME: string;
6
- API_URL: string;
7
- API_SCOPE: string;
8
- ENVIRONMENT_NAME: string;
9
- SERVICE_NOW_CONFIGURATION_ITEM: string;
10
- ALLOWED_PARENT_DOMAINS: string;
11
- }
12
- export declare const auth: {
13
- fetchMsGraph: (url: string, accessToken: string) => Promise<Response>;
14
- GRAPH_SCOPES: {
15
- OPENID: string;
16
- PROFILE: string;
17
- USER_READ: string;
18
- };
19
- GRAPH_REQUESTS_LOGIN: {
20
- scopes: string[];
21
- };
22
- GRAPH_REQUESTS_PHOTO: {
23
- scopes: string[];
24
- };
25
- GRAPH_REQUESTS_BACKEND: (apiScope: string) => {
26
- scopes: string[];
27
- };
28
- GRAPH_ENDPOINTS: {
29
- PHOTO: string;
30
- };
31
- msalApp: PublicClientApplication;
32
- getToken: () => Promise<string>;
33
- isReaderOnly: (roles: string[] | undefined) => boolean;
34
- isInIframe: () => boolean;
35
- };
36
- export declare const environment: {
37
- getConfig: (param: keyof EnvVariables) => string;
38
- getAppName: (appName: string | undefined) => string;
39
- getClientId: (clientId: string | undefined) => string;
40
- getApiUrl: (apiUrl: string | undefined) => string;
41
- getApiScope: (apiScope: string | undefined) => string;
42
- getEnvironmentName: (environmentName: string | EnvironmentType | undefined) => EnvironmentType;
43
- getIsMock: (isMock: string | undefined) => boolean;
44
- getServiceNowConfigurationItem: (configurationItem: string | undefined) => string;
45
- PORTAL_URL_WITHOUT_LOCALHOST: string;
46
- };
47
- export {};
@@ -1 +0,0 @@
1
- import{PublicClientApplication as e}from"@azure/msal-browser";import{EnvironmentType as t}from"../types/Environment.js";const o=["IS_MOCK","ALLOWED_PARENT_DOMAINS","SERVICE_NOW_CONFIGURATION_ITEM"],i=e=>{if(!window._env_)return"";if(void 0===window._env_[e]&&!o.includes(e))throw new Error("Missing required environment variable: "+e);return window._env_[e]},n=e=>e||i("CLIENT_ID"),r=e=>e||i("API_SCOPE"),s=e=>void 0!==e&&"true"===e;const E=function(){let e=import.meta.env.VITE_ENVIRONMENT_NAME;return e||(e=i("ENVIRONMENT_NAME")),`https://client-amplify-portal-${e===t.LOCALHOST?t.DEVELOP:e}.radix.equinor.com`}(),a={OPENID:"openid",PROFILE:"profile",USER_READ:"User.Read"},c={scopes:[a.OPENID,a.PROFILE,a.USER_READ]},_={scopes:[a.USER_READ]},I=e=>({scopes:[e]}),A=new e({auth:{clientId:n(import.meta.env.VITE_CLIENT_ID),authority:"https://login.microsoftonline.com/StatoilSRM.onmicrosoft.com/",redirectUri:window.location.origin},cache:{cacheLocation:"localStorage",storeAuthStateInCookie:!1}}),l=(O=import.meta.env.ALLOWED_PARENT_DOMAINS)?O.split(";"):i("ALLOWED_PARENT_DOMAINS")?.split(";")||[];var O;window.addEventListener("message",(async e=>{if(l.includes(e.origin)){const t=e.data;if(t){await A.initialize();try{await A.ssoSilent({sid:t}),console.log("postMessage successfully logged in user!")}catch(e){console.error("Something went wrong with postMessage"),console.error(e)}}}}));const N={fetchMsGraph:(e,t)=>fetch(e,{headers:{Authorization:`Bearer ${t}`}}),GRAPH_SCOPES:a,GRAPH_REQUESTS_LOGIN:c,GRAPH_REQUESTS_PHOTO:_,GRAPH_REQUESTS_BACKEND:I,GRAPH_ENDPOINTS:{PHOTO:"https://graph.microsoft.com/v1.0/me/photos/96x96/$value"},msalApp:A,getToken:async()=>{if(s(import.meta.env.VITE_IS_MOCK))return"";const e=A.getActiveAccount(),t=A.getAllAccounts();if(!e&&0===t.length)return"";return(await A.acquireTokenSilent(I(r(import.meta.env.VITE_API_SCOPE)))).accessToken},isReaderOnly:e=>{if(e){return!e.some((e=>e.includes("WRITE")))}return!0},isInIframe:()=>window.self!==window.top},m={getConfig:i,getAppName:e=>e||i("NAME"),getClientId:n,getApiUrl:e=>e||i("API_URL"),getApiScope:r,getEnvironmentName:e=>e||i("ENVIRONMENT_NAME"),getIsMock:s,getServiceNowConfigurationItem:e=>e||i("SERVICE_NOW_CONFIGURATION_ITEM"),PORTAL_URL_WITHOUT_LOCALHOST:E};export{N as auth,m as environment};
@@ -1,8 +0,0 @@
1
- import { TableOfContentsItemType } from '@equinor/amplify-components';
2
- import { ReleaseNote } from '../api/models/ReleaseNote';
3
- declare const extractDatesFromReleaseNotes: (releaseNotes: ReleaseNote[]) => TableOfContentsItemType[];
4
- declare const monthValueToString: (monthValue: Date) => string;
5
- declare const monthToString: (monthValue: Date) => string;
6
- declare const yearValueToString: (yearValue: Date) => string;
7
- declare const sortReleaseNotesByDate: (notes: ReleaseNote[]) => ReleaseNote[];
8
- export { extractDatesFromReleaseNotes, monthToString, monthValueToString, sortReleaseNotesByDate, yearValueToString, };
@@ -1 +0,0 @@
1
- const e=e=>{const t=[],a=e.filter((e=>e.createdDate)),n=a.map((e=>{const t=new Date(e.createdDate);return{date:t,year:t.getFullYear(),month:t.getMonth()}}));for(const e of a){const a=new Date(e.createdDate),r=a.toLocaleString("en-US",{year:"numeric"}),o=`year${a.toLocaleString("en-US",{year:"numeric"})}`;if(t.find((e=>e.value===o)))continue;const l=n.filter((e=>e.year===a.getFullYear())),c=[...new Map(l.map((e=>[e.month,e]))).values()];c.sort(((e,t)=>t.date.getTime()-e.date.getTime()));const s=c.map((e=>{const t=e.date.toLocaleString("en-US",{month:"long"});return{label:t,value:`${o}--${t}`}}));t.push({label:r,value:o,children:s})}return t.sort(((e,t)=>{const a=parseInt(e.label);return parseInt(t.label)-a})),t},t=e=>e.sort(((e,t)=>{const a=new Date(e.createdDate??"").getTime(),n=new Date(t.createdDate??"").getTime(),r=Number.isNaN(a)?0:a;return(Number.isNaN(n)?0:n)-r}));export{e as extractDatesFromReleaseNotes,t as sortReleaseNotesByDate};