@equinor/subsurface-app-management 1.0.4 → 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.
- package/dist/api/core/OpenAPI.d.ts +1 -1
- package/dist/api/core/OpenAPI.js +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/components/Feature/Feature.d.ts +1 -1
- package/dist/components/Feature/Feature.js +1 -1
- package/dist/hooks/index.d.ts +1 -5
- package/dist/hooks/useFeatureToggling.d.ts +7 -1
- package/dist/hooks/useFeatureToggling.js +1 -1
- package/dist/hooks/useReleaseNotesQuery.d.ts +1 -0
- package/dist/hooks/useReleaseNotesQuery.js +1 -1
- package/dist/index.js +1 -1
- package/dist/providers/FeatureToggleProvider.d.ts +9 -4
- package/dist/providers/FeatureToggleProvider.js +1 -1
- package/dist/providers/TutorialProvider/TutorialProvider.d.ts +7 -2
- package/dist/providers/TutorialProvider/TutorialProvider.hooks.d.ts +1 -1
- package/dist/providers/TutorialProvider/TutorialProvider.hooks.js +1 -1
- package/dist/providers/TutorialProvider/TutorialProvider.js +1 -1
- package/dist/providers/TutorialProvider/TutorialProvider.styles.js +14 -16
- package/dist/providers/TutorialProvider/TutorialProviderInner.js +1 -1
- package/dist/providers/index.d.ts +2 -6
- package/dist/utils/environment.d.ts +11 -0
- package/dist/utils/environment.js +1 -0
- package/dist/utils/index.d.ts +1 -2
- package/package.json +2 -4
- package/dist/hooks/useSignalRMessages.d.ts +0 -12
- package/dist/hooks/useSignalRMessages.js +0 -1
- package/dist/providers/AuthProvider/AuthProvider.d.ts +0 -17
- package/dist/providers/AuthProvider/AuthProvider.js +0 -1
- package/dist/providers/AuthProvider/AuthProviderInner.d.ts +0 -16
- package/dist/providers/AuthProvider/AuthProviderInner.js +0 -1
- package/dist/providers/ReleaseNotesProvider.d.ts +0 -20
- package/dist/providers/ReleaseNotesProvider.js +0 -1
- package/dist/providers/TutorialStepsProvider.d.ts +0 -13
- package/dist/providers/TutorialStepsProvider.js +0 -1
- package/dist/utils/auth_environment.d.ts +0 -47
- package/dist/utils/auth_environment.js +0 -1
- package/dist/utils/releaseNotes.d.ts +0 -8
- 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
|
|
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 {};
|
package/dist/api/core/OpenAPI.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
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};
|
package/dist/api/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { ApiError } from './core/ApiError';
|
|
2
2
|
export { CancelablePromise, CancelError } from './core/CancelablePromise';
|
|
3
|
-
export {
|
|
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
|
-
|
|
6
|
+
showIfKeyIsMissing?: boolean;
|
|
7
7
|
}
|
|
8
8
|
export declare const Feature: FC<FeatureProps>;
|
|
9
9
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
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};
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1,7 +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
|
-
|
|
7
|
-
export { useAuth, useFeatureToggling, useReleaseNotesQuery, useSignalRMessages, useTutorialSteps, useReleaseNotes, };
|
|
3
|
+
export { useFeatureToggling, useReleaseNotesQuery };
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
|
|
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
|
|
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
|
|
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{
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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";
|
|
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: ${
|
|
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: ${
|
|
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
|
-
`,
|
|
40
|
+
`,c=t.div`
|
|
43
41
|
display: flex;
|
|
44
42
|
flex-direction: column;
|
|
45
|
-
gap: ${
|
|
43
|
+
gap: ${r.comfortable.large};
|
|
46
44
|
width: 300px;
|
|
47
|
-
`,
|
|
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
|
-
`,
|
|
52
|
+
`,x=t.div`
|
|
55
53
|
display: flex;
|
|
56
|
-
gap: ${
|
|
57
|
-
`,
|
|
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: ${
|
|
63
|
-
gap: ${
|
|
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,
|
|
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
|
|
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
|
-
|
|
2
|
-
|
|
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};
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
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.
|
|
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",
|
|
@@ -47,11 +48,9 @@
|
|
|
47
48
|
"dependencies": {
|
|
48
49
|
"@azure/msal-browser": "3.10.0",
|
|
49
50
|
"@azure/msal-react": "2.0.12",
|
|
50
|
-
"@microsoft/signalr": "^8.0.0",
|
|
51
51
|
"jwt-decode": "^4.0.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@equinor/amplify-components": "^7.10.5",
|
|
55
54
|
"@equinor/eds-icons": "^0.21.0",
|
|
56
55
|
"@faker-js/faker": "^8.4.1",
|
|
57
56
|
"@rollup/plugin-commonjs": "^25.0.7",
|
|
@@ -114,7 +113,6 @@
|
|
|
114
113
|
"vitest": "^1.2.2"
|
|
115
114
|
},
|
|
116
115
|
"peerDependencies": {
|
|
117
|
-
"@equinor/amplify-components": "*",
|
|
118
116
|
"@equinor/eds-core-react": "*",
|
|
119
117
|
"@equinor/eds-icons": "*",
|
|
120
118
|
"@tanstack/react-query": "*",
|
|
@@ -1,12 +0,0 @@
|
|
|
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
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{useRef as e,useState as r,useMemo as n,useEffect as t}from"react";import{usePrevious as o}from"@equinor/amplify-components";import*as s from"@microsoft/signalr";import{LogLevel as i}from"@microsoft/signalr";import{useQuery as a}from"@tanstack/react-query";import{getPortalToken as c}from"../api/core/OpenAPI.js";import{EnvironmentType as u}from"../types/Environment.js";import{environment as m}from"../utils/auth_environment.js";function p(p){const d=e(void 0),[f,l]=r([]),[g,b]=r(),[v,w]=r(),{data:y}=a({queryKey:["get-amplify-portal-token"],queryFn:()=>c()}),E=n((()=>{const e=m.getEnvironmentName(import.meta.env.VITE_ENVIRONMENT_NAME);return`wss://api-amplify-portal-${e===u.LOCALHOST?u.DEVELOP:e}.radix.equinor.com`}),[]),N=o(p),S=o(y);t((()=>{(async function(){if(void 0===y||N===p&&S===y)return;void 0!==d.current&&N&&S&&(N!==p||S!==y)&&await d.current.stop();const e=(new s.HubConnectionBuilder).configureLogging(i.Error).withUrl(`${E}/hubs/notifications`,{accessTokenFactory:()=>y,withCredentials:!1,skipNegotiation:!0,transport:s.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",p))),e.on("NewMessage",((e,r)=>{l((n=>[{...r,Subject:e},...n]))})),e.on("UpdateMessage",((e,r)=>{w({...r,Subject:e})})),e.on("Delete",((e,r)=>{b(r)})),e.on("Error",(e=>{throw new Error("Connection error: "+e)})),await e.invoke("Subscribe",p),await e.invoke("PeekMessages")}catch(e){console.error("Connection failed",e)}d.current=e})().catch((e=>{console.error("Error setting up connection",e)}))}),[E,p,y,N,S]),t((()=>{if(v){const e=f.findIndex((e=>e.SequenceNumber===v.SequenceNumber)),r=[...f];e>-1&&(r[e]=v,l(r),w(void 0))}}),[v,f]),t((()=>{if(g){const e=f.findIndex((e=>e.SequenceNumber===g)),r=[...f];e>-1&&(r.splice(e,1),l(r),b(void 0))}}),[g,f]);const h=e=>{d.current&&(e.Read=!e.Read,d.current.invoke("PatchMessage",e.SequenceNumber,e).catch((e=>{console.error("Error setting message as read",e)})))},q=n((()=>f.some((e=>!1===e.Read))),[f]);return{messages:f,hasUnreadMessages:q,setMessageAsRead:h,setAllMessagesAsRead:()=>{f.forEach((e=>{e.Read||h(e)}))},deleteMessage:async function(e){d.current&&null!==e.SequenceNumber&&(await d.current.invoke("DeleteMessage",e.SequenceNumber),b(e.SequenceNumber))},closeConnection:async()=>{if(d.current)return await d.current.stop()}}}export{p as useSignalRMessages};
|
|
@@ -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};
|