@gen3/workspaces 0.12.65 → 0.12.67

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/TODO.md CHANGED
@@ -48,15 +48,14 @@
48
48
 
49
49
  ```bash
50
50
  docker pull --platform linux/amd64 quay.io/cdis/gen3-vectis:qa-jegv2
51
- docker pull --platform linux/amd64 quay.io/cdis/gen3-vectis:gen3-vectisv6
52
51
  docker pull --platform linux/amd64 quay.io/cdis/gen3-vectis:qa-goproxy
53
- docker pull --platform linux/amd64 quay.io/cdis/multihead-workspace-proxy:feat_init
52
+ #docker pull --platform linux/amd64 quay.io/cdis/multihead-workspace-proxy:feat_init
53
+ #docker pull --platform linux/amd64 quay.io/cdis/gen3-vectis:gen3-vectisv6
54
54
  ```
55
-
56
- kind load docker-image quay.io/cdis/gen3-vectis:qa-jegv2 --name kind-multi-node
57
- kind load docker-image quay.io/cdis/gen3-vectis:gen3-vectisv6 --name kind-multi-node
58
- kind load docker-image quay.io/cdis/gen3-vectis:qa-goproxy --name kind-multi-node
59
- kind load docker-image quay.io/cdis/multihead-workspace-proxy:feat_init --name kind-multi-node
55
+ kind load docker-image quay.io/cdis/gen3-vectis:qa-jegv2 --name kind-multi-node kind load docker-image
56
+ quay.io/cdis/gen3-vectis:qa-goproxy --name kind-multi-node #kind load docker-image
57
+ quay.io/cdis/multihead-workspace-proxy:feat_init --name kind-multi-node #kind load docker-image
58
+ quay.io/cdis/gen3-vectis:gen3-vectisv6 --name kind-multi-node
60
59
 
61
60
  # load local frontend image
62
61
 
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ declare const CostTracker: ({ workspaceAccountManagerTarget }: {
3
+ workspaceAccountManagerTarget?: string | undefined;
4
+ }) => React.JSX.Element;
5
+ export default CostTracker;
6
+ //# sourceMappingURL=CostTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostTracker.d.ts","sourceRoot":"","sources":["../../../src/components/CostTracker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiC,MAAM,OAAO,CAAC;AA0EtD,QAAA,MAAM,WAAW,GAAI;;CAAoC,sBAyMxD,CAAC;AAkEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,154 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Accordion, Center, Group, Loader, Text, Popover, Button, Progress, Divider, Radio, } from '@mantine/core';
4
+ import { useGetWorkspacePayModelsQuery, useSetCurrentPayModelMutation, } from '@gen3/core';
5
+ import { useDeepCompareCallback, useDeepCompareMemo } from 'use-deep-compare';
6
+ import { FaExclamationCircle as InactiveIcon, FaUser as ActiveIcon, } from 'react-icons/fa';
7
+ import { MdExpandMore, MdOpenInNew } from 'react-icons/md';
8
+ const PaymentNumberToString = (x, undefinedValue = 'N/A', precision = 2) => {
9
+ if (typeof x !== 'number' || Number.isNaN(x))
10
+ return undefinedValue;
11
+ return x.toFixed(precision);
12
+ };
13
+ const isNoPayModelError = (error) => {
14
+ return ('status' in error &&
15
+ error.status === 'PARSING_ERROR' &&
16
+ error.originalStatus === 404);
17
+ };
18
+ const NoPayModel = () => {
19
+ return (_jsx(Group, { className: "p-2 border-1 border-l-0 border-r-0 border-base-lighter w-full h-16", justify: "space-between", children: _jsx(Text, { className: "pl-4", size: "md", classNames: { root: 'font-heading text-utility-warning' }, children: "No pay model defined" }) }));
20
+ };
21
+ const CostTracker = ({ workspaceAccountManagerTarget = '' }) => {
22
+ const { data, isLoading, isFetching, isError, error } = useGetWorkspacePayModelsQuery(undefined, {
23
+ pollingInterval: 120000, // 2 min
24
+ refetchOnMountOrArgChange: true,
25
+ });
26
+ const [setWorkspacePayModel] = useSetCurrentPayModelMutation();
27
+ const [selectedPayModel, setSelectedPayModel] = useState(null);
28
+ const [opened, setOpened] = useState(false);
29
+ const setPayModel = useDeepCompareCallback((id) => {
30
+ void setWorkspacePayModel(id); // triggers the call to the service to select the pay model
31
+ setSelectedPayModel(id); // set the paymodel value for the select component
32
+ }, [setWorkspacePayModel, selectedPayModel]);
33
+ const { usersPayModels, workspaceName, hardLimit, totalUsage } = useDeepCompareMemo(() => {
34
+ if (!data)
35
+ return {
36
+ usersPayModels: [],
37
+ selectedPayModel: [],
38
+ workspaceName: 'Not Set',
39
+ totalUsage: undefined,
40
+ hardLimit: undefined,
41
+ };
42
+ const usersPayModels = data.allPayModels.map((payModel) => {
43
+ return {
44
+ value: payModel.bmh_workspace_id ?? payModel.workspace_type,
45
+ label: payModel.workspace_type,
46
+ totalUsage: payModel['total-usage'],
47
+ currentPayModel: payModel['current_pay_model'], //TODO temp rework with existing code
48
+ icon: payModel.request_status === 'active' ? (_jsx(ActiveIcon, {})) : (_jsx(InactiveIcon, {})),
49
+ };
50
+ });
51
+ setSelectedPayModel(data.currentPayModel.bmh_workspace_id ??
52
+ data.currentPayModel.workspace_type);
53
+ return {
54
+ usersPayModels,
55
+ workspaceName: data.currentPayModel.bmh_workspace_id.length > 0
56
+ ? data.currentPayModel.bmh_workspace_id
57
+ : data.currentPayModel.workspace_type,
58
+ totalUsage: data.currentPayModel['total-usage'],
59
+ hardLimit: data.currentPayModel['hard-limit'],
60
+ };
61
+ }, [data]);
62
+ const PayModelSelectItem = ({ option }) => {
63
+ const menuItem = usersPayModels[Number(option.value)];
64
+ if (!menuItem)
65
+ return null;
66
+ return (_jsx("div", { children: _jsxs(Group, { wrap: "nowrap", children: [_jsx(Text, { size: "sm", children: menuItem.label }), _jsx(Text, { size: "sm", children: menuItem.totalUsage }), menuItem.icon] }) }));
67
+ };
68
+ if (isLoading && isFetching)
69
+ return (_jsx("div", { className: "flex justify-center p-2 border-1 border-l-0 border-r-0 border-base-lighter w-full h-14", children: _jsx(Loader, {}) }));
70
+ if (isError) {
71
+ if (isNoPayModelError(error)) {
72
+ return _jsx(NoPayModel, {});
73
+ }
74
+ else
75
+ return (_jsx(Center, { children: "Unable to get Payment information" }));
76
+ }
77
+ const ProgressBar = (className = '') => (_jsx(Progress, { size: "sm", radius: "xl", "aria-label": 'Monthly Workflow Limit', value: !hardLimit ? 100 : (hardLimit / totalUsage) * 100, color: !hardLimit || totalUsage >= hardLimit ? 'red.5' : 'green.1', className: className }));
78
+ return (_jsxs(Popover, { width: "target", position: "bottom", shadow: "lg", trapFocus: true, opened: opened, onChange: setOpened, children: [_jsx(Popover.Target, { children: _jsxs(Button, { onClick: () => setOpened((o) => !o), size: "xs", radius: "xl", variant: "default", className: 'h-[--badge-height]', rightSection: _jsx(MdExpandMore, { className: "text-accent", size: "1.5em", "aria-label": opened ? 'close' : 'open', style: {
79
+ transform: opened ? 'rotate(180deg)' : 'rotate(0deg)',
80
+ transition: 'transform 200ms ease',
81
+ } }), children: [ProgressBar('w-[110px]'), _jsxs("span", { className: 'font-black pl-3 pr-2', children: ["$", PaymentNumberToString(totalUsage)] }), _jsxs("span", { className: 'font-normal', children: ["/$", PaymentNumberToString(hardLimit)] })] }) }), _jsxs(Popover.Dropdown, { className: 'px-2', children: [workspaceAccountManagerTarget && _jsx(Button, { component: "a", href: workspaceAccountManagerTarget, target: "_blank", variant: "outline", leftSection: _jsx(MdOpenInNew, { size: "1.1em", "aria-label": 'external' }), size: "xs", className: 'w-full mb-4', children: "Workspace Account Manager" }), _jsxs(Text, { size: "sm", className: 'uppercase pb-2 px-2', children: ["Limit ", _jsxs("span", { className: 'font-black pl-1', children: ["$", PaymentNumberToString(hardLimit)] })] }), ProgressBar('mx-2'), _jsx(Divider, { my: "sm" }), _jsx(Text, { size: "sm", className: 'uppercase pb-2 px-2', children: "Account & Charges" }), _jsx(Accordion, { variant: "unstyled", classNames: {
82
+ root: '',
83
+ control: 'p-0 px-2',
84
+ label: 'p-0',
85
+ chevron: 'text-accent',
86
+ panel: 'p-0',
87
+ content: 'p-0'
88
+ }, children: _jsxs(Accordion.Item, { value: "accountInformation", children: [_jsx(Accordion.Control, { children: _jsxs(Text, { size: "sm", className: 'font-black', children: [workspaceName, " - $", PaymentNumberToString(totalUsage)] }) }), _jsx(Accordion.Panel, { children: _jsx(Radio.Group, { className: 'pt-2', children: usersPayModels.map((obj) => (_jsx(Radio.Card, { checked: obj.currentPayModel, disabled: true, className: 'p-2 border-none data-checked:bg-primary-lightest data-checked:border-primary-darker data-checked:font-black hover:bg-primary-max ', children: _jsxs(Group, { wrap: "nowrap", align: "flex-start", children: [_jsx(Text, { size: "sm", className: 'grow', children: obj.label }), _jsxs(Text, { size: "sm", children: ["$", PaymentNumberToString(obj.totalUsage)] }), _jsx(Radio.Indicator, { color: 'accent' })] }) }, obj.value))) }) })] }) })] })] }));
89
+ };
90
+ /*<Accordion chevronPosition="left">
91
+ <Accordion.Item value="accountInformation">
92
+ <Accordion.Control>
93
+ <Group justify="space-between">
94
+ Account Information
95
+ <Group className="font-heading text-base-contrast">
96
+ <Text fw={600}>{workspaceName}</Text>
97
+ <div className="flex items-center">
98
+ <Text fw={500} size="sm" className="mr-1">
99
+ Total Usage:
100
+ </Text>
101
+ <Text fw={500} size="sm">
102
+ {PaymentNumberToString(totalUsage)}
103
+ </Text>
104
+ </div>
105
+ <div className="flex items-center pr-1">
106
+ <Text fw={500} size="sm" className="mr-1">
107
+ Hard Limit:
108
+ </Text>
109
+ <Text fw={500} size="sm">
110
+ {PaymentNumberToString(hardLimit)}
111
+ </Text>
112
+ </div>
113
+ </Group>
114
+ </Group>
115
+ </Accordion.Control>
116
+ <Accordion.Panel>
117
+ <div className="grid grid-cols-3 p-4">
118
+ <div className="flex flex-col border-1 border-gray p-2 mr-4">
119
+ <div className="flex justify-between border-b-1 border-gray mb-2 w-full py-2">
120
+ <div className="ml-2 text-xs">Account</div>
121
+ <div className="mr-2 text-xs">Workspace Account Manager</div>
122
+ </div>
123
+ <div className="text-center">
124
+ <div>
125
+ <Select
126
+ placeholder="Select Workspace"
127
+ renderOption={PayModelSelectItem}
128
+ data={usersPayModels}
129
+ onChange={(id) => {
130
+ if (id) setPayModel(id);
131
+ }}
132
+ value={selectedPayModel}
133
+ />
134
+ </div>
135
+ </div>
136
+ </div>
137
+ <div className="flex flex-col text-center border-1 border-gray p-2 mr-4">
138
+ <div className="text-md border-b-1 border-gray mb-2 w-full py-2 text-xs">
139
+ Total Charges (USD)
140
+ </div>
141
+ <Text>{PaymentNumberToString(totalUsage)}</Text>
142
+ </div>
143
+ <div className="flex flex-col text-center border-1 border-gray p-2">
144
+ <div className="text-md border-b-1 border-gray mb-2 w-full py-2 text-xs">
145
+ Spending Limit (USD)
146
+ </div>
147
+ <Text>{PaymentNumberToString(hardLimit)}</Text>
148
+ </div>
149
+ </div>
150
+ </Accordion.Panel>
151
+ </Accordion.Item>
152
+ </Accordion>*/
153
+ export default CostTracker;
154
+ //# sourceMappingURL=CostTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostTracker.js","sourceRoot":"","sources":["../../../src/components/CostTracker.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceToolbar.d.ts","sourceRoot":"","sources":["../../../../src/workspace/WorkspaceLayout/WorkspaceToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAWvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAgB1D,UAAU,qBAAqB;IAC7B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,QAAA,MAAM,gBAAgB,8FA6JrB,CAAC;AAIF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"WorkspaceToolbar.d.ts","sourceRoot":"","sources":["../../../../src/workspace/WorkspaceLayout/WorkspaceToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAWvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAiB1D,UAAU,qBAAqB;IAC7B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,QAAA,MAAM,gBAAgB,8FA8JrB,CAAC;AAIF,eAAe,gBAAgB,CAAC"}
@@ -3,12 +3,13 @@ import { forwardRef, useCallback } from 'react';
3
3
  import { ActionIcon, Badge, Button, Group, Stack, Text, Tooltip, } from '@mantine/core';
4
4
  import { Icon } from '@iconify-icon/react';
5
5
  import { selectJEGActiveWorkspaceStatus, selectWorkspaceFullscreen, selectWorkspaceTier, setWorkspaceFullscreen, setWorkspaceTier, useCoreDispatch, useCoreSelector, WorkspaceStatus, } from '@gen3/core';
6
+ import CostTracker from '../../components/CostTracker';
6
7
  import { useMicroContainerReduxContext } from '../../providers/MicroContainerReduxProvider';
7
8
  const WorkspaceToolbar = forwardRef(({ toolbarConfiguration }, ref) => {
8
9
  const workspaceTier = useCoreSelector((state) => selectWorkspaceTier(state));
9
10
  const workspaceStatus = useCoreSelector((state) => selectJEGActiveWorkspaceStatus(state));
10
11
  const isFullscreen = useCoreSelector((state) => selectWorkspaceFullscreen(state));
11
- const { showStatus, showStop, tierLabel } = toolbarConfiguration || {};
12
+ const { showStatus, showStop, tierLabel, requirePayModel, workspaceAccountManagerTarget } = toolbarConfiguration || {};
12
13
  const coreDispatch = useCoreDispatch();
13
14
  const toggleFullscreen = useCallback(() => {
14
15
  coreDispatch(setWorkspaceFullscreen(!isFullscreen));
@@ -23,7 +24,7 @@ const WorkspaceToolbar = forwardRef(({ toolbarConfiguration }, ref) => {
23
24
  const statusLabel = workspaceStatus === WorkspaceStatus.NotFound
24
25
  ? 'Not Running'
25
26
  : workspaceStatus;
26
- return (_jsxs("div", { ref: ref, role: "toolbar", "aria-label": "Workspace toolbar", className: "flex items-center justify-between px-4 border-b-2 border-base-lighter pb-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(ActionIcon, { variant: "outline", radius: "xl", size: "lg", "aria-label": "Back to workspace list", color: "primary.5", className: "mr-4", onClick: returnToWorkspaceSelection, children: _jsx(Icon, { icon: "gen3:back-arrow", width: "100%", height: "100%", "aria-hidden": "true" }) }), _jsxs(Stack, { gap: "-10px", children: [_jsx(Text, { size: "xl", c: "primary.4", children: toolbarConfiguration?.label }), _jsxs(Group, { children: [_jsx(Text, { size: "sm", children: toolbarConfiguration?.description }), _jsx(Badge, { "aria-label": `Workspace tier: ${tierLabel ?? workspaceTier}`, children: tierLabel ?? workspaceTier })] })] })] }), _jsxs("div", { className: "flex items-center gap-4 mr-8", children: [showStatus && (_jsxs(Group, { gap: "xs", role: "status", "aria-label": "Workspace status", children: [_jsx(Text, { size: "md", c: "base-contrast.4", "aria-hidden": "true", children: "Workspace Status:" }), _jsx(Badge, { size: "md", radius: "md", "aria-live": "polite", "aria-atomic": "true", children: statusLabel })] })), showStop && (_jsx(Button, { size: "sm", variant: workspaceStatus !== WorkspaceStatus.Running
27
+ return (_jsxs("div", { ref: ref, role: "toolbar", "aria-label": "Workspace toolbar", className: "flex items-center justify-between px-4 border-b-2 border-base-lighter pb-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(ActionIcon, { variant: "outline", radius: "xl", size: "lg", "aria-label": "Back to workspace list", color: "primary.5", className: "mr-4", onClick: returnToWorkspaceSelection, children: _jsx(Icon, { icon: "gen3:back-arrow", width: "100%", height: "100%", "aria-hidden": "true" }) }), _jsxs(Stack, { gap: "-10px", children: [_jsx(Text, { size: "xl", c: "primary.4", children: toolbarConfiguration?.label }), _jsxs(Group, { children: [_jsx(Text, { size: "sm", children: toolbarConfiguration?.description }), _jsx(Badge, { "aria-label": `Workspace tier: ${tierLabel ?? workspaceTier}`, children: tierLabel ?? workspaceTier }), requirePayModel && (_jsx(CostTracker, { workspaceAccountManagerTarget: workspaceAccountManagerTarget }))] })] })] }), _jsxs("div", { className: "flex items-center gap-4 mr-8", children: [showStatus && (_jsxs(Group, { gap: "xs", role: "status", "aria-label": "Workspace status", children: [_jsx(Text, { size: "md", c: "base-contrast.4", "aria-hidden": "true", children: "Workspace Status:" }), _jsx(Badge, { size: "md", radius: "md", "aria-live": "polite", "aria-atomic": "true", children: statusLabel })] })), showStop && (_jsx(Button, { size: "sm", variant: workspaceStatus !== WorkspaceStatus.Running
27
28
  ? 'outline'
28
29
  : 'filled', "aria-label": "Stop workspace", "aria-disabled": workspaceStatus !== WorkspaceStatus.Running, color: workspaceStatus !== WorkspaceStatus.Running
29
30
  ? 'primary.5'
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceToolbar.js","sourceRoot":"","sources":["../../../../src/workspace/WorkspaceLayout/WorkspaceToolbar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkspaceToolbar.js","sourceRoot":"","sources":["../../../../src/workspace/WorkspaceLayout/WorkspaceToolbar.tsx"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ export interface TierToolbarConfiguration extends LabelAndDescription {
8
8
  showStop: boolean;
9
9
  showStatus: boolean;
10
10
  tierLabel?: string;
11
+ requirePayModel?: boolean;
12
+ workspaceAccountManagerTarget?: string;
11
13
  }
12
14
  export interface SettingsPanelConfiguration {
13
15
  enabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/workspace/tiers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,wBAAwB,CAAC;IAClC,YAAY,EAAE,8BAA8B,CAAC;IAC7C,QAAQ,EAAE,0BAA0B,CAAC;CACtC;AAED,MAAM,WAAW,8BAA+B,SAAQ,wBAAwB;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,uCAAwC,SAAQ,wBAAwB;IACvF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,kEAAkE;IAClE,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/workspace/tiers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6BAA6B,CAAC,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,wBAAwB,CAAC;IAClC,YAAY,EAAE,8BAA8B,CAAC;IAC7C,QAAQ,EAAE,0BAA0B,CAAC;CACtC;AAED,MAAM,WAAW,8BAA+B,SAAQ,wBAAwB;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,uCAAwC,SAAQ,wBAAwB;IACvF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,kEAAkE;IAClE,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC"}
@@ -10,6 +10,7 @@ var core$1 = require('@gen3/core');
10
10
  var useDeepCompare = require('use-deep-compare');
11
11
  var notifications = require('@mantine/notifications');
12
12
  var md = require('react-icons/md');
13
+ var fa = require('react-icons/fa');
13
14
  var io5 = require('react-icons/io5');
14
15
  var bs = require('react-icons/bs');
15
16
  var lodash = require('lodash');
@@ -2427,11 +2428,239 @@ const SettingsPanel = ({ showKernels, expanded, setExpanded, width = 380 })=>{
2427
2428
  });
2428
2429
  };
2429
2430
 
2431
+ const PaymentNumberToString = (x, undefinedValue = 'N/A', precision = 2)=>{
2432
+ if (typeof x !== 'number' || Number.isNaN(x)) return undefinedValue;
2433
+ return x.toFixed(precision);
2434
+ };
2435
+ const isNoPayModelError = (error)=>{
2436
+ return 'status' in error && error.status === 'PARSING_ERROR' && error.originalStatus === 404;
2437
+ };
2438
+ const NoPayModel = ()=>{
2439
+ return /*#__PURE__*/ jsxRuntime.jsx(core.Group, {
2440
+ className: "p-2 border-1 border-l-0 border-r-0 border-base-lighter w-full h-16",
2441
+ justify: "space-between",
2442
+ children: /*#__PURE__*/ jsxRuntime.jsx(core.Text, {
2443
+ className: "pl-4",
2444
+ size: "md",
2445
+ classNames: {
2446
+ root: 'font-heading text-utility-warning'
2447
+ },
2448
+ children: "No pay model defined"
2449
+ })
2450
+ });
2451
+ };
2452
+ const CostTracker = ({ workspaceAccountManagerTarget = '' })=>{
2453
+ const { data, isLoading, isFetching, isError, error } = core$1.useGetWorkspacePayModelsQuery(undefined, {
2454
+ pollingInterval: 120000,
2455
+ refetchOnMountOrArgChange: true
2456
+ });
2457
+ const [setWorkspacePayModel] = core$1.useSetCurrentPayModelMutation();
2458
+ const [selectedPayModel, setSelectedPayModel] = React.useState(null);
2459
+ const [opened, setOpened] = React.useState(false);
2460
+ useDeepCompare.useDeepCompareCallback((id)=>{
2461
+ void setWorkspacePayModel(id); // triggers the call to the service to select the pay model
2462
+ setSelectedPayModel(id); // set the paymodel value for the select component
2463
+ }, [
2464
+ setWorkspacePayModel,
2465
+ selectedPayModel
2466
+ ]);
2467
+ const { usersPayModels, workspaceName, hardLimit, totalUsage } = useDeepCompare.useDeepCompareMemo(()=>{
2468
+ if (!data) return {
2469
+ usersPayModels: [],
2470
+ selectedPayModel: [],
2471
+ workspaceName: 'Not Set',
2472
+ totalUsage: undefined,
2473
+ hardLimit: undefined
2474
+ };
2475
+ const usersPayModels = data.allPayModels.map((payModel)=>{
2476
+ return {
2477
+ value: payModel.bmh_workspace_id ?? payModel.workspace_type,
2478
+ label: payModel.workspace_type,
2479
+ totalUsage: payModel['total-usage'],
2480
+ currentPayModel: payModel['current_pay_model'],
2481
+ icon: payModel.request_status === 'active' ? /*#__PURE__*/ jsxRuntime.jsx(fa.FaUser, {}) : /*#__PURE__*/ jsxRuntime.jsx(fa.FaExclamationCircle, {})
2482
+ };
2483
+ });
2484
+ setSelectedPayModel(data.currentPayModel.bmh_workspace_id ?? data.currentPayModel.workspace_type);
2485
+ return {
2486
+ usersPayModels,
2487
+ workspaceName: data.currentPayModel.bmh_workspace_id.length > 0 ? data.currentPayModel.bmh_workspace_id : data.currentPayModel.workspace_type,
2488
+ totalUsage: data.currentPayModel['total-usage'],
2489
+ hardLimit: data.currentPayModel['hard-limit']
2490
+ };
2491
+ }, [
2492
+ data
2493
+ ]);
2494
+ if (isLoading && isFetching) return /*#__PURE__*/ jsxRuntime.jsx("div", {
2495
+ className: "flex justify-center p-2 border-1 border-l-0 border-r-0 border-base-lighter w-full h-14",
2496
+ children: /*#__PURE__*/ jsxRuntime.jsx(core.Loader, {})
2497
+ });
2498
+ if (isError) {
2499
+ if (isNoPayModelError(error)) {
2500
+ return /*#__PURE__*/ jsxRuntime.jsx(NoPayModel, {});
2501
+ } else return /*#__PURE__*/ jsxRuntime.jsx(core.Center, {
2502
+ children: "Unable to get Payment information"
2503
+ });
2504
+ }
2505
+ const ProgressBar = (className = '')=>/*#__PURE__*/ jsxRuntime.jsx(core.Progress, {
2506
+ size: "sm",
2507
+ radius: "xl",
2508
+ "aria-label": "Monthly Workflow Limit",
2509
+ value: !hardLimit ? 100 : hardLimit / totalUsage * 100,
2510
+ color: !hardLimit || totalUsage >= hardLimit ? 'red.5' : 'green.1',
2511
+ className: className
2512
+ });
2513
+ return /*#__PURE__*/ jsxRuntime.jsxs(core.Popover, {
2514
+ width: "target",
2515
+ position: "bottom",
2516
+ shadow: "lg",
2517
+ trapFocus: true,
2518
+ opened: opened,
2519
+ onChange: setOpened,
2520
+ children: [
2521
+ /*#__PURE__*/ jsxRuntime.jsx(core.Popover.Target, {
2522
+ children: /*#__PURE__*/ jsxRuntime.jsxs(core.Button, {
2523
+ onClick: ()=>setOpened((o)=>!o),
2524
+ size: "xs",
2525
+ radius: "xl",
2526
+ variant: "default",
2527
+ className: "h-[--badge-height]",
2528
+ rightSection: /*#__PURE__*/ jsxRuntime.jsx(md.MdExpandMore, {
2529
+ className: "text-accent",
2530
+ size: "1.5em",
2531
+ "aria-label": opened ? 'close' : 'open',
2532
+ style: {
2533
+ transform: opened ? 'rotate(180deg)' : 'rotate(0deg)',
2534
+ transition: 'transform 200ms ease'
2535
+ }
2536
+ }),
2537
+ children: [
2538
+ ProgressBar('w-[110px]'),
2539
+ /*#__PURE__*/ jsxRuntime.jsxs("span", {
2540
+ className: "font-black pl-3 pr-2",
2541
+ children: [
2542
+ "$",
2543
+ PaymentNumberToString(totalUsage)
2544
+ ]
2545
+ }),
2546
+ /*#__PURE__*/ jsxRuntime.jsxs("span", {
2547
+ className: "font-normal",
2548
+ children: [
2549
+ "/$",
2550
+ PaymentNumberToString(hardLimit)
2551
+ ]
2552
+ })
2553
+ ]
2554
+ })
2555
+ }),
2556
+ /*#__PURE__*/ jsxRuntime.jsxs(core.Popover.Dropdown, {
2557
+ className: "px-2",
2558
+ children: [
2559
+ workspaceAccountManagerTarget && /*#__PURE__*/ jsxRuntime.jsx(core.Button, {
2560
+ component: "a",
2561
+ href: workspaceAccountManagerTarget,
2562
+ target: "_blank",
2563
+ variant: "outline",
2564
+ leftSection: /*#__PURE__*/ jsxRuntime.jsx(md.MdOpenInNew, {
2565
+ size: "1.1em",
2566
+ "aria-label": "external"
2567
+ }),
2568
+ size: "xs",
2569
+ className: "w-full mb-4",
2570
+ children: "Workspace Account Manager"
2571
+ }),
2572
+ /*#__PURE__*/ jsxRuntime.jsxs(core.Text, {
2573
+ size: "sm",
2574
+ className: "uppercase pb-2 px-2",
2575
+ children: [
2576
+ "Limit ",
2577
+ /*#__PURE__*/ jsxRuntime.jsxs("span", {
2578
+ className: "font-black pl-1",
2579
+ children: [
2580
+ "$",
2581
+ PaymentNumberToString(hardLimit)
2582
+ ]
2583
+ })
2584
+ ]
2585
+ }),
2586
+ ProgressBar('mx-2'),
2587
+ /*#__PURE__*/ jsxRuntime.jsx(core.Divider, {
2588
+ my: "sm"
2589
+ }),
2590
+ /*#__PURE__*/ jsxRuntime.jsx(core.Text, {
2591
+ size: "sm",
2592
+ className: "uppercase pb-2 px-2",
2593
+ children: "Account & Charges"
2594
+ }),
2595
+ /*#__PURE__*/ jsxRuntime.jsx(core.Accordion, {
2596
+ variant: "unstyled",
2597
+ classNames: {
2598
+ root: '',
2599
+ control: 'p-0 px-2',
2600
+ label: 'p-0',
2601
+ chevron: 'text-accent',
2602
+ panel: 'p-0',
2603
+ content: 'p-0'
2604
+ },
2605
+ children: /*#__PURE__*/ jsxRuntime.jsxs(core.Accordion.Item, {
2606
+ value: "accountInformation",
2607
+ children: [
2608
+ /*#__PURE__*/ jsxRuntime.jsx(core.Accordion.Control, {
2609
+ children: /*#__PURE__*/ jsxRuntime.jsxs(core.Text, {
2610
+ size: "sm",
2611
+ className: "font-black",
2612
+ children: [
2613
+ workspaceName,
2614
+ " - $",
2615
+ PaymentNumberToString(totalUsage)
2616
+ ]
2617
+ })
2618
+ }),
2619
+ /*#__PURE__*/ jsxRuntime.jsx(core.Accordion.Panel, {
2620
+ children: /*#__PURE__*/ jsxRuntime.jsx(core.Radio.Group, {
2621
+ className: "pt-2",
2622
+ children: usersPayModels.map((obj)=>/*#__PURE__*/ jsxRuntime.jsx(core.Radio.Card, {
2623
+ checked: obj.currentPayModel,
2624
+ disabled: true,
2625
+ className: "p-2 border-none data-checked:bg-primary-lightest data-checked:border-primary-darker data-checked:font-black hover:bg-primary-max ",
2626
+ children: /*#__PURE__*/ jsxRuntime.jsxs(core.Group, {
2627
+ wrap: "nowrap",
2628
+ align: "flex-start",
2629
+ children: [
2630
+ /*#__PURE__*/ jsxRuntime.jsx(core.Text, {
2631
+ size: "sm",
2632
+ className: "grow",
2633
+ children: obj.label
2634
+ }),
2635
+ /*#__PURE__*/ jsxRuntime.jsxs(core.Text, {
2636
+ size: "sm",
2637
+ children: [
2638
+ "$",
2639
+ PaymentNumberToString(obj.totalUsage)
2640
+ ]
2641
+ }),
2642
+ /*#__PURE__*/ jsxRuntime.jsx(core.Radio.Indicator, {
2643
+ color: "accent"
2644
+ })
2645
+ ]
2646
+ })
2647
+ }, obj.value))
2648
+ })
2649
+ })
2650
+ ]
2651
+ })
2652
+ })
2653
+ ]
2654
+ })
2655
+ ]
2656
+ });
2657
+ };
2658
+
2430
2659
  const WorkspaceToolbar = /*#__PURE__*/ React.forwardRef(({ toolbarConfiguration }, ref)=>{
2431
2660
  const workspaceTier = core$1.useCoreSelector((state)=>core$1.selectWorkspaceTier(state));
2432
2661
  const workspaceStatus = core$1.useCoreSelector((state)=>core$1.selectJEGActiveWorkspaceStatus(state));
2433
2662
  const isFullscreen = core$1.useCoreSelector((state)=>core$1.selectWorkspaceFullscreen(state));
2434
- const { showStatus, showStop, tierLabel } = toolbarConfiguration || {};
2663
+ const { showStatus, showStop, tierLabel, requirePayModel, workspaceAccountManagerTarget } = toolbarConfiguration || {};
2435
2664
  const coreDispatch = core$1.useCoreDispatch();
2436
2665
  const toggleFullscreen = React.useCallback(()=>{
2437
2666
  coreDispatch(core$1.setWorkspaceFullscreen(!isFullscreen));
@@ -2486,6 +2715,9 @@ const WorkspaceToolbar = /*#__PURE__*/ React.forwardRef(({ toolbarConfiguration
2486
2715
  /*#__PURE__*/ jsxRuntime.jsx(core.Badge, {
2487
2716
  "aria-label": `Workspace tier: ${tierLabel ?? workspaceTier}`,
2488
2717
  children: tierLabel ?? workspaceTier
2718
+ }),
2719
+ requirePayModel && /*#__PURE__*/ jsxRuntime.jsx(CostTracker, {
2720
+ workspaceAccountManagerTarget: workspaceAccountManagerTarget
2489
2721
  })
2490
2722
  ]
2491
2723
  })