@charcuterie/ui 3.24.0 → 3.26.0
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/README.md +18 -0
- package/dist/Board/BoardCard.d.ts +7 -0
- package/dist/Board/BoardCard.d.ts.map +1 -1
- package/dist/Board/BoardCard.js +33 -11
- package/dist/Board/BoardCard.js.map +1 -1
- package/dist/DeploymentUpdate/useDeploymentUpdate.d.ts +31 -0
- package/dist/DeploymentUpdate/useDeploymentUpdate.d.ts.map +1 -0
- package/dist/DeploymentUpdate/useDeploymentUpdate.js +94 -0
- package/dist/DeploymentUpdate/useDeploymentUpdate.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/Board/Board.mdx +5 -0
- package/src/Board/Board.stories.tsx +40 -0
- package/src/Board/Board.test.tsx +41 -0
- package/src/Board/BoardCard.tsx +49 -14
- package/src/DeploymentUpdate/useDeploymentUpdate.ts +143 -0
- package/src/index.ts +9 -0
package/README.md
CHANGED
|
@@ -117,6 +117,24 @@ CSS `@import` that misses fails **silently**: no error, no utilities, an unstyle
|
|
|
117
117
|
|
|
118
118
|
The testing gates are at `@charcuterie/ui/testing`.
|
|
119
119
|
|
|
120
|
+
## Detect a new deployment
|
|
121
|
+
|
|
122
|
+
`useDeploymentUpdate` detects that a static SPA has been replaced. It works with
|
|
123
|
+
`createStaticHandler` from `@charcuterie/server`, which provides a no-cache build marker
|
|
124
|
+
and an SSE marker stream by default.
|
|
125
|
+
|
|
126
|
+
```tsx
|
|
127
|
+
const { isUpdateAvailable, reload } = useDeploymentUpdate()
|
|
128
|
+
|
|
129
|
+
return isUpdateAvailable ? (
|
|
130
|
+
<Button onClick={reload}>Update this app</Button>
|
|
131
|
+
) : null
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The hook never reloads without the user's action. A page can have unsaved state. If the app
|
|
135
|
+
already owns an SSE connection, set `isEventSourceEnabled: false` and call
|
|
136
|
+
`checkForUpdate()` after that source reconnects.
|
|
137
|
+
|
|
120
138
|
### While the packages are unpublished: three lines, and you need all three
|
|
121
139
|
|
|
122
140
|
A consumer links by `portal:` until this publishes
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { IntentName } from "@charcuterie/tokens";
|
|
2
2
|
import type { ReactNode } from "react";
|
|
3
3
|
import type { CardAccentEdge } from "../Card/cardAccentEdge.ts";
|
|
4
|
+
import type { MenuProps } from "../Menu/Menu.tsx";
|
|
4
5
|
type BoardItemFields = {
|
|
5
6
|
/** What the bar means, in words. "Priority 0", "Movies and Shows". */
|
|
6
7
|
accentLabel?: string;
|
|
@@ -39,6 +40,12 @@ type BoardItemFields = {
|
|
|
39
40
|
title: string;
|
|
40
41
|
/** The trailing cluster: an assignee avatar, an elapsed-time chip. */
|
|
41
42
|
trailing?: ReactNode;
|
|
43
|
+
/**
|
|
44
|
+
* Extra actions in the card's existing menu, after the lane moves.
|
|
45
|
+
* A separator is added when both sets have entries, so a consumer
|
|
46
|
+
* can add a card action without creating a second trigger.
|
|
47
|
+
*/
|
|
48
|
+
menuItems?: MenuProps["items"];
|
|
42
49
|
};
|
|
43
50
|
/**
|
|
44
51
|
* The leading colour bar, in one of two shapes — and the second one
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoardCard.d.ts","sourceRoot":"","sources":["../../src/Board/BoardCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"BoardCard.d.ts","sourceRoot":"","sources":["../../src/Board/BoardCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAS/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAMjD,KAAK,eAAe,GAAG;IACrB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB;;;;;;;OAOG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;CAC/B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,KAAK,eAAe,GAChB;IAAE,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,YAAY,CAAC,EAAE,UAAU,CAAA;CAAE,GACjD;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,KAAK,CAAA;CAAE,CAAA;AAExD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,KAAK,kBAAkB,GACnB;IACE,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,YAAY,CAAC,EAAE,KAAK,CAAA;CACrB,GACD;IACE,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB;;;;;;;;OAQG;IACH,YAAY,EAAE,SAAS,CAAA;CACxB,CAAA;AAEL,MAAM,MAAM,SAAS,GAAG,eAAe,GACrC,eAAe,GACf,kBAAkB,CAAA;AAEpB,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,SAAS,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,0DAA0D;IAC1D,WAAW,EAAE,SAAS;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACtD,8DAA8D;IAC9D,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE;QAC3B,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,aAAa,EAAE,WAAW,GAAG,OAAO,CAAA;QACpC,SAAS,EAAE,MAAM,CAAA;KAClB,KAAK,IAAI,CAAA;CACX,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,eAAO,MAAM,SAAS,GAAI,wEAOvB,cAAc,KAAG,SAiQnB,CAAA"}
|
package/dist/Board/BoardCard.js
CHANGED
|
@@ -79,6 +79,30 @@ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
|
|
|
79
79
|
*/
|
|
80
80
|
export const BoardCard = ({ item, laneLabel, moveIcon, moveTargets, onMoveToLane, onStartDrag, }) => {
|
|
81
81
|
const [isMenuVisible, setIsMenuVisible] = useState(false);
|
|
82
|
+
const isMovable = onMoveToLane != null && moveTargets.length > 0;
|
|
83
|
+
const hasMenuItems = (item.menuItems?.length ?? 0) > 0;
|
|
84
|
+
const hasMenu = onMoveToLane != null && (isMovable || hasMenuItems);
|
|
85
|
+
const menuItems = [
|
|
86
|
+
...(isMovable
|
|
87
|
+
? moveTargets.map((target) => ({
|
|
88
|
+
key: target.key,
|
|
89
|
+
label: target.label,
|
|
90
|
+
onSelect: () => {
|
|
91
|
+
onMoveToLane?.(target.key);
|
|
92
|
+
},
|
|
93
|
+
}))
|
|
94
|
+
: []),
|
|
95
|
+
...(hasMenuItems && isMovable
|
|
96
|
+
? [
|
|
97
|
+
{
|
|
98
|
+
key: "board-extra-actions",
|
|
99
|
+
type: "separator",
|
|
100
|
+
},
|
|
101
|
+
]
|
|
102
|
+
: []),
|
|
103
|
+
...(item.menuItems ?? []),
|
|
104
|
+
];
|
|
105
|
+
const menuLabel = isMovable ? "Move" : "More";
|
|
82
106
|
const titleBlock = (_jsx("span", { className: "line-clamp-2 cq-sm:line-clamp-none cq-sm:block cq-sm:truncate", children: item.titleContent ?? item.title }));
|
|
83
107
|
return (_jsxs("li", { className: toClassName("group relative flex gap-2 border-border-subtle border-b py-2 pe-1 last:border-b-0",
|
|
84
108
|
// At `cq-lg` the list stops being a list of rows: the
|
|
@@ -100,13 +124,7 @@ export const BoardCard = ({ item, laneLabel, moveIcon, moveTargets, onMoveToLane
|
|
|
100
124
|
item.accentEdge != null &&
|
|
101
125
|
toClassName("ps-2", getAccentEdgeClassName(item.accentEdge)), item.isDimmed && "opacity-60"), "data-board-card": item.key, ...(item.accentEdge == null
|
|
102
126
|
? {}
|
|
103
|
-
: { style: getAccentEdgeStyle(item.accentEdge) }), children: [item.accentEdge != null && item.accentLabel ? (_jsx(VisuallyHidden, { children: item.accentLabel })) : null, item.accentIntent ? (_jsx("span", { className: toClassName("w-1 shrink-0 self-stretch rounded-full", INTENT_SOLID_FILL_CLASS[item.accentIntent]), children: item.accentLabel ? (_jsx(VisuallyHidden, { children: item.accentLabel })) : null })) : null, _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [_jsxs("div", { className: "flex min-w-0 items-start gap-2", children: [_jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1 cq-sm:flex-row cq-sm:items-center cq-sm:gap-2", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-start gap-1.5 text-sm leading-snug", children: [item.marks ? (_jsx("span", { className: "flex shrink-0 items-center gap-1 pt-1", children: item.marks })) : null, item.href ? (_jsx(TextLink, { appearance: "standalone", className: "min-w-0 max-w-full font-normal", href: item.href, intent: "neutral", children: titleBlock })) : item.onSelect ? (_jsx("button", { className: toClassName("min-w-0 max-w-full cursor-pointer rounded-xs text-start text-intent-neutral-content hover:underline", FOCUS_RING_CLASS), onClick: item.onSelect, type: "button", children: titleBlock })) : (titleBlock)] }), item.meta ? (_jsx("div", { className: "flex min-w-0 flex-wrap items-center gap-1 cq-sm:shrink-0 cq-sm:flex-nowrap cq-sm:justify-end", children: item.meta })) : null] }), item.trailing ||
|
|
104
|
-
key: target.key,
|
|
105
|
-
label: target.label,
|
|
106
|
-
onSelect: () => {
|
|
107
|
-
onMoveToLane(target.key);
|
|
108
|
-
},
|
|
109
|
-
})), onDismiss: () => {
|
|
127
|
+
: { style: getAccentEdgeStyle(item.accentEdge) }), children: [item.accentEdge != null && item.accentLabel ? (_jsx(VisuallyHidden, { children: item.accentLabel })) : null, item.accentIntent ? (_jsx("span", { className: toClassName("w-1 shrink-0 self-stretch rounded-full", INTENT_SOLID_FILL_CLASS[item.accentIntent]), children: item.accentLabel ? (_jsx(VisuallyHidden, { children: item.accentLabel })) : null })) : null, _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [_jsxs("div", { className: "flex min-w-0 items-start gap-2", children: [_jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1 cq-sm:flex-row cq-sm:items-center cq-sm:gap-2", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-start gap-1.5 text-sm leading-snug", children: [item.marks ? (_jsx("span", { className: "flex shrink-0 items-center gap-1 pt-1", children: item.marks })) : null, item.href ? (_jsx(TextLink, { appearance: "standalone", className: "min-w-0 max-w-full font-normal", href: item.href, intent: "neutral", children: titleBlock })) : item.onSelect ? (_jsx("button", { className: toClassName("min-w-0 max-w-full cursor-pointer rounded-xs text-start text-intent-neutral-content hover:underline", FOCUS_RING_CLASS), onClick: item.onSelect, type: "button", children: titleBlock })) : (titleBlock)] }), item.meta ? (_jsx("div", { className: "flex min-w-0 flex-wrap items-center gap-1 cq-sm:shrink-0 cq-sm:flex-nowrap cq-sm:justify-end", children: item.meta })) : null] }), item.trailing || hasMenu ? (_jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [item.trailing, hasMenu ? (_jsx(Menu, { isVisible: isMenuVisible, items: menuItems, onDismiss: () => {
|
|
110
128
|
setIsMenuVisible(false);
|
|
111
129
|
}, placement: "bottom-end", trigger: _jsxs(Button, { appearance: "ghost", intent: "neutral", className: toClassName(
|
|
112
130
|
// `touch-none` so a touch drag is a drag
|
|
@@ -131,9 +149,13 @@ export const BoardCard = ({ item, laneLabel, moveIcon, moveTargets, onMoveToLane
|
|
|
131
149
|
moveIcon != null &&
|
|
132
150
|
"@min-[48rem]/board:w-(--control-height-sm) @min-[48rem]/board:px-0"), onClick: () => {
|
|
133
151
|
setIsMenuVisible((isVisible) => !isVisible);
|
|
134
|
-
}, onPointerDown:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
152
|
+
}, onPointerDown: isMovable
|
|
153
|
+
? (pointerEvent) => {
|
|
154
|
+
onStartDrag?.(pointerEvent);
|
|
155
|
+
}
|
|
156
|
+
: undefined, size: "sm", sizing: "control", children: [moveIcon == null ? null : (_jsx("span", { "aria-hidden": "true", className: "hidden @min-[48rem]/board:contents", children: moveIcon })), _jsx("span", { "aria-hidden": "true", className: toClassName(moveIcon != null &&
|
|
157
|
+
"@min-[48rem]/board:hidden"), children: menuLabel }), _jsx(VisuallyHidden, { children: isMovable
|
|
158
|
+
? `Move ${item.title}, currently in ${laneLabel}`
|
|
159
|
+
: `More actions for ${item.title}, currently in ${laneLabel}` })] }) })) : null] })) : null] }), item.footer ? (_jsx("div", { className: "min-w-0 text-content-secondary text-xs", children: item.footer })) : null] })] }));
|
|
138
160
|
};
|
|
139
161
|
//# sourceMappingURL=BoardCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoardCard.js","sourceRoot":"","sources":["../../src/Board/BoardCard.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAsB,CAAA;AAE7C,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"BoardCard.js","sourceRoot":"","sources":["../../src/Board/BoardCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** Matches `@charcuterie/server`'s default build-marker URL. */
|
|
2
|
+
export declare const DEFAULT_DEPLOYMENT_PATH = "/__charcuterie/deployment";
|
|
3
|
+
/** Matches `@charcuterie/server`'s default SSE URL. */
|
|
4
|
+
export declare const DEFAULT_DEPLOYMENT_EVENTS_PATH = "/__charcuterie/deployment/events";
|
|
5
|
+
export type UseDeploymentUpdateOptions = {
|
|
6
|
+
deploymentPath?: string;
|
|
7
|
+
deploymentEventsPath?: string;
|
|
8
|
+
/** `0` disables polling. SSE is normally enough. */
|
|
9
|
+
pollIntervalMs?: number;
|
|
10
|
+
/** Disable when an app calls `checkForUpdate` after its own SSE reconnects. */
|
|
11
|
+
isEventSourceEnabled?: boolean;
|
|
12
|
+
};
|
|
13
|
+
export type DeploymentUpdate = {
|
|
14
|
+
isUpdateAvailable: boolean;
|
|
15
|
+
/** Revalidate the marker now. Safe to call after an app SSE reconnects. */
|
|
16
|
+
checkForUpdate: () => Promise<boolean>;
|
|
17
|
+
/** Reload after the user has saved or finished their current work. */
|
|
18
|
+
reload: () => void;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Detects a replacement static SPA without taking control away from
|
|
22
|
+
* the app. It never reloads by itself: a tab can contain unsaved
|
|
23
|
+
* form state, so the app shows its own accessible update action and
|
|
24
|
+
* calls `reload` only when the user is ready.
|
|
25
|
+
*
|
|
26
|
+
* `createStaticHandler` supplies both endpoints by default. Existing
|
|
27
|
+
* app SSE can keep its one connection: set `isEventSourceEnabled` to
|
|
28
|
+
* `false`, then call `checkForUpdate` in its post-reconnect callback.
|
|
29
|
+
*/
|
|
30
|
+
export declare const useDeploymentUpdate: ({ deploymentEventsPath, deploymentPath, isEventSourceEnabled, pollIntervalMs, }?: UseDeploymentUpdateOptions) => DeploymentUpdate;
|
|
31
|
+
//# sourceMappingURL=useDeploymentUpdate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeploymentUpdate.d.ts","sourceRoot":"","sources":["../../src/DeploymentUpdate/useDeploymentUpdate.ts"],"names":[],"mappings":"AAOA,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,8BACP,CAAA;AAE7B,uDAAuD;AACvD,eAAO,MAAM,8BAA8B,qCACP,CAAA;AAEpC,MAAM,MAAM,0BAA0B,GAAG;IACvC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,+EAA+E;IAC/E,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2EAA2E;IAC3E,cAAc,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,sEAAsE;IACtE,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,CAAA;AAcD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAI,kFAKjC,0BAA+B,KAAG,gBAmFpC,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState, } from "react";
|
|
2
|
+
/** Matches `@charcuterie/server`'s default build-marker URL. */
|
|
3
|
+
export const DEFAULT_DEPLOYMENT_PATH = "/__charcuterie/deployment";
|
|
4
|
+
/** Matches `@charcuterie/server`'s default SSE URL. */
|
|
5
|
+
export const DEFAULT_DEPLOYMENT_EVENTS_PATH = "/__charcuterie/deployment/events";
|
|
6
|
+
const getBuildId = (value) => {
|
|
7
|
+
if (typeof value === "object" &&
|
|
8
|
+
value !== null &&
|
|
9
|
+
"buildId" in value &&
|
|
10
|
+
typeof value.buildId === "string") {
|
|
11
|
+
return value.buildId;
|
|
12
|
+
}
|
|
13
|
+
return undefined;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Detects a replacement static SPA without taking control away from
|
|
17
|
+
* the app. It never reloads by itself: a tab can contain unsaved
|
|
18
|
+
* form state, so the app shows its own accessible update action and
|
|
19
|
+
* calls `reload` only when the user is ready.
|
|
20
|
+
*
|
|
21
|
+
* `createStaticHandler` supplies both endpoints by default. Existing
|
|
22
|
+
* app SSE can keep its one connection: set `isEventSourceEnabled` to
|
|
23
|
+
* `false`, then call `checkForUpdate` in its post-reconnect callback.
|
|
24
|
+
*/
|
|
25
|
+
export const useDeploymentUpdate = ({ deploymentEventsPath = DEFAULT_DEPLOYMENT_EVENTS_PATH, deploymentPath = DEFAULT_DEPLOYMENT_PATH, isEventSourceEnabled = true, pollIntervalMs = 0, } = {}) => {
|
|
26
|
+
const buildIdRef = useRef(undefined);
|
|
27
|
+
const [isUpdateAvailable, setIsUpdateAvailable] = useState(false);
|
|
28
|
+
const acceptBuildId = useCallback((buildId) => {
|
|
29
|
+
if (buildIdRef.current === undefined) {
|
|
30
|
+
buildIdRef.current = buildId;
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
if (buildIdRef.current === buildId) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
setIsUpdateAvailable(true);
|
|
37
|
+
return true;
|
|
38
|
+
}, []);
|
|
39
|
+
const checkForUpdate = useCallback(async () => {
|
|
40
|
+
const response = await globalThis.fetch(deploymentPath, {
|
|
41
|
+
cache: "no-store",
|
|
42
|
+
headers: { Accept: "application/json" },
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
const buildId = getBuildId(await response.json());
|
|
48
|
+
return buildId === undefined
|
|
49
|
+
? false
|
|
50
|
+
: acceptBuildId(buildId);
|
|
51
|
+
}, [acceptBuildId, deploymentPath]);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
void checkForUpdate().catch(() => undefined);
|
|
54
|
+
}, [checkForUpdate]);
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (!isEventSourceEnabled ||
|
|
57
|
+
typeof EventSource === "undefined") {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const source = new EventSource(deploymentEventsPath);
|
|
61
|
+
const onDeployment = (event) => {
|
|
62
|
+
try {
|
|
63
|
+
const buildId = getBuildId(JSON.parse(event.data));
|
|
64
|
+
if (buildId !== undefined) {
|
|
65
|
+
acceptBuildId(buildId);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// A malformed marker is not a reason to interrupt the tab.
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
source.addEventListener("deployment", onDeployment);
|
|
73
|
+
return () => source.close();
|
|
74
|
+
}, [
|
|
75
|
+
acceptBuildId,
|
|
76
|
+
deploymentEventsPath,
|
|
77
|
+
isEventSourceEnabled,
|
|
78
|
+
]);
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
if (pollIntervalMs <= 0) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const interval = globalThis.setInterval(() => {
|
|
84
|
+
void checkForUpdate().catch(() => undefined);
|
|
85
|
+
}, pollIntervalMs);
|
|
86
|
+
return () => globalThis.clearInterval(interval);
|
|
87
|
+
}, [checkForUpdate, pollIntervalMs]);
|
|
88
|
+
return {
|
|
89
|
+
checkForUpdate,
|
|
90
|
+
isUpdateAvailable,
|
|
91
|
+
reload: () => globalThis.location.reload(),
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=useDeploymentUpdate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeploymentUpdate.js","sourceRoot":"","sources":["../../src/DeploymentUpdate/useDeploymentUpdate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -84,6 +84,8 @@ export type { DateInputKeywords, DateInputResult, ParseDateInputOptions, } from
|
|
|
84
84
|
export { DEFAULT_DATE_INPUT_KEYWORDS, parseDateInput, } from "./DatePicker/parseDateInput.ts";
|
|
85
85
|
export type { DateRange, PlainDate, PlainDateFormatOptions, } from "./DatePicker/plainDate.ts";
|
|
86
86
|
export { addDays, addMonths, clampPlainDate, comparePlainDates, formatPlainDate, getDayNumber, getDaysBetween, getDaysInMonth, getFirstDayOfWeek, getIsLeapYear, getIsSameDay, getIsValidPlainDate, getIsWithinRange, getLocalPlainDate, getMonthNames, getPlainDateFromDayNumber, getWeekday, getWeekdayNames, parseIsoDate, toIsoDate, } from "./DatePicker/plainDate.ts";
|
|
87
|
+
export type { DeploymentUpdate, UseDeploymentUpdateOptions, } from "./DeploymentUpdate/useDeploymentUpdate.ts";
|
|
88
|
+
export { DEFAULT_DEPLOYMENT_EVENTS_PATH, DEFAULT_DEPLOYMENT_PATH, useDeploymentUpdate, } from "./DeploymentUpdate/useDeploymentUpdate.ts";
|
|
87
89
|
export type { DialogProps, DialogSize, } from "./Dialog/Dialog.tsx";
|
|
88
90
|
export { Dialog } from "./Dialog/Dialog.tsx";
|
|
89
91
|
export type { DropRailProps, DropRailTarget, } from "./DropRail/DropRail.tsx";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -56,6 +56,7 @@ export { DatePicker } from "./DatePicker/DatePicker.js";
|
|
|
56
56
|
export { DEFAULT_DATE_PRESETS } from "./DatePicker/datePresets.js";
|
|
57
57
|
export { DEFAULT_DATE_INPUT_KEYWORDS, parseDateInput, } from "./DatePicker/parseDateInput.js";
|
|
58
58
|
export { addDays, addMonths, clampPlainDate, comparePlainDates, formatPlainDate, getDayNumber, getDaysBetween, getDaysInMonth, getFirstDayOfWeek, getIsLeapYear, getIsSameDay, getIsValidPlainDate, getIsWithinRange, getLocalPlainDate, getMonthNames, getPlainDateFromDayNumber, getWeekday, getWeekdayNames, parseIsoDate, toIsoDate, } from "./DatePicker/plainDate.js";
|
|
59
|
+
export { DEFAULT_DEPLOYMENT_EVENTS_PATH, DEFAULT_DEPLOYMENT_PATH, useDeploymentUpdate, } from "./DeploymentUpdate/useDeploymentUpdate.js";
|
|
59
60
|
export { Dialog } from "./Dialog/Dialog.js";
|
|
60
61
|
export { DropRail } from "./DropRail/DropRail.js";
|
|
61
62
|
export { EmptyState } from "./EmptyState/EmptyState.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Board/Board.mdx
CHANGED
|
@@ -11,6 +11,8 @@ Lanes of cards, sized by their **container**, moved by keyboard or by pointer
|
|
|
11
11
|
|
|
12
12
|
<Canvas of={BoardStories.Default} />
|
|
13
13
|
|
|
14
|
+
<Canvas of={BoardStories.CardMenuItems} />
|
|
15
|
+
|
|
14
16
|
## Props
|
|
15
17
|
|
|
16
18
|
<Controls />
|
|
@@ -84,6 +86,9 @@ The move is one control with two drivers, and they commit through the same `onMo
|
|
|
84
86
|
code path, with `setPointerCapture` so the drag survives the pointer leaving the card.
|
|
85
87
|
Escape abandons it.
|
|
86
88
|
|
|
89
|
+
An item can append actions to that existing menu with `menuItems`. The Board inserts a
|
|
90
|
+
separator after the lane destinations, so a card action does not need a second trigger.
|
|
91
|
+
|
|
87
92
|
<Canvas of={BoardStories.Interactive} />
|
|
88
93
|
|
|
89
94
|
Every move is announced in a `role="status"` region that names the **destination and the
|
|
@@ -750,6 +750,46 @@ export const Interactive: Story = {
|
|
|
750
750
|
render: () => <MovableBoard />,
|
|
751
751
|
}
|
|
752
752
|
|
|
753
|
+
/**
|
|
754
|
+
* A consumer can add a card action to the same menu as the lane
|
|
755
|
+
* moves. The separator is supplied by `BoardCard`, so the action
|
|
756
|
+
* does not need a second trigger beside the existing one.
|
|
757
|
+
*/
|
|
758
|
+
export const CardMenuItems: Story = {
|
|
759
|
+
render: () => (
|
|
760
|
+
<Frame inlineSize="72rem">
|
|
761
|
+
<Board
|
|
762
|
+
label="Today, with card actions"
|
|
763
|
+
lanes={[
|
|
764
|
+
{
|
|
765
|
+
items: [
|
|
766
|
+
{
|
|
767
|
+
...TODO_ITEMS[0],
|
|
768
|
+
menuItems: [
|
|
769
|
+
{
|
|
770
|
+
key: "send-to-backlog",
|
|
771
|
+
label: "Send to Backlog",
|
|
772
|
+
onSelect: () => undefined,
|
|
773
|
+
},
|
|
774
|
+
],
|
|
775
|
+
},
|
|
776
|
+
],
|
|
777
|
+
key: "todo",
|
|
778
|
+
label: "Todo",
|
|
779
|
+
},
|
|
780
|
+
{
|
|
781
|
+
items: IN_PROGRESS_ITEMS.slice(0, 1),
|
|
782
|
+
key: "in-progress",
|
|
783
|
+
label: "In Progress",
|
|
784
|
+
},
|
|
785
|
+
]}
|
|
786
|
+
moveIcon={<MoreIcon />}
|
|
787
|
+
onMove={() => undefined}
|
|
788
|
+
/>
|
|
789
|
+
</Frame>
|
|
790
|
+
),
|
|
791
|
+
}
|
|
792
|
+
|
|
753
793
|
/**
|
|
754
794
|
* Where it actually goes, and what the consumer still owns.
|
|
755
795
|
*
|
package/src/Board/Board.test.tsx
CHANGED
|
@@ -15,6 +15,7 @@ import * as stories from "./Board.stories.tsx"
|
|
|
15
15
|
const {
|
|
16
16
|
AccentEdge,
|
|
17
17
|
AllStates,
|
|
18
|
+
CardMenuItems,
|
|
18
19
|
Default,
|
|
19
20
|
InBoardScreen,
|
|
20
21
|
Interactive,
|
|
@@ -408,6 +409,46 @@ test("the board adds no link of its own around a rich title", async () => {
|
|
|
408
409
|
)
|
|
409
410
|
})
|
|
410
411
|
|
|
412
|
+
/**
|
|
413
|
+
* Extra card actions share the existing move menu. A second
|
|
414
|
+
* trigger would make the card look busy and would split related
|
|
415
|
+
* actions across two controls, so the component owns the separator
|
|
416
|
+
* between the lane destinations and the consumer's items.
|
|
417
|
+
*/
|
|
418
|
+
test("a card can append an action to its existing menu", async () => {
|
|
419
|
+
const { body, canvas } = await mountStory(CardMenuItems)
|
|
420
|
+
|
|
421
|
+
const todo = expectAgentDrivable(canvas, {
|
|
422
|
+
name: "Todo",
|
|
423
|
+
role: "group",
|
|
424
|
+
})
|
|
425
|
+
|
|
426
|
+
await userEvent.click(
|
|
427
|
+
within(todo).getByRole("button", {
|
|
428
|
+
name: /^Move Retire the second scheduler/,
|
|
429
|
+
}),
|
|
430
|
+
)
|
|
431
|
+
|
|
432
|
+
const menu = await waitFor(() =>
|
|
433
|
+
expectAgentDrivable(body, {
|
|
434
|
+
name: /Move Retire the second scheduler/,
|
|
435
|
+
role: "menu",
|
|
436
|
+
}),
|
|
437
|
+
)
|
|
438
|
+
|
|
439
|
+
expect(
|
|
440
|
+
within(menu).getByRole("menuitem", {
|
|
441
|
+
name: "In Progress",
|
|
442
|
+
}),
|
|
443
|
+
).toBeInTheDocument()
|
|
444
|
+
expect(
|
|
445
|
+
within(menu).getByRole("menuitem", {
|
|
446
|
+
name: "Send to Backlog",
|
|
447
|
+
}),
|
|
448
|
+
).toBeInTheDocument()
|
|
449
|
+
expect(menu.querySelector("hr")).not.toBeNull()
|
|
450
|
+
})
|
|
451
|
+
|
|
411
452
|
/**
|
|
412
453
|
* The edge is drawn on the card's OWN box, which is the whole
|
|
413
454
|
* difference between it and the `accentIntent` pill.
|
package/src/Board/BoardCard.tsx
CHANGED
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
FOCUS_RING_CLASS,
|
|
13
13
|
INTENT_SOLID_FILL_CLASS,
|
|
14
14
|
} from "../intentStyles.ts"
|
|
15
|
+
import type { MenuProps } from "../Menu/Menu.tsx"
|
|
15
16
|
import { Menu } from "../Menu/Menu.tsx"
|
|
16
17
|
import { TextLink } from "../TextLink/TextLink.tsx"
|
|
17
18
|
import { toClassName } from "../toClassName.ts"
|
|
@@ -55,6 +56,12 @@ type BoardItemFields = {
|
|
|
55
56
|
title: string
|
|
56
57
|
/** The trailing cluster: an assignee avatar, an elapsed-time chip. */
|
|
57
58
|
trailing?: ReactNode
|
|
59
|
+
/**
|
|
60
|
+
* Extra actions in the card's existing menu, after the lane moves.
|
|
61
|
+
* A separator is added when both sets have entries, so a consumer
|
|
62
|
+
* can add a card action without creating a second trigger.
|
|
63
|
+
*/
|
|
64
|
+
menuItems?: MenuProps["items"]
|
|
58
65
|
}
|
|
59
66
|
|
|
60
67
|
/**
|
|
@@ -251,6 +258,34 @@ export const BoardCard = ({
|
|
|
251
258
|
}: BoardCardProps): ReactNode => {
|
|
252
259
|
const [isMenuVisible, setIsMenuVisible] = useState(false)
|
|
253
260
|
|
|
261
|
+
const isMovable =
|
|
262
|
+
onMoveToLane != null && moveTargets.length > 0
|
|
263
|
+
const hasMenuItems = (item.menuItems?.length ?? 0) > 0
|
|
264
|
+
const hasMenu =
|
|
265
|
+
onMoveToLane != null && (isMovable || hasMenuItems)
|
|
266
|
+
const menuItems: MenuProps["items"] = [
|
|
267
|
+
...(isMovable
|
|
268
|
+
? moveTargets.map((target) => ({
|
|
269
|
+
key: target.key,
|
|
270
|
+
label: target.label,
|
|
271
|
+
onSelect: () => {
|
|
272
|
+
onMoveToLane?.(target.key)
|
|
273
|
+
},
|
|
274
|
+
}))
|
|
275
|
+
: []),
|
|
276
|
+
...(hasMenuItems && isMovable
|
|
277
|
+
? [
|
|
278
|
+
{
|
|
279
|
+
key: "board-extra-actions",
|
|
280
|
+
type: "separator" as const,
|
|
281
|
+
},
|
|
282
|
+
]
|
|
283
|
+
: []),
|
|
284
|
+
...(item.menuItems ?? []),
|
|
285
|
+
]
|
|
286
|
+
|
|
287
|
+
const menuLabel = isMovable ? "Move" : "More"
|
|
288
|
+
|
|
254
289
|
const titleBlock = (
|
|
255
290
|
// `line-clamp-none` before `truncate`, because `line-clamp-2`
|
|
256
291
|
// sets `display: -webkit-box` and `text-overflow` has nothing to
|
|
@@ -359,20 +394,14 @@ export const BoardCard = ({
|
|
|
359
394
|
) : null}
|
|
360
395
|
</div>
|
|
361
396
|
|
|
362
|
-
{item.trailing ||
|
|
397
|
+
{item.trailing || hasMenu ? (
|
|
363
398
|
<div className="flex shrink-0 items-center gap-1">
|
|
364
399
|
{item.trailing}
|
|
365
400
|
|
|
366
|
-
{
|
|
401
|
+
{hasMenu ? (
|
|
367
402
|
<Menu
|
|
368
403
|
isVisible={isMenuVisible}
|
|
369
|
-
items={
|
|
370
|
-
key: target.key,
|
|
371
|
-
label: target.label,
|
|
372
|
-
onSelect: () => {
|
|
373
|
-
onMoveToLane(target.key)
|
|
374
|
-
},
|
|
375
|
-
}))}
|
|
404
|
+
items={menuItems}
|
|
376
405
|
onDismiss={() => {
|
|
377
406
|
setIsMenuVisible(false)
|
|
378
407
|
}}
|
|
@@ -409,9 +438,13 @@ export const BoardCard = ({
|
|
|
409
438
|
(isVisible) => !isVisible,
|
|
410
439
|
)
|
|
411
440
|
}}
|
|
412
|
-
onPointerDown={
|
|
413
|
-
|
|
414
|
-
|
|
441
|
+
onPointerDown={
|
|
442
|
+
isMovable
|
|
443
|
+
? (pointerEvent) => {
|
|
444
|
+
onStartDrag?.(pointerEvent)
|
|
445
|
+
}
|
|
446
|
+
: undefined
|
|
447
|
+
}
|
|
415
448
|
size="sm"
|
|
416
449
|
sizing="control"
|
|
417
450
|
>
|
|
@@ -441,7 +474,7 @@ export const BoardCard = ({
|
|
|
441
474
|
"@min-[48rem]/board:hidden",
|
|
442
475
|
)}
|
|
443
476
|
>
|
|
444
|
-
|
|
477
|
+
{menuLabel}
|
|
445
478
|
</span>
|
|
446
479
|
|
|
447
480
|
{/*
|
|
@@ -459,7 +492,9 @@ export const BoardCard = ({
|
|
|
459
492
|
* X" narrow is one control with two names.
|
|
460
493
|
*/}
|
|
461
494
|
<VisuallyHidden>
|
|
462
|
-
{
|
|
495
|
+
{isMovable
|
|
496
|
+
? `Move ${item.title}, currently in ${laneLabel}`
|
|
497
|
+
: `More actions for ${item.title}, currently in ${laneLabel}`}
|
|
463
498
|
</VisuallyHidden>
|
|
464
499
|
</Button>
|
|
465
500
|
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useCallback,
|
|
3
|
+
useEffect,
|
|
4
|
+
useRef,
|
|
5
|
+
useState,
|
|
6
|
+
} from "react"
|
|
7
|
+
|
|
8
|
+
/** Matches `@charcuterie/server`'s default build-marker URL. */
|
|
9
|
+
export const DEFAULT_DEPLOYMENT_PATH =
|
|
10
|
+
"/__charcuterie/deployment"
|
|
11
|
+
|
|
12
|
+
/** Matches `@charcuterie/server`'s default SSE URL. */
|
|
13
|
+
export const DEFAULT_DEPLOYMENT_EVENTS_PATH =
|
|
14
|
+
"/__charcuterie/deployment/events"
|
|
15
|
+
|
|
16
|
+
export type UseDeploymentUpdateOptions = {
|
|
17
|
+
deploymentPath?: string
|
|
18
|
+
deploymentEventsPath?: string
|
|
19
|
+
/** `0` disables polling. SSE is normally enough. */
|
|
20
|
+
pollIntervalMs?: number
|
|
21
|
+
/** Disable when an app calls `checkForUpdate` after its own SSE reconnects. */
|
|
22
|
+
isEventSourceEnabled?: boolean
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type DeploymentUpdate = {
|
|
26
|
+
isUpdateAvailable: boolean
|
|
27
|
+
/** Revalidate the marker now. Safe to call after an app SSE reconnects. */
|
|
28
|
+
checkForUpdate: () => Promise<boolean>
|
|
29
|
+
/** Reload after the user has saved or finished their current work. */
|
|
30
|
+
reload: () => void
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const getBuildId = (value: unknown): string | undefined => {
|
|
34
|
+
if (
|
|
35
|
+
typeof value === "object" &&
|
|
36
|
+
value !== null &&
|
|
37
|
+
"buildId" in value &&
|
|
38
|
+
typeof value.buildId === "string"
|
|
39
|
+
) {
|
|
40
|
+
return value.buildId
|
|
41
|
+
}
|
|
42
|
+
return undefined
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Detects a replacement static SPA without taking control away from
|
|
47
|
+
* the app. It never reloads by itself: a tab can contain unsaved
|
|
48
|
+
* form state, so the app shows its own accessible update action and
|
|
49
|
+
* calls `reload` only when the user is ready.
|
|
50
|
+
*
|
|
51
|
+
* `createStaticHandler` supplies both endpoints by default. Existing
|
|
52
|
+
* app SSE can keep its one connection: set `isEventSourceEnabled` to
|
|
53
|
+
* `false`, then call `checkForUpdate` in its post-reconnect callback.
|
|
54
|
+
*/
|
|
55
|
+
export const useDeploymentUpdate = ({
|
|
56
|
+
deploymentEventsPath = DEFAULT_DEPLOYMENT_EVENTS_PATH,
|
|
57
|
+
deploymentPath = DEFAULT_DEPLOYMENT_PATH,
|
|
58
|
+
isEventSourceEnabled = true,
|
|
59
|
+
pollIntervalMs = 0,
|
|
60
|
+
}: UseDeploymentUpdateOptions = {}): DeploymentUpdate => {
|
|
61
|
+
const buildIdRef = useRef<string | undefined>(undefined)
|
|
62
|
+
const [isUpdateAvailable, setIsUpdateAvailable] =
|
|
63
|
+
useState(false)
|
|
64
|
+
|
|
65
|
+
const acceptBuildId = useCallback(
|
|
66
|
+
(buildId: string): boolean => {
|
|
67
|
+
if (buildIdRef.current === undefined) {
|
|
68
|
+
buildIdRef.current = buildId
|
|
69
|
+
return false
|
|
70
|
+
}
|
|
71
|
+
if (buildIdRef.current === buildId) {
|
|
72
|
+
return false
|
|
73
|
+
}
|
|
74
|
+
setIsUpdateAvailable(true)
|
|
75
|
+
return true
|
|
76
|
+
},
|
|
77
|
+
[],
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
const checkForUpdate =
|
|
81
|
+
useCallback(async (): Promise<boolean> => {
|
|
82
|
+
const response = await globalThis.fetch(
|
|
83
|
+
deploymentPath,
|
|
84
|
+
{
|
|
85
|
+
cache: "no-store",
|
|
86
|
+
headers: { Accept: "application/json" },
|
|
87
|
+
},
|
|
88
|
+
)
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
return false
|
|
91
|
+
}
|
|
92
|
+
const buildId = getBuildId(await response.json())
|
|
93
|
+
return buildId === undefined
|
|
94
|
+
? false
|
|
95
|
+
: acceptBuildId(buildId)
|
|
96
|
+
}, [acceptBuildId, deploymentPath])
|
|
97
|
+
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
void checkForUpdate().catch(() => undefined)
|
|
100
|
+
}, [checkForUpdate])
|
|
101
|
+
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
if (
|
|
104
|
+
!isEventSourceEnabled ||
|
|
105
|
+
typeof EventSource === "undefined"
|
|
106
|
+
) {
|
|
107
|
+
return
|
|
108
|
+
}
|
|
109
|
+
const source = new EventSource(deploymentEventsPath)
|
|
110
|
+
const onDeployment = (event: MessageEvent<string>) => {
|
|
111
|
+
try {
|
|
112
|
+
const buildId = getBuildId(JSON.parse(event.data))
|
|
113
|
+
if (buildId !== undefined) {
|
|
114
|
+
acceptBuildId(buildId)
|
|
115
|
+
}
|
|
116
|
+
} catch {
|
|
117
|
+
// A malformed marker is not a reason to interrupt the tab.
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
source.addEventListener("deployment", onDeployment)
|
|
121
|
+
return () => source.close()
|
|
122
|
+
}, [
|
|
123
|
+
acceptBuildId,
|
|
124
|
+
deploymentEventsPath,
|
|
125
|
+
isEventSourceEnabled,
|
|
126
|
+
])
|
|
127
|
+
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
if (pollIntervalMs <= 0) {
|
|
130
|
+
return
|
|
131
|
+
}
|
|
132
|
+
const interval = globalThis.setInterval(() => {
|
|
133
|
+
void checkForUpdate().catch(() => undefined)
|
|
134
|
+
}, pollIntervalMs)
|
|
135
|
+
return () => globalThis.clearInterval(interval)
|
|
136
|
+
}, [checkForUpdate, pollIntervalMs])
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
checkForUpdate,
|
|
140
|
+
isUpdateAvailable,
|
|
141
|
+
reload: () => globalThis.location.reload(),
|
|
142
|
+
}
|
|
143
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -185,6 +185,15 @@ export {
|
|
|
185
185
|
parseIsoDate,
|
|
186
186
|
toIsoDate,
|
|
187
187
|
} from "./DatePicker/plainDate.ts"
|
|
188
|
+
export type {
|
|
189
|
+
DeploymentUpdate,
|
|
190
|
+
UseDeploymentUpdateOptions,
|
|
191
|
+
} from "./DeploymentUpdate/useDeploymentUpdate.ts"
|
|
192
|
+
export {
|
|
193
|
+
DEFAULT_DEPLOYMENT_EVENTS_PATH,
|
|
194
|
+
DEFAULT_DEPLOYMENT_PATH,
|
|
195
|
+
useDeploymentUpdate,
|
|
196
|
+
} from "./DeploymentUpdate/useDeploymentUpdate.ts"
|
|
188
197
|
export type {
|
|
189
198
|
DialogProps,
|
|
190
199
|
DialogSize,
|