@flamingo-stack/openframe-frontend-core 0.0.837 → 0.0.839
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/build/export-map.json +1 -1
- package/dist/{chunk-4644MFU2.cjs → chunk-2QAUQPGC.cjs} +3 -3
- package/dist/{chunk-FU7VLVYI.cjs → chunk-2XZZHRRU.cjs} +9 -9
- package/dist/{chunk-66ENLZYE.cjs → chunk-37XKZ4JM.cjs} +4 -4
- package/dist/{chunk-NAB6HCQ3.cjs → chunk-3MBKEF7Z.cjs} +32 -32
- package/dist/{chunk-WAYYHZFS.cjs → chunk-5E4YEHHO.cjs} +8 -7
- package/dist/{chunk-RJJPOPF7.cjs → chunk-64PF3UC7.cjs} +2 -2
- package/dist/{chunk-D4DRZIUK.cjs → chunk-C4RYIDPU.cjs} +5 -5
- package/dist/{chunk-S3CSQIDW.cjs → chunk-DFTXZE7B.cjs} +41 -41
- package/dist/{chunk-ZWI6A4SG.cjs → chunk-ENK75WN4.cjs} +2 -2
- package/dist/{chunk-BWJHIPB6.cjs → chunk-GN6LEJWY.cjs} +32 -32
- package/dist/{chunk-EDBQXRKN.cjs → chunk-N2TCVIPR.cjs} +284 -101
- package/dist/{chunk-UU5MDCD4.cjs → chunk-S5RMRQKT.cjs} +11 -11
- package/dist/{chunk-FEISG7YJ.cjs → chunk-SZVPRP5E.cjs} +3 -3
- package/dist/{chunk-J63RYNMW.cjs → chunk-TKS25VKE.cjs} +10 -10
- package/dist/{chunk-S5HBEMZN.cjs → chunk-UDRVVCOC.cjs} +42 -42
- package/dist/{chunk-KBPKMASF.cjs → chunk-XJ4AB24Y.cjs} +3 -3
- package/dist/{cloud-tenants-MJHJKTLX.cjs → cloud-tenants-WE3H3VAW.cjs} +3 -3
- package/dist/components/case-studies/index.cjs +12 -12
- package/dist/components/chat/composer-sheet.d.ts +5 -3
- package/dist/components/chat/composer-sheet.d.ts.map +1 -1
- package/dist/components/chat/composer-sheet.js +7 -6
- package/dist/components/chat/embeddable-chat.js +5 -2
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/docs/index.cjs +6 -6
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/faq/index.cjs +5 -5
- package/dist/components/features/command-box.d.ts.map +1 -1
- package/dist/components/features/command-box.js +4 -23
- package/dist/components/features/index.cjs +13 -3
- package/dist/components/features/software/index.d.ts +1 -0
- package/dist/components/features/software/index.d.ts.map +1 -1
- package/dist/components/features/software/index.js +12 -0
- package/dist/components/features/software/software-action-form.d.ts +9 -1
- package/dist/components/features/software/software-action-form.d.ts.map +1 -1
- package/dist/components/features/software/software-action-form.js +18 -1
- package/dist/components/features/software/update-settings-fields.d.ts +43 -0
- package/dist/components/features/software/update-settings-fields.d.ts.map +1 -0
- package/dist/components/features/software/update-settings-fields.js +202 -0
- package/dist/components/help-center-pages/download-apps-page.d.ts +1 -1
- package/dist/components/help-center-pages/download-apps-page.d.ts.map +1 -1
- package/dist/components/help-center-pages/download-apps-page.js +2 -3
- package/dist/components/help-center-pages/index.cjs +57 -58
- package/dist/components/index.cjs +42 -32
- package/dist/components/meeting-scheduler/index.cjs +26 -26
- package/dist/components/navigation/index.cjs +6 -6
- package/dist/components/onboarding-guides/index.cjs +4 -4
- package/dist/components/product-demo/fixtures/software-update.d.ts +2 -0
- package/dist/components/product-demo/fixtures/software-update.d.ts.map +1 -1
- package/dist/components/product-demo/fixtures/software-update.js +3 -2
- package/dist/components/product-demo/index.cjs +12 -12
- package/dist/components/tickets/index.cjs +8 -8
- package/dist/components/ui/index.cjs +3 -3
- package/dist/{devices-CXVCHKOY.cjs → devices-ZBZN2RRG.cjs} +4 -4
- package/dist/{embeddable-chat-M7L3DBNO.cjs → embeddable-chat-RBC7F4TL.cjs} +5 -2
- package/dist/index.cjs +17 -7
- package/dist/{knowledge-FLQDJJPG.cjs → knowledge-2QNZGDFO.cjs} +3 -3
- package/dist/{logs-D5QE4XXT.cjs → logs-YPWTJVIH.cjs} +10 -10
- package/dist/{policies-W62WSRBO.cjs → policies-BK7TUKAF.cjs} +7 -7
- package/dist/{scripts-MVJAIKSW.cjs → scripts-K7AOYWZE.cjs} +8 -8
- package/dist/{software-update-XP5CN7YZ.cjs → software-update-UFN4SBMY.cjs} +8 -8
- package/dist/utils/notifications.cjs +2 -0
- package/dist/utils/notifications.d.ts +1 -1
- package/dist/utils/notifications.d.ts.map +1 -1
- package/dist/utils/notifications.js +2 -0
- package/package.json +1 -1
- package/src/components/chat/composer-sheet.tsx +12 -9
- package/src/components/chat/embeddable-chat.tsx +5 -2
- package/src/components/features/command-box.tsx +17 -19
- package/src/components/features/notifications/notification-category-icon.tsx +1 -1
- package/src/components/features/software/index.ts +11 -0
- package/src/components/features/software/software-action-form.tsx +28 -1
- package/src/components/features/software/update-settings-fields.tsx +265 -0
- package/src/components/help-center-pages/download-apps-page.tsx +4 -5
- package/src/components/product-demo/fixtures/software-update.ts +2 -2
- package/src/utils/notifications.ts +2 -0
|
@@ -8,7 +8,7 @@ var _chunkLHV2R6QUcjs = require('./chunk-LHV2R6QU.cjs');
|
|
|
8
8
|
var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var _chunkN2TCVIPRcjs = require('./chunk-N2TCVIPR.cjs');
|
|
12
12
|
require('./chunk-FNNDGOR3.cjs');
|
|
13
13
|
require('./chunk-SWMUW3RR.cjs');
|
|
14
14
|
require('./chunk-TRZEFT2N.cjs');
|
|
@@ -19,7 +19,7 @@ require('./chunk-APOMNC7H.cjs');
|
|
|
19
19
|
require('./chunk-24I6RFVU.cjs');
|
|
20
20
|
require('./chunk-MZ4KBSH7.cjs');
|
|
21
21
|
require('./chunk-5SZ4ILU3.cjs');
|
|
22
|
-
require('./chunk-
|
|
22
|
+
require('./chunk-5E4YEHHO.cjs');
|
|
23
23
|
require('./chunk-OT6P57ZS.cjs');
|
|
24
24
|
|
|
25
25
|
|
|
@@ -1908,7 +1908,7 @@ function KnowledgeScreen(_props) {
|
|
|
1908
1908
|
const cast = _chunkLHV2R6QUcjs.useProductDemoCast.call(void 0, );
|
|
1909
1909
|
const fixture = _react.useMemo.call(void 0, () => buildKnowledgeFixture(cast), [cast]);
|
|
1910
1910
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1911
|
-
|
|
1911
|
+
_chunkN2TCVIPRcjs.KnowledgeBaseArticleView,
|
|
1912
1912
|
{
|
|
1913
1913
|
...fixture.article,
|
|
1914
1914
|
content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ7A7IZWLcjs.SimpleMarkdownRenderer, { content: fixture.content, textSize: "compact" })
|
|
@@ -15,7 +15,7 @@ var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _chunkN2TCVIPRcjs = require('./chunk-N2TCVIPR.cjs');
|
|
19
19
|
require('./chunk-FNNDGOR3.cjs');
|
|
20
20
|
require('./chunk-SWMUW3RR.cjs');
|
|
21
21
|
require('./chunk-TRZEFT2N.cjs');
|
|
@@ -28,7 +28,7 @@ require('./chunk-MZ4KBSH7.cjs');
|
|
|
28
28
|
require('./chunk-5SZ4ILU3.cjs');
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
var
|
|
31
|
+
var _chunk5E4YEHHOcjs = require('./chunk-5E4YEHHO.cjs');
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
var _chunkOT6P57ZScjs = require('./chunk-OT6P57ZS.cjs');
|
|
@@ -1890,7 +1890,7 @@ function entry(logId, minutesAgo, severity, toolType, device2, summary) {
|
|
|
1890
1890
|
id: logId,
|
|
1891
1891
|
logId,
|
|
1892
1892
|
timestamp: displayTime(_chunkFDZOE5TLcjs.demoMinutesAgo.call(void 0, minutesAgo)),
|
|
1893
|
-
status: { label: severity, variant:
|
|
1893
|
+
status: { label: severity, variant: _chunkN2TCVIPRcjs.logSeverityVariant.call(void 0, severity) },
|
|
1894
1894
|
source: { name: toolType, toolType },
|
|
1895
1895
|
device: device2,
|
|
1896
1896
|
description: { title: summary }
|
|
@@ -1962,13 +1962,13 @@ var NO_FILTERS = {};
|
|
|
1962
1962
|
var ACTION_COLUMNS = ["copy", "quickView", "open"];
|
|
1963
1963
|
var BESIDE_DRAWER_HIDDEN = [...ACTION_COLUMNS, "tool", "source"];
|
|
1964
1964
|
var logHref = () => "#";
|
|
1965
|
-
var copyAction = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1965
|
+
var copyAction = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN2TCVIPRcjs.LogCopyIconButton, {});
|
|
1966
1966
|
function LogsScreen({ compact = false }) {
|
|
1967
1967
|
const [dock, setDock] = _react.useState.call(void 0, null);
|
|
1968
1968
|
const selected = LOGS_FIXTURE_SELECTED;
|
|
1969
1969
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full bg-ods-bg", children: [
|
|
1970
1970
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1 overflow-clip", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1971
|
-
|
|
1971
|
+
_chunkN2TCVIPRcjs.LogsPageView,
|
|
1972
1972
|
{
|
|
1973
1973
|
showHeader: false,
|
|
1974
1974
|
className: "p-[var(--spacing-system-l)]",
|
|
@@ -1976,7 +1976,7 @@ function LogsScreen({ compact = false }) {
|
|
|
1976
1976
|
onSearchChange: noop,
|
|
1977
1977
|
onOpenFilters: noop,
|
|
1978
1978
|
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1979
|
-
|
|
1979
|
+
_chunkN2TCVIPRcjs.LogsTableView,
|
|
1980
1980
|
{
|
|
1981
1981
|
logs: LOGS_FIXTURE_ENTRIES,
|
|
1982
1982
|
facets: LOGS_FIXTURE_FACETS,
|
|
@@ -1991,7 +1991,7 @@ function LogsScreen({ compact = false }) {
|
|
|
1991
1991
|
}
|
|
1992
1992
|
) }),
|
|
1993
1993
|
!compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: setDock, className: "relative w-[calc(400px+var(--spacing-system-m))] shrink-0", children: dock && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOT6P57ZScjs.AppLayoutDrawerContainerContext.Provider, { value: dock, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1994
|
-
|
|
1994
|
+
_chunkN2TCVIPRcjs.LogDrawer,
|
|
1995
1995
|
{
|
|
1996
1996
|
docked: true,
|
|
1997
1997
|
isOpen: true,
|
|
@@ -2003,12 +2003,12 @@ function LogsScreen({ compact = false }) {
|
|
|
2003
2003
|
{ label: "Log ID", value: selected.logId },
|
|
2004
2004
|
{
|
|
2005
2005
|
label: "Source",
|
|
2006
|
-
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2006
|
+
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN2TCVIPRcjs.ToolBadge, { toolType: _chunk5E4YEHHOcjs.normalizeToolTypeWithFallback.call(void 0, selected.source.toolType) })
|
|
2007
2007
|
},
|
|
2008
|
-
{ label: "Device", value:
|
|
2008
|
+
{ label: "Device", value: _chunkN2TCVIPRcjs.logSourceLabels.call(void 0, selected.device).deviceName }
|
|
2009
2009
|
],
|
|
2010
2010
|
deviceCard: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2011
|
-
|
|
2011
|
+
_chunkN2TCVIPRcjs.DeviceCard,
|
|
2012
2012
|
{
|
|
2013
2013
|
...LOGS_FIXTURE_DEVICE,
|
|
2014
2014
|
actions: {
|
|
@@ -10,7 +10,7 @@ var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunkN2TCVIPRcjs = require('./chunk-N2TCVIPR.cjs');
|
|
14
14
|
require('./chunk-FNNDGOR3.cjs');
|
|
15
15
|
require('./chunk-SWMUW3RR.cjs');
|
|
16
16
|
require('./chunk-TRZEFT2N.cjs');
|
|
@@ -21,7 +21,7 @@ require('./chunk-APOMNC7H.cjs');
|
|
|
21
21
|
require('./chunk-24I6RFVU.cjs');
|
|
22
22
|
require('./chunk-MZ4KBSH7.cjs');
|
|
23
23
|
require('./chunk-5SZ4ILU3.cjs');
|
|
24
|
-
require('./chunk-
|
|
24
|
+
require('./chunk-5E4YEHHO.cjs');
|
|
25
25
|
require('./chunk-OT6P57ZS.cjs');
|
|
26
26
|
require('./chunk-Z7A7IZWL.cjs');
|
|
27
27
|
require('./chunk-4JHO2NVI.cjs');
|
|
@@ -1894,14 +1894,14 @@ var POLICIES = [
|
|
|
1894
1894
|
policy("policy-local-admins", "No local admins", "No everyday account is a local administrator.", false, 0)
|
|
1895
1895
|
];
|
|
1896
1896
|
var POLICIES_FIXTURE = {
|
|
1897
|
-
summary:
|
|
1897
|
+
summary: _chunkN2TCVIPRcjs.computePolicySummary.call(void 0, POLICIES),
|
|
1898
1898
|
rows: POLICIES.map((item) => ({
|
|
1899
1899
|
id: item.id,
|
|
1900
1900
|
name: item.name,
|
|
1901
1901
|
description: item.description,
|
|
1902
1902
|
critical: item.critical,
|
|
1903
1903
|
severityLabel: item.critical ? "Critical" : "Low",
|
|
1904
|
-
status:
|
|
1904
|
+
status: _chunkN2TCVIPRcjs.getPolicyTableStatus.call(void 0, item),
|
|
1905
1905
|
actions: [
|
|
1906
1906
|
{ label: "Policy Details", onClick: noop },
|
|
1907
1907
|
{ label: "Delete Policy", onClick: noop }
|
|
@@ -1915,16 +1915,16 @@ var POLICIES_FIXTURE = {
|
|
|
1915
1915
|
var _jsxruntime = require('react/jsx-runtime');
|
|
1916
1916
|
function PoliciesScreen({ compact = false }) {
|
|
1917
1917
|
const table = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1918
|
-
|
|
1918
|
+
_chunkN2TCVIPRcjs.PoliciesTable,
|
|
1919
1919
|
{
|
|
1920
1920
|
rows: POLICIES_FIXTURE.rows,
|
|
1921
1921
|
rowAsLink: true,
|
|
1922
|
-
rightSlot: compact ? void 0 : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1922
|
+
rightSlot: compact ? void 0 : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN2TCVIPRcjs.DataTable.RowCount, {}),
|
|
1923
1923
|
emptyMessage: "No policies found."
|
|
1924
1924
|
}
|
|
1925
1925
|
);
|
|
1926
1926
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full flex-col gap-[var(--spacing-system-l)] bg-ods-bg p-[var(--spacing-system-l)]", children: [
|
|
1927
|
-
!compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1927
|
+
!compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN2TCVIPRcjs.PolicySummaryCards, { summary: POLICIES_FIXTURE.summary, now: POLICIES_FIXTURE.now }),
|
|
1928
1928
|
table
|
|
1929
1929
|
] });
|
|
1930
1930
|
}
|
|
@@ -13,7 +13,7 @@ var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _chunkN2TCVIPRcjs = require('./chunk-N2TCVIPR.cjs');
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
var _chunkFNNDGOR3cjs = require('./chunk-FNNDGOR3.cjs');
|
|
@@ -26,7 +26,7 @@ require('./chunk-APOMNC7H.cjs');
|
|
|
26
26
|
require('./chunk-24I6RFVU.cjs');
|
|
27
27
|
require('./chunk-MZ4KBSH7.cjs');
|
|
28
28
|
require('./chunk-5SZ4ILU3.cjs');
|
|
29
|
-
require('./chunk-
|
|
29
|
+
require('./chunk-5E4YEHHO.cjs');
|
|
30
30
|
require('./chunk-OT6P57ZS.cjs');
|
|
31
31
|
require('./chunk-Z7A7IZWL.cjs');
|
|
32
32
|
require('./chunk-4JHO2NVI.cjs');
|
|
@@ -1998,8 +1998,8 @@ function buildScriptsFixture(cast) {
|
|
|
1998
1998
|
var _jsxruntime = require('react/jsx-runtime');
|
|
1999
1999
|
var WIDE_HIDDEN_COLUMNS = ["result", "open"];
|
|
2000
2000
|
var COMPACT_COLUMNS = [
|
|
2001
|
-
{ ...
|
|
2002
|
-
|
|
2001
|
+
{ ..._chunkN2TCVIPRcjs.EXECUTION_COLUMNS.machineId, width: "flex-1 min-w-0", hideAt: void 0 },
|
|
2002
|
+
_chunkN2TCVIPRcjs.EXECUTION_COLUMNS.status
|
|
2003
2003
|
];
|
|
2004
2004
|
var COMPACT_ROWS = 4;
|
|
2005
2005
|
var TOKEN_CLASS = {
|
|
@@ -2058,7 +2058,7 @@ function ScriptCodePicture({ script }) {
|
|
|
2058
2058
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center justify-between gap-[var(--spacing-system-m)]", children: [
|
|
2059
2059
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFNNDGOR3cjs.TruncateText, { variant: "h6", tone: "secondary", children: `Written by ${provenance.author} \xB7 approved by ${provenance.approver}` }),
|
|
2060
2060
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2061
|
-
|
|
2061
|
+
_chunkN2TCVIPRcjs.ScriptShellBadge,
|
|
2062
2062
|
{
|
|
2063
2063
|
value: script.shellType,
|
|
2064
2064
|
className: "shrink-0 text-ods-text-secondary text-h6",
|
|
@@ -2082,7 +2082,7 @@ function ScriptsScreen({ compact = false }) {
|
|
|
2082
2082
|
return (
|
|
2083
2083
|
// Four runs of the card's row height fill the frame; the padding is what is left round them.
|
|
2084
2084
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full overflow-hidden bg-ods-bg p-[var(--spacing-system-xsf)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2085
|
-
|
|
2085
|
+
_chunkN2TCVIPRcjs.ScriptExecutionsTable,
|
|
2086
2086
|
{
|
|
2087
2087
|
rows: fixture.executions.slice(0, COMPACT_ROWS),
|
|
2088
2088
|
columns: COMPACT_COLUMNS,
|
|
@@ -2092,13 +2092,13 @@ function ScriptsScreen({ compact = false }) {
|
|
|
2092
2092
|
) })
|
|
2093
2093
|
);
|
|
2094
2094
|
}
|
|
2095
|
-
const renderOutput = (row) => row.id === fixture.openExecutionId ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2095
|
+
const renderOutput = (row) => row.id === fixture.openExecutionId ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN2TCVIPRcjs.ScriptExecutionResult, { result: row.result, empty: "\u2014" }) : null;
|
|
2096
2096
|
return (
|
|
2097
2097
|
// The frame's tighter padding and no header row: the output opened under a run needs the height.
|
|
2098
2098
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full gap-[var(--spacing-system-m)] overflow-hidden bg-ods-bg p-[var(--spacing-system-m)]", children: [
|
|
2099
2099
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-[39%] shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScriptCodePicture, { script: fixture.script }) }),
|
|
2100
2100
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1 overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2101
|
-
|
|
2101
|
+
_chunkN2TCVIPRcjs.ScriptExecutionsTable,
|
|
2102
2102
|
{
|
|
2103
2103
|
rows: fixture.executions,
|
|
2104
2104
|
hideColumns: WIDE_HIDDEN_COLUMNS,
|
|
@@ -15,7 +15,7 @@ var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _chunkN2TCVIPRcjs = require('./chunk-N2TCVIPR.cjs');
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
var _chunkFNNDGOR3cjs = require('./chunk-FNNDGOR3.cjs');
|
|
@@ -28,7 +28,7 @@ require('./chunk-APOMNC7H.cjs');
|
|
|
28
28
|
require('./chunk-24I6RFVU.cjs');
|
|
29
29
|
require('./chunk-MZ4KBSH7.cjs');
|
|
30
30
|
require('./chunk-5SZ4ILU3.cjs');
|
|
31
|
-
require('./chunk-
|
|
31
|
+
require('./chunk-5E4YEHHO.cjs');
|
|
32
32
|
require('./chunk-OT6P57ZS.cjs');
|
|
33
33
|
require('./chunk-Z7A7IZWL.cjs');
|
|
34
34
|
require('./chunk-4JHO2NVI.cjs');
|
|
@@ -1883,7 +1883,7 @@ var chrome = {
|
|
|
1883
1883
|
packageType: null
|
|
1884
1884
|
};
|
|
1885
1885
|
var TONIGHT_11_PM = { value: "23:00", label: "11:00 PM" };
|
|
1886
|
-
var
|
|
1886
|
+
var SOFTWARE_DEMO_TIMING = {
|
|
1887
1887
|
timeReferenceOptions: [
|
|
1888
1888
|
{ value: "SERVER", label: "Your account timezone" },
|
|
1889
1889
|
{ value: "DEVICE_LOCAL", label: "Device local timezone" }
|
|
@@ -1909,7 +1909,7 @@ function buildSoftwareUpdateFixture(cast) {
|
|
|
1909
1909
|
return {
|
|
1910
1910
|
action: "UPDATE",
|
|
1911
1911
|
package: chrome,
|
|
1912
|
-
timing,
|
|
1912
|
+
timing: SOFTWARE_DEMO_TIMING,
|
|
1913
1913
|
initialValues,
|
|
1914
1914
|
devices,
|
|
1915
1915
|
selectedIds: /* @__PURE__ */ new Set([_chunkFDZOE5TLcjs.DEMO_DEVICES.reception.id, _chunkFDZOE5TLcjs.DEMO_DEVICES.samT14.id, _chunkFDZOE5TLcjs.DEMO_DEVICES.frontDesk.id])
|
|
@@ -1925,12 +1925,12 @@ function StaticPackageField({ value }) {
|
|
|
1925
1925
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1926
1926
|
_chunkFNNDGOR3cjs.Autocomplete,
|
|
1927
1927
|
{
|
|
1928
|
-
label:
|
|
1928
|
+
label: _chunkN2TCVIPRcjs.PACKAGE_SEARCH_LABEL,
|
|
1929
1929
|
labelVariant: "large",
|
|
1930
1930
|
options: value ? [{ value: value.id, label: value.name, description: _nullishCoalesce(value.description, () => ( void 0)) }] : [],
|
|
1931
1931
|
value: _nullishCoalesce(_optionalChain([value, 'optionalAccess', _ => _.id]), () => ( null)),
|
|
1932
1932
|
onChange: noop,
|
|
1933
|
-
placeholder:
|
|
1933
|
+
placeholder: _chunkN2TCVIPRcjs.PACKAGE_SEARCH_PLACEHOLDER
|
|
1934
1934
|
}
|
|
1935
1935
|
);
|
|
1936
1936
|
}
|
|
@@ -1944,7 +1944,7 @@ function SoftwareUpdateScreen({ compact = false }) {
|
|
|
1944
1944
|
[fixture.devices, fixture.selectedIds]
|
|
1945
1945
|
);
|
|
1946
1946
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1947
|
-
|
|
1947
|
+
_chunkN2TCVIPRcjs.SoftwareActionForm,
|
|
1948
1948
|
{
|
|
1949
1949
|
action: fixture.action,
|
|
1950
1950
|
showHeader: false,
|
|
@@ -1956,7 +1956,7 @@ function SoftwareUpdateScreen({ compact = false }) {
|
|
|
1956
1956
|
initialValues: fixture.initialValues,
|
|
1957
1957
|
renderPackageSearch,
|
|
1958
1958
|
renderDevicePicker: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1959
|
-
|
|
1959
|
+
_chunkN2TCVIPRcjs.DeviceSelector,
|
|
1960
1960
|
{
|
|
1961
1961
|
devices: selected,
|
|
1962
1962
|
loading: false,
|
|
@@ -21,6 +21,7 @@ var NOTIFICATION_CATEGORIES = [
|
|
|
21
21
|
"INSIGHTS",
|
|
22
22
|
"MINGO",
|
|
23
23
|
"INTEGRATIONS",
|
|
24
|
+
"BILLING",
|
|
24
25
|
"GENERIC"
|
|
25
26
|
];
|
|
26
27
|
var NOTIFICATION_CATEGORY_LABELS = {
|
|
@@ -35,6 +36,7 @@ var NOTIFICATION_CATEGORY_LABELS = {
|
|
|
35
36
|
INSIGHTS: "Insights",
|
|
36
37
|
MINGO: "Mingo",
|
|
37
38
|
INTEGRATIONS: "Integrations",
|
|
39
|
+
BILLING: "Billing",
|
|
38
40
|
GENERIC: "General"
|
|
39
41
|
};
|
|
40
42
|
var DEFAULT_NOTIFICATION_CATEGORY = "GENERIC";
|
|
@@ -18,7 +18,7 @@ export declare const DEFAULT_NOTIFICATION_SEVERITY: NotificationSeverity;
|
|
|
18
18
|
* The backend's `NotificationCategory`: the dashboard section a notification
|
|
19
19
|
* belongs to. Any section but GENERIC shows an unread counter on its menu item.
|
|
20
20
|
*/
|
|
21
|
-
export declare const NOTIFICATION_CATEGORIES: readonly ["DASHBOARD", "CUSTOMERS", "DEVICES", "SCRIPTS", "MONITORING", "SOFTWARE", "LOGS", "TICKETS", "INSIGHTS", "MINGO", "INTEGRATIONS", "GENERIC"];
|
|
21
|
+
export declare const NOTIFICATION_CATEGORIES: readonly ["DASHBOARD", "CUSTOMERS", "DEVICES", "SCRIPTS", "MONITORING", "SOFTWARE", "LOGS", "TICKETS", "INSIGHTS", "MINGO", "INTEGRATIONS", "BILLING", "GENERIC"];
|
|
22
22
|
export type NotificationCategory = (typeof NOTIFICATION_CATEGORIES)[number];
|
|
23
23
|
/** Each category as the app's navigation names its section. */
|
|
24
24
|
export declare const NOTIFICATION_CATEGORY_LABELS: Readonly<Record<NotificationCategory, string>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/utils/notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,yEAAyE;AACzE,eAAO,MAAM,uBAAuB,mDAAoD,CAAC;AACzF,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAKvF,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,6BAA6B,EAAE,oBAA6B,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/utils/notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,yEAAyE;AACzE,eAAO,MAAM,uBAAuB,mDAAoD,CAAC;AACzF,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAKvF,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,6BAA6B,EAAE,oBAA6B,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,uBAAuB,mKAc1B,CAAC;AACX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,+DAA+D;AAC/D,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAcvF,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,6BAA6B,EAAE,oBAAgC,CAAC;AAE7E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF"}
|
|
@@ -18,6 +18,7 @@ const NOTIFICATION_CATEGORIES = [
|
|
|
18
18
|
"INSIGHTS",
|
|
19
19
|
"MINGO",
|
|
20
20
|
"INTEGRATIONS",
|
|
21
|
+
"BILLING",
|
|
21
22
|
"GENERIC"
|
|
22
23
|
];
|
|
23
24
|
const NOTIFICATION_CATEGORY_LABELS = {
|
|
@@ -32,6 +33,7 @@ const NOTIFICATION_CATEGORY_LABELS = {
|
|
|
32
33
|
INSIGHTS: "Insights",
|
|
33
34
|
MINGO: "Mingo",
|
|
34
35
|
INTEGRATIONS: "Integrations",
|
|
36
|
+
BILLING: "Billing",
|
|
35
37
|
GENERIC: "General"
|
|
36
38
|
};
|
|
37
39
|
const DEFAULT_NOTIFICATION_CATEGORY = "GENERIC";
|
package/package.json
CHANGED
|
@@ -31,7 +31,7 @@ export interface ComposerSheetProps {
|
|
|
31
31
|
onResetHeight?: () => void;
|
|
32
32
|
/** Share of the layer the sheet takes while `height` is null. Default 0.64. */
|
|
33
33
|
defaultShare?: number;
|
|
34
|
-
/** Default 320. */
|
|
34
|
+
/** Default 320; a layer too short for it lowers it, so the sheet stays inside the layer. */
|
|
35
35
|
minHeight?: number;
|
|
36
36
|
/**
|
|
37
37
|
* Whether the tab on its top edge resizes it. Default `true`. Off (a phone, where
|
|
@@ -76,8 +76,10 @@ function TabGrip() {
|
|
|
76
76
|
* The conversation sheet over a page: it rises from the docked composer, the page
|
|
77
77
|
* stays beneath under a scrim, and a tab standing on its top edge resizes it from
|
|
78
78
|
* `minHeight` to the full height of the layer (a drag, the arrow keys, Home / End; a
|
|
79
|
-
* double click asks the host for the default height).
|
|
80
|
-
*
|
|
79
|
+
* double click asks the host for the default height). The layer is its limit before
|
|
80
|
+
* `minHeight` is: a tall dock in a short window leaves less than the floor, and past the
|
|
81
|
+
* layer's top the sheet's header would run under what stands over it. Without
|
|
82
|
+
* `resizable` it has no tab and can take the whole layer. Meant for `AppLayout`'s
|
|
81
83
|
* `composerSheet` layer, whose bottom is the dock's top edge: the sheet stands above
|
|
82
84
|
* the composer as a card of its own, its header at its top border.
|
|
83
85
|
*
|
|
@@ -122,8 +124,9 @@ export function ComposerSheet({
|
|
|
122
124
|
// floor for that frame and grow from it. The tab above the sheet stays in the layer.
|
|
123
125
|
const tabHeight = resizable ? TAB_HEIGHT : 0;
|
|
124
126
|
const measured = layerHeight > 0;
|
|
125
|
-
const maxHeight = measured ? Math.max(
|
|
126
|
-
const
|
|
127
|
+
const maxHeight = measured ? Math.max(0, layerHeight - tabHeight) : Number.POSITIVE_INFINITY;
|
|
128
|
+
const floor = Math.min(minHeight, maxHeight);
|
|
129
|
+
const clamp = (next: number) => Math.round(Math.min(maxHeight, Math.max(floor, next)));
|
|
127
130
|
// Until the layer is measured the share is a percentage, so the first frame is right.
|
|
128
131
|
const resolved = height === null ? (measured ? clamp(layerHeight * defaultShare) : null) : clamp(height);
|
|
129
132
|
|
|
@@ -155,7 +158,7 @@ export function ComposerSheet({
|
|
|
155
158
|
)}
|
|
156
159
|
style={{
|
|
157
160
|
height: resolved ?? `${Math.round(defaultShare * 100)}%`,
|
|
158
|
-
minHeight,
|
|
161
|
+
minHeight: floor,
|
|
159
162
|
maxHeight: `calc(100% - ${tabHeight}px)`,
|
|
160
163
|
}}
|
|
161
164
|
>
|
|
@@ -171,9 +174,9 @@ export function ComposerSheet({
|
|
|
171
174
|
<TabFoot side="right" />
|
|
172
175
|
<PanelResizeHandle
|
|
173
176
|
side="bottom"
|
|
174
|
-
size={resolved ??
|
|
175
|
-
minSize={
|
|
176
|
-
maxSize={measured ? maxHeight : (resolved ??
|
|
177
|
+
size={resolved ?? floor}
|
|
178
|
+
minSize={floor}
|
|
179
|
+
maxSize={measured ? maxHeight : (resolved ?? floor)}
|
|
177
180
|
onSize={next => onHeightChange(clamp(next))}
|
|
178
181
|
clampSize={clamp}
|
|
179
182
|
panelRef={panelRef}
|
|
@@ -2762,8 +2762,11 @@ function EmbeddableChatInner({
|
|
|
2762
2762
|
'flex min-h-0 flex-1 flex-col p-[var(--spacing-system-m)]',
|
|
2763
2763
|
// With a host block above the composer the thread keeps room
|
|
2764
2764
|
// for a line and the working status: the block gives way
|
|
2765
|
-
// instead (below), so the status never lands on it.
|
|
2766
|
-
|
|
2765
|
+
// instead (below), so the status never lands on it. Not when
|
|
2766
|
+
// the thread is portalled out (`threadContainer`): the block
|
|
2767
|
+
// stays in the host's dock and takes no height from it, so the
|
|
2768
|
+
// floor would only push the thread's end out of its own box.
|
|
2769
|
+
hasAboveComposer && !splitMode && 'min-h-32',
|
|
2767
2770
|
)}
|
|
2768
2771
|
>
|
|
2769
2772
|
<div key={contentViewKey} className="flex min-h-0 flex-1 flex-col duration-200 animate-in fade-in-0">
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { ChevronDown } from 'lucide-react';
|
|
4
4
|
import type React from 'react';
|
|
5
|
+
import { TEXT_LINES_HEIGHT } from '../../styles/component-sizes';
|
|
5
6
|
import { cn } from '../../utils/cn';
|
|
6
7
|
import { Copy02Icon } from '../icons-v2-generated/documents/copy-02-icon';
|
|
7
8
|
import { TextLineSkeleton } from '../loading/unified-skeleton';
|
|
@@ -106,7 +107,11 @@ const COMMAND_BOX_CLASS = 'flex flex-col gap-2';
|
|
|
106
107
|
const COMMAND_BOX_TITLE_CLASS = 'text-ods-text-primary text-h4';
|
|
107
108
|
const COMMAND_BOX_FRAME_CLASS = 'rounded-[6px] border border-ods-border bg-ods-bg p-4';
|
|
108
109
|
const COMMAND_BOX_COPY_ROW_CLASS = 'flex items-start gap-4';
|
|
109
|
-
|
|
110
|
+
/**
|
|
111
|
+
* The copy button's slot, one line of the command's text class tall: the taller button overflows it evenly, so the
|
|
112
|
+
* frame's padding stays even and the icon stays on the first line of a long command.
|
|
113
|
+
*/
|
|
114
|
+
const COMMAND_BOX_COPY_SLOT_CLASS = cn(TEXT_LINES_HEIGHT[1], 'flex shrink-0 items-center text-code');
|
|
110
115
|
const COMMAND_BOX_ACTIONS_CLASS = 'mt-4 flex flex-col gap-3 content-md:flex-row content-md:justify-end';
|
|
111
116
|
const COMMAND_BOX_ACTION_CLASS = 'w-full content-md:w-auto';
|
|
112
117
|
/** The fixed-height command area: N rows of the `text-code` line height token. Read by the box and its skeleton. */
|
|
@@ -184,16 +189,11 @@ export function CommandBox({
|
|
|
184
189
|
{onCopy ? (
|
|
185
190
|
<div className={COMMAND_BOX_COPY_ROW_CLASS}>
|
|
186
191
|
{commandText}
|
|
187
|
-
<
|
|
188
|
-
variant="bare"
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
aria-label={copyAriaLabel}
|
|
193
|
-
className={COMMAND_BOX_COPY_BUTTON_LAYOUT}
|
|
194
|
-
>
|
|
195
|
-
<Copy02Icon />
|
|
196
|
-
</Button>
|
|
192
|
+
<div className={COMMAND_BOX_COPY_SLOT_CLASS}>
|
|
193
|
+
<Button variant="bare" size="icon-sm" type="button" onClick={onCopy} aria-label={copyAriaLabel}>
|
|
194
|
+
<Copy02Icon />
|
|
195
|
+
</Button>
|
|
196
|
+
</div>
|
|
197
197
|
</div>
|
|
198
198
|
) : (
|
|
199
199
|
commandText
|
|
@@ -290,14 +290,12 @@ function CommandBoxSkeleton({
|
|
|
290
290
|
{showCopy ? (
|
|
291
291
|
<div className={COMMAND_BOX_COPY_ROW_CLASS}>
|
|
292
292
|
{commandLines}
|
|
293
|
-
<
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
>
|
|
299
|
-
<Copy02Icon />
|
|
300
|
-
</span>
|
|
293
|
+
<div className={COMMAND_BOX_COPY_SLOT_CLASS}>
|
|
294
|
+
{/* `cn` resolves the conflicting icon sizes, as `Button` does; without it, the icon is 20px. */}
|
|
295
|
+
<span className={cn(buttonVariants({ variant: 'bare', size: 'icon-sm' }))}>
|
|
296
|
+
<Copy02Icon />
|
|
297
|
+
</span>
|
|
298
|
+
</div>
|
|
301
299
|
</div>
|
|
302
300
|
) : (
|
|
303
301
|
commandLines
|
|
@@ -6,7 +6,7 @@ import { NamedIcon, type IconRef } from '../../chat/utils/icon-loading';
|
|
|
6
6
|
* Backend `NotificationCategory` → icon, the icon of the dashboard section the
|
|
7
7
|
* notification belongs to (the app navigation's own). A table of icon NAMES: an
|
|
8
8
|
* icon is loaded when a notification of its category is drawn. GENERIC,
|
|
9
|
-
* INTEGRATIONS and unknown categories have none (the tile draws its severity
|
|
9
|
+
* INTEGRATIONS, BILLING and unknown categories have none (the tile draws its severity
|
|
10
10
|
* dot). Every icon takes the host's text colour, so a row of them is one colour.
|
|
11
11
|
*/
|
|
12
12
|
const ICON_BY_CATEGORY: Readonly<Record<string, IconRef>> = {
|
|
@@ -37,3 +37,14 @@ export {
|
|
|
37
37
|
} from './software-action-form';
|
|
38
38
|
export { newSoftwareRow, type SelectedPackage, type SoftwareRow } from './software-row';
|
|
39
39
|
export { type PackageSearchSlotProps, SoftwareRowFields, type SoftwareRowFieldsProps } from './software-row-fields';
|
|
40
|
+
export {
|
|
41
|
+
DEFAULT_SOFTWARE_UPDATE_POLICY,
|
|
42
|
+
DEFAULT_SOFTWARE_UPDATE_SETTINGS,
|
|
43
|
+
SOFTWARE_UPDATE_COUNTDOWN_OPTIONS,
|
|
44
|
+
SOFTWARE_UPDATE_DEADLINE_OPTIONS,
|
|
45
|
+
type SoftwareUpdateMode,
|
|
46
|
+
type SoftwareUpdatePolicy,
|
|
47
|
+
SoftwareUpdateSettingsFields,
|
|
48
|
+
type SoftwareUpdateSettingsFieldsProps,
|
|
49
|
+
type SoftwareUpdateSettingsValues,
|
|
50
|
+
} from './update-settings-fields';
|
|
@@ -9,6 +9,11 @@ import { SoftwareScheduleFields, type SoftwareScheduleTiming } from './schedule-
|
|
|
9
9
|
import { SOFTWARE_ACTION_COPY, type SoftwareActionKind } from './software-action-copy';
|
|
10
10
|
import { newSoftwareRow, type SoftwareRow } from './software-row';
|
|
11
11
|
import { type PackageSearchSlotProps, SoftwareRowFields } from './software-row-fields';
|
|
12
|
+
import {
|
|
13
|
+
DEFAULT_SOFTWARE_UPDATE_SETTINGS,
|
|
14
|
+
SoftwareUpdateSettingsFields,
|
|
15
|
+
type SoftwareUpdateSettingsValues,
|
|
16
|
+
} from './update-settings-fields';
|
|
12
17
|
|
|
13
18
|
/** Run the packages now, or at a scheduled start. */
|
|
14
19
|
export type SoftwareRunMode = 'now' | 'schedule';
|
|
@@ -20,6 +25,8 @@ export interface SoftwareActionFormValues<TRef extends string = string> {
|
|
|
20
25
|
date: Date | null;
|
|
21
26
|
time: string;
|
|
22
27
|
timeReference: TRef;
|
|
28
|
+
/** UPDATE only: "Update Settings". Undefined for INSTALL, and when the form hides them (`showUpdateSettings`). */
|
|
29
|
+
updateSettings?: SoftwareUpdateSettingsValues;
|
|
23
30
|
}
|
|
24
31
|
|
|
25
32
|
/** What the device picker slot is told: which devices the chosen packages can run on. */
|
|
@@ -62,6 +69,11 @@ export interface SoftwareActionFormProps<TRef extends string = string> {
|
|
|
62
69
|
* schedule's fields on the same row, so the devices start higher.
|
|
63
70
|
*/
|
|
64
71
|
runModeLayout?: 'stacked' | 'inline';
|
|
72
|
+
/**
|
|
73
|
+
* UPDATE only: the "Update Settings" block under the timing. Default false, so a host that does not send the
|
|
74
|
+
* settings yet never shows choices that go nowhere; the host that submits `updateSettings` passes true.
|
|
75
|
+
*/
|
|
76
|
+
showUpdateSettings?: boolean;
|
|
65
77
|
/** The "Device Selection" heading over the picker. Default true; a host that titles the picker itself passes false. */
|
|
66
78
|
showDeviceHeading?: boolean;
|
|
67
79
|
className?: string;
|
|
@@ -91,6 +103,7 @@ export function SoftwareActionForm<TRef extends string = string>({
|
|
|
91
103
|
renderDevicePicker,
|
|
92
104
|
addRows = true,
|
|
93
105
|
runModeLayout = 'stacked',
|
|
106
|
+
showUpdateSettings = false,
|
|
94
107
|
showDeviceHeading = true,
|
|
95
108
|
className = 'px-[var(--spacing-system-l)] pb-[var(--spacing-system-l)]',
|
|
96
109
|
}: SoftwareActionFormProps<TRef>) {
|
|
@@ -101,6 +114,10 @@ export function SoftwareActionForm<TRef extends string = string>({
|
|
|
101
114
|
const [date, setDate] = useState<Date | null>(initialValues.date ?? null);
|
|
102
115
|
const [time, setTime] = useState(initialValues.time ?? '');
|
|
103
116
|
const [timeReference, setTimeReference] = useState<TRef>(initialValues.timeReference);
|
|
117
|
+
const [updateSettings, setUpdateSettings] = useState<SoftwareUpdateSettingsValues>(
|
|
118
|
+
() => initialValues.updateSettings ?? DEFAULT_SOFTWARE_UPDATE_SETTINGS,
|
|
119
|
+
);
|
|
120
|
+
const withUpdateSettings = action === 'UPDATE' && showUpdateSettings;
|
|
104
121
|
|
|
105
122
|
// The picker's frame: devices on the OS the chosen packages install on.
|
|
106
123
|
const osTypesKey = [...new Set(rows.map(row => PACKAGE_MANAGER_OS[row.packageManager]))].sort().join(',');
|
|
@@ -110,7 +127,15 @@ export function SoftwareActionForm<TRef extends string = string>({
|
|
|
110
127
|
{
|
|
111
128
|
label: mode === 'now' ? copy.runLabel : copy.scheduleLabel,
|
|
112
129
|
variant: 'accent',
|
|
113
|
-
onClick: () =>
|
|
130
|
+
onClick: () =>
|
|
131
|
+
onSubmit({
|
|
132
|
+
rows,
|
|
133
|
+
mode,
|
|
134
|
+
date,
|
|
135
|
+
time,
|
|
136
|
+
timeReference,
|
|
137
|
+
updateSettings: withUpdateSettings ? updateSettings : undefined,
|
|
138
|
+
}),
|
|
114
139
|
disabled: submitDisabled,
|
|
115
140
|
loading: submitting,
|
|
116
141
|
},
|
|
@@ -190,6 +215,8 @@ export function SoftwareActionForm<TRef extends string = string>({
|
|
|
190
215
|
</>
|
|
191
216
|
)}
|
|
192
217
|
|
|
218
|
+
{withUpdateSettings && <SoftwareUpdateSettingsFields value={updateSettings} onChange={setUpdateSettings} />}
|
|
219
|
+
|
|
193
220
|
{showDeviceHeading && (
|
|
194
221
|
<h2 className="pt-[var(--spacing-system-l)] text-ods-text-primary text-h2">Device Selection</h2>
|
|
195
222
|
)}
|