@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 +6 -7
- package/dist/dts/components/CostTracker.d.ts +6 -0
- package/dist/dts/components/CostTracker.d.ts.map +1 -0
- package/dist/dts/components/CostTracker.js +154 -0
- package/dist/dts/components/CostTracker.js.map +1 -0
- package/dist/dts/workspace/WorkspaceLayout/WorkspaceToolbar.d.ts.map +1 -1
- package/dist/dts/workspace/WorkspaceLayout/WorkspaceToolbar.js +3 -2
- package/dist/dts/workspace/WorkspaceLayout/WorkspaceToolbar.js.map +1 -1
- package/dist/dts/workspace/tiers/types.d.ts +2 -0
- package/dist/dts/workspace/tiers/types.d.ts.map +1 -1
- package/dist/index/cjs/index.js +233 -1
- package/dist/index/cjs/index.js.map +1 -1
- package/dist/index/esm/index.js +237 -5
- package/dist/index/esm/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/jupyterlite-builds/remote-private/overrides.json +16 -0
- package/jupyterlite-builds/remote-private/overrides.json +16 -0
- package/package.json +4 -4
- package/.jupyterlite.doit.db +0 -0
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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 @@
|
|
|
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;
|
|
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":";AAAA,OAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EACL,UAAU,EACV,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,OAAO,GACR,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAEL,8BAA8B,EAC9B,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;
|
|
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;
|
|
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"}
|
package/dist/index/cjs/index.js
CHANGED
|
@@ -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
|
})
|