@pattern-stack/frontend-patterns 0.2.0-alpha.16 → 0.2.0-alpha.19
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/CHANGELOG.md +5 -0
- package/dist/atoms/components/data/Duration/Duration.d.ts +11 -0
- package/dist/atoms/components/data/Duration/Duration.d.ts.map +1 -0
- package/dist/atoms/components/data/Duration/index.d.ts +2 -0
- package/dist/atoms/components/data/Duration/index.d.ts.map +1 -0
- package/dist/atoms/components/data/LiveIndicator/LiveIndicator.d.ts +12 -0
- package/dist/atoms/components/data/LiveIndicator/LiveIndicator.d.ts.map +1 -0
- package/dist/atoms/components/data/LiveIndicator/index.d.ts +2 -0
- package/dist/atoms/components/data/LiveIndicator/index.d.ts.map +1 -0
- package/dist/atoms/components/data/Sparkline/Sparkline.d.ts +16 -0
- package/dist/atoms/components/data/Sparkline/Sparkline.d.ts.map +1 -0
- package/dist/atoms/components/data/Sparkline/index.d.ts +2 -0
- package/dist/atoms/components/data/Sparkline/index.d.ts.map +1 -0
- package/dist/atoms/components/data/Timestamp/Timestamp.d.ts +13 -0
- package/dist/atoms/components/data/Timestamp/Timestamp.d.ts.map +1 -0
- package/dist/atoms/components/data/Timestamp/index.d.ts +2 -0
- package/dist/atoms/components/data/Timestamp/index.d.ts.map +1 -0
- package/dist/atoms/components/data/index.d.ts +4 -0
- package/dist/atoms/components/data/index.d.ts.map +1 -1
- package/dist/frontend-patterns.css +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +299 -42
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +299 -42
- package/dist/index.js.map +1 -1
- package/dist/swebrain/SweBrainShowcase.d.ts +8 -0
- package/dist/swebrain/SweBrainShowcase.d.ts.map +1 -0
- package/dist/swebrain/atoms/Card.d.ts +15 -0
- package/dist/swebrain/atoms/Card.d.ts.map +1 -0
- package/dist/swebrain/atoms/Chip.d.ts +17 -0
- package/dist/swebrain/atoms/Chip.d.ts.map +1 -0
- package/dist/swebrain/atoms/Duration.d.ts +7 -0
- package/dist/swebrain/atoms/Duration.d.ts.map +1 -0
- package/dist/swebrain/atoms/EmptyCell.d.ts +5 -0
- package/dist/swebrain/atoms/EmptyCell.d.ts.map +1 -0
- package/dist/swebrain/atoms/Hand.d.ts +8 -0
- package/dist/swebrain/atoms/Hand.d.ts.map +1 -0
- package/dist/swebrain/atoms/ID.d.ts +9 -0
- package/dist/swebrain/atoms/ID.d.ts.map +1 -0
- package/dist/swebrain/atoms/IdTag.d.ts +9 -0
- package/dist/swebrain/atoms/IdTag.d.ts.map +1 -0
- package/dist/swebrain/atoms/KV.d.ts +7 -0
- package/dist/swebrain/atoms/KV.d.ts.map +1 -0
- package/dist/swebrain/atoms/LiveIndicator.d.ts +7 -0
- package/dist/swebrain/atoms/LiveIndicator.d.ts.map +1 -0
- package/dist/swebrain/atoms/PoolChip.d.ts +14 -0
- package/dist/swebrain/atoms/PoolChip.d.ts.map +1 -0
- package/dist/swebrain/atoms/Row.d.ts +10 -0
- package/dist/swebrain/atoms/Row.d.ts.map +1 -0
- package/dist/swebrain/atoms/Sparkline.d.ts +11 -0
- package/dist/swebrain/atoms/Sparkline.d.ts.map +1 -0
- package/dist/swebrain/atoms/StatusBadge.d.ts +11 -0
- package/dist/swebrain/atoms/StatusBadge.d.ts.map +1 -0
- package/dist/swebrain/atoms/StatusDot.d.ts +11 -0
- package/dist/swebrain/atoms/StatusDot.d.ts.map +1 -0
- package/dist/swebrain/atoms/Timestamp.d.ts +8 -0
- package/dist/swebrain/atoms/Timestamp.d.ts.map +1 -0
- package/dist/swebrain/atoms/index.d.ts +34 -0
- package/dist/swebrain/atoms/index.d.ts.map +1 -0
- package/dist/swebrain/atoms/pool-tokens.d.ts +14 -0
- package/dist/swebrain/atoms/pool-tokens.d.ts.map +1 -0
- package/dist/swebrain/atoms/tokens.d.ts +96 -0
- package/dist/swebrain/atoms/tokens.d.ts.map +1 -0
- package/dist/swebrain/index.d.ts +4 -0
- package/dist/swebrain/index.d.ts.map +1 -0
- package/dist/swebrain/lib/favs.d.ts +5 -0
- package/dist/swebrain/lib/favs.d.ts.map +1 -0
- package/dist/swebrain/lib/vendors.d.ts +14 -0
- package/dist/swebrain/lib/vendors.d.ts.map +1 -0
- package/dist/swebrain/molecules/PoolLegend.d.ts +8 -0
- package/dist/swebrain/molecules/PoolLegend.d.ts.map +1 -0
- package/dist/swebrain/molecules/SearchInput.d.ts +17 -0
- package/dist/swebrain/molecules/SearchInput.d.ts.map +1 -0
- package/dist/swebrain/molecules/StatCard.d.ts +11 -0
- package/dist/swebrain/molecules/StatCard.d.ts.map +1 -0
- package/dist/swebrain/molecules/TimeRangePicker.d.ts +18 -0
- package/dist/swebrain/molecules/TimeRangePicker.d.ts.map +1 -0
- package/dist/swebrain/molecules/index.d.ts +9 -0
- package/dist/swebrain/molecules/index.d.ts.map +1 -0
- package/dist/sync/createEntityHooks.d.ts.map +1 -1
- package/dist/sync/index.d.ts +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/types.d.ts +110 -23
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/templates/factory.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -7793,6 +7793,201 @@ const TruncatedText = ({
|
|
|
7793
7793
|
}
|
|
7794
7794
|
);
|
|
7795
7795
|
};
|
|
7796
|
+
function formatAuto(ms) {
|
|
7797
|
+
if (ms < 1e3) {
|
|
7798
|
+
return { visible: `${ms}ms`, spoken: `${ms} milliseconds` };
|
|
7799
|
+
}
|
|
7800
|
+
if (ms < 6e4) {
|
|
7801
|
+
const secs = ms / 1e3;
|
|
7802
|
+
return {
|
|
7803
|
+
visible: `${secs.toFixed(1)}s`,
|
|
7804
|
+
spoken: `${secs.toFixed(1)} seconds`
|
|
7805
|
+
};
|
|
7806
|
+
}
|
|
7807
|
+
if (ms < 36e5) {
|
|
7808
|
+
const m = Math.floor(ms / 6e4);
|
|
7809
|
+
const s = Math.round(ms % 6e4 / 1e3);
|
|
7810
|
+
return { visible: `${m}m ${s}s`, spoken: `${m} minutes ${s} seconds` };
|
|
7811
|
+
}
|
|
7812
|
+
if (ms < 864e5) {
|
|
7813
|
+
const h2 = Math.floor(ms / 36e5);
|
|
7814
|
+
const m = Math.round(ms % 36e5 / 6e4);
|
|
7815
|
+
return { visible: `${h2}h ${m}m`, spoken: `${h2} hours ${m} minutes` };
|
|
7816
|
+
}
|
|
7817
|
+
const d = Math.floor(ms / 864e5);
|
|
7818
|
+
const h = Math.round(ms % 864e5 / 36e5);
|
|
7819
|
+
return { visible: `${d}d ${h}h`, spoken: `${d} days ${h} hours` };
|
|
7820
|
+
}
|
|
7821
|
+
function formatS(ms) {
|
|
7822
|
+
const secs = ms / 1e3;
|
|
7823
|
+
return {
|
|
7824
|
+
visible: `${secs.toFixed(1)}s`,
|
|
7825
|
+
spoken: `${secs.toFixed(1)} seconds`
|
|
7826
|
+
};
|
|
7827
|
+
}
|
|
7828
|
+
function formatMs(ms) {
|
|
7829
|
+
return { visible: `${ms}ms`, spoken: `${ms} milliseconds` };
|
|
7830
|
+
}
|
|
7831
|
+
function Duration({ ms, precision = "auto", className }) {
|
|
7832
|
+
const { visible, spoken } = precision === "s" ? formatS(ms) : precision === "ms" ? formatMs(ms) : formatAuto(ms);
|
|
7833
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7834
|
+
"span",
|
|
7835
|
+
{
|
|
7836
|
+
"aria-label": spoken,
|
|
7837
|
+
className: cn("font-mono text-xs text-muted-foreground", className),
|
|
7838
|
+
children: visible
|
|
7839
|
+
}
|
|
7840
|
+
);
|
|
7841
|
+
}
|
|
7842
|
+
function toDate(v) {
|
|
7843
|
+
return v instanceof Date ? v : new Date(v);
|
|
7844
|
+
}
|
|
7845
|
+
function formatRelative(date, now) {
|
|
7846
|
+
const diffMs = now.getTime() - date.getTime();
|
|
7847
|
+
const abs = Math.abs(diffMs);
|
|
7848
|
+
const suffix = diffMs >= 0 ? "ago" : "from now";
|
|
7849
|
+
if (abs < 6e4) return "just now";
|
|
7850
|
+
if (abs < 36e5) {
|
|
7851
|
+
const m = Math.floor(abs / 6e4);
|
|
7852
|
+
return `${m}m ${suffix}`;
|
|
7853
|
+
}
|
|
7854
|
+
if (abs < 864e5) {
|
|
7855
|
+
const h = Math.floor(abs / 36e5);
|
|
7856
|
+
return `${h}h ${suffix}`;
|
|
7857
|
+
}
|
|
7858
|
+
if (abs < 6048e5) {
|
|
7859
|
+
const d = Math.floor(abs / 864e5);
|
|
7860
|
+
return d === 1 ? "yesterday" : `${d}d ${suffix}`;
|
|
7861
|
+
}
|
|
7862
|
+
return date.toLocaleDateString(void 0);
|
|
7863
|
+
}
|
|
7864
|
+
function formatAbsolute(date, tz) {
|
|
7865
|
+
return date.toLocaleString(void 0, {
|
|
7866
|
+
dateStyle: "short",
|
|
7867
|
+
timeStyle: "short",
|
|
7868
|
+
timeZone: tz
|
|
7869
|
+
});
|
|
7870
|
+
}
|
|
7871
|
+
function Timestamp({
|
|
7872
|
+
value,
|
|
7873
|
+
format = "relative",
|
|
7874
|
+
tz,
|
|
7875
|
+
className
|
|
7876
|
+
}) {
|
|
7877
|
+
const date = toDate(value);
|
|
7878
|
+
const iso = date.toISOString();
|
|
7879
|
+
const [now, setNow] = React.useState(() => /* @__PURE__ */ new Date());
|
|
7880
|
+
React.useEffect(() => {
|
|
7881
|
+
if (format === "absolute") return;
|
|
7882
|
+
const id = setInterval(() => setNow(/* @__PURE__ */ new Date()), 3e4);
|
|
7883
|
+
return () => clearInterval(id);
|
|
7884
|
+
}, [format]);
|
|
7885
|
+
const absolute = formatAbsolute(date, tz);
|
|
7886
|
+
const relative = formatRelative(date, now);
|
|
7887
|
+
const display = format === "relative" ? relative : absolute;
|
|
7888
|
+
const title = format === "both" ? relative : void 0;
|
|
7889
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7890
|
+
"time",
|
|
7891
|
+
{
|
|
7892
|
+
dateTime: iso,
|
|
7893
|
+
title,
|
|
7894
|
+
className: cn("font-mono text-xs text-muted-foreground", className),
|
|
7895
|
+
children: display
|
|
7896
|
+
}
|
|
7897
|
+
);
|
|
7898
|
+
}
|
|
7899
|
+
function Sparkline({
|
|
7900
|
+
data,
|
|
7901
|
+
width = 140,
|
|
7902
|
+
height = 28,
|
|
7903
|
+
color = "hsl(var(--muted-foreground))",
|
|
7904
|
+
fill,
|
|
7905
|
+
strokeWidth = 1.2,
|
|
7906
|
+
markLast = false
|
|
7907
|
+
}) {
|
|
7908
|
+
if (data.length < 2) {
|
|
7909
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { width, height, "aria-hidden": true });
|
|
7910
|
+
}
|
|
7911
|
+
const min = Math.min(...data);
|
|
7912
|
+
const max = Math.max(...data);
|
|
7913
|
+
const range = max - min || 1;
|
|
7914
|
+
const pad = strokeWidth;
|
|
7915
|
+
const innerW = width - pad * 2;
|
|
7916
|
+
const innerH = height - pad * 2;
|
|
7917
|
+
const points = data.map((v, i) => {
|
|
7918
|
+
const x = pad + i / (data.length - 1) * innerW;
|
|
7919
|
+
const y = pad + innerH - (v - min) / range * innerH;
|
|
7920
|
+
return [x, y];
|
|
7921
|
+
});
|
|
7922
|
+
const polyline = points.map(([x, y]) => `${x.toFixed(2)},${y.toFixed(2)}`).join(" ");
|
|
7923
|
+
const firstPt = points[0];
|
|
7924
|
+
const lastPt = points[points.length - 1];
|
|
7925
|
+
let fillPath;
|
|
7926
|
+
if (fill) {
|
|
7927
|
+
fillPath = [
|
|
7928
|
+
`${firstPt[0].toFixed(2)},${(pad + innerH).toFixed(2)}`,
|
|
7929
|
+
...points.map(([x, y]) => `${x.toFixed(2)},${y.toFixed(2)}`),
|
|
7930
|
+
`${lastPt[0].toFixed(2)},${(pad + innerH).toFixed(2)}`
|
|
7931
|
+
].join(" ");
|
|
7932
|
+
}
|
|
7933
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7934
|
+
"svg",
|
|
7935
|
+
{
|
|
7936
|
+
width,
|
|
7937
|
+
height,
|
|
7938
|
+
viewBox: `0 0 ${width} ${height}`,
|
|
7939
|
+
"aria-hidden": true,
|
|
7940
|
+
style: { display: "block", overflow: "visible" },
|
|
7941
|
+
children: [
|
|
7942
|
+
fillPath && /* @__PURE__ */ jsxRuntime.jsx("polygon", { points: fillPath, fill, stroke: "none" }),
|
|
7943
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7944
|
+
"polyline",
|
|
7945
|
+
{
|
|
7946
|
+
points: polyline,
|
|
7947
|
+
fill: "none",
|
|
7948
|
+
stroke: color,
|
|
7949
|
+
strokeWidth,
|
|
7950
|
+
strokeLinejoin: "round",
|
|
7951
|
+
strokeLinecap: "round"
|
|
7952
|
+
}
|
|
7953
|
+
),
|
|
7954
|
+
markLast && /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lastPt[0], cy: lastPt[1], r: strokeWidth * 2, fill: color })
|
|
7955
|
+
]
|
|
7956
|
+
}
|
|
7957
|
+
);
|
|
7958
|
+
}
|
|
7959
|
+
function LiveIndicator({
|
|
7960
|
+
active,
|
|
7961
|
+
label = "Live",
|
|
7962
|
+
className
|
|
7963
|
+
}) {
|
|
7964
|
+
const ariaLabel = active ? `${label} — connected` : `${label} — paused`;
|
|
7965
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7966
|
+
"span",
|
|
7967
|
+
{
|
|
7968
|
+
role: "status",
|
|
7969
|
+
"aria-live": "polite",
|
|
7970
|
+
"aria-label": ariaLabel,
|
|
7971
|
+
className: cn(
|
|
7972
|
+
"inline-flex items-center gap-2 text-xs font-mono",
|
|
7973
|
+
active ? "text-primary" : "text-muted-foreground",
|
|
7974
|
+
className
|
|
7975
|
+
),
|
|
7976
|
+
children: [
|
|
7977
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7978
|
+
"span",
|
|
7979
|
+
{
|
|
7980
|
+
className: cn(
|
|
7981
|
+
"inline-block w-2 h-2 rounded-full",
|
|
7982
|
+
active ? "bg-primary animate-pulse" : "bg-muted-foreground/40"
|
|
7983
|
+
)
|
|
7984
|
+
}
|
|
7985
|
+
),
|
|
7986
|
+
label
|
|
7987
|
+
]
|
|
7988
|
+
}
|
|
7989
|
+
);
|
|
7990
|
+
}
|
|
7796
7991
|
const defaultActivityIconMap = {
|
|
7797
7992
|
user: {
|
|
7798
7993
|
icon: lucideReact.Users,
|
|
@@ -10644,7 +10839,7 @@ const SidebarButton = ({
|
|
|
10644
10839
|
"span",
|
|
10645
10840
|
{
|
|
10646
10841
|
className: cn(
|
|
10647
|
-
"text-sm font-medium flex-1 text-left",
|
|
10842
|
+
"text-sm font-medium flex-1 text-left whitespace-nowrap",
|
|
10648
10843
|
active ? `text-category-${category}` : "text-foreground"
|
|
10649
10844
|
),
|
|
10650
10845
|
children: label
|
|
@@ -15740,14 +15935,12 @@ function createReactApp(config) {
|
|
|
15740
15935
|
if (enableRouting) {
|
|
15741
15936
|
tree = /* @__PURE__ */ jsxRuntime.jsx(NavigationProvider, { initialNavigation: navigation, children: /* @__PURE__ */ jsxRuntime.jsx(SidebarProvider, { children: tree }) });
|
|
15742
15937
|
}
|
|
15743
|
-
|
|
15744
|
-
|
|
15745
|
-
|
|
15746
|
-
|
|
15747
|
-
|
|
15748
|
-
|
|
15749
|
-
tree = /* @__PURE__ */ jsxRuntime.jsx(AuthProvider, { config: auth, children: tree });
|
|
15750
|
-
}
|
|
15938
|
+
const authMode = (auth == null ? void 0 : auth.mode) || "pattern-stack";
|
|
15939
|
+
if (enableAuth && authMode !== "none") {
|
|
15940
|
+
tree = /* @__PURE__ */ jsxRuntime.jsx(AuthProvider, { config: auth, children: tree });
|
|
15941
|
+
} else {
|
|
15942
|
+
setGlobalAuthService(null);
|
|
15943
|
+
tree = /* @__PURE__ */ jsxRuntime.jsx(NoAuthProvider, { children: tree });
|
|
15751
15944
|
}
|
|
15752
15945
|
if (enableQuery) {
|
|
15753
15946
|
tree = /* @__PURE__ */ jsxRuntime.jsxs(reactQuery.QueryClientProvider, { client: queryClient, children: [
|
|
@@ -18897,20 +19090,50 @@ function createEntityHooks(config) {
|
|
|
18897
19090
|
/** Key for a specific entity detail query */
|
|
18898
19091
|
detail: (id) => [...keys.details(), id]
|
|
18899
19092
|
};
|
|
18900
|
-
|
|
19093
|
+
const DEFAULT_PAGE_SIZE = 50;
|
|
19094
|
+
function toPage(raw, requestedPage, requestedPageSize) {
|
|
19095
|
+
if (Array.isArray(raw)) {
|
|
19096
|
+
const items2 = raw;
|
|
19097
|
+
return {
|
|
19098
|
+
items: items2,
|
|
19099
|
+
page: requestedPage,
|
|
19100
|
+
pageCount: 1,
|
|
19101
|
+
total: items2.length,
|
|
19102
|
+
pageSize: requestedPageSize || items2.length || DEFAULT_PAGE_SIZE,
|
|
19103
|
+
nextCursor: null
|
|
19104
|
+
};
|
|
19105
|
+
}
|
|
19106
|
+
const env2 = raw ?? {};
|
|
19107
|
+
const items = Array.isArray(env2.items) ? env2.items : [];
|
|
19108
|
+
const pageSize = typeof env2.pageSize === "number" && env2.pageSize > 0 ? env2.pageSize : requestedPageSize || DEFAULT_PAGE_SIZE;
|
|
19109
|
+
const total = typeof env2.total === "number" ? env2.total : items.length;
|
|
19110
|
+
const pageCount = typeof env2.pageCount === "number" ? env2.pageCount : Math.max(1, Math.ceil(total / Math.max(1, pageSize)));
|
|
19111
|
+
return {
|
|
19112
|
+
items,
|
|
19113
|
+
page: typeof env2.page === "number" ? env2.page : requestedPage,
|
|
19114
|
+
pageCount,
|
|
19115
|
+
total,
|
|
19116
|
+
pageSize,
|
|
19117
|
+
nextCursor: env2.nextCursor ?? null
|
|
19118
|
+
};
|
|
19119
|
+
}
|
|
19120
|
+
function useListSync(params, requestedPage, requestedPageSize) {
|
|
18901
19121
|
const query = reactQuery.useQuery({
|
|
18902
|
-
queryKey: keys.list(
|
|
18903
|
-
queryFn: () => api.list(
|
|
19122
|
+
queryKey: keys.list(params),
|
|
19123
|
+
queryFn: () => api.list(params),
|
|
18904
19124
|
staleTime
|
|
18905
19125
|
});
|
|
19126
|
+
const pageEnvelope = React.useMemo(
|
|
19127
|
+
() => query.data === void 0 ? void 0 : toPage(query.data, requestedPage, requestedPageSize),
|
|
19128
|
+
[query.data, requestedPage, requestedPageSize]
|
|
19129
|
+
);
|
|
18906
19130
|
React.useEffect(() => {
|
|
18907
19131
|
var _a, _b;
|
|
18908
|
-
if (
|
|
18909
|
-
|
|
18910
|
-
(_b = (_a = collection.utils) == null ? void 0 : _a.writeUpsert) == null ? void 0 : _b.call(_a, items);
|
|
19132
|
+
if (pageEnvelope) {
|
|
19133
|
+
(_b = (_a = collection.utils) == null ? void 0 : _a.writeUpsert) == null ? void 0 : _b.call(_a, pageEnvelope.items);
|
|
18911
19134
|
}
|
|
18912
|
-
}, [
|
|
18913
|
-
return query;
|
|
19135
|
+
}, [pageEnvelope]);
|
|
19136
|
+
return { query, pageEnvelope };
|
|
18914
19137
|
}
|
|
18915
19138
|
function useGetSync(id) {
|
|
18916
19139
|
const query = reactQuery.useQuery({
|
|
@@ -18928,41 +19151,71 @@ function createEntityHooks(config) {
|
|
|
18928
19151
|
return query;
|
|
18929
19152
|
}
|
|
18930
19153
|
function useList(options = {}) {
|
|
18931
|
-
const { where, orderBy, enabled = true } = options;
|
|
18932
|
-
const
|
|
19154
|
+
const { where, orderBy, enabled = true, pageSize, cursor } = options;
|
|
19155
|
+
const [page, setPageState] = React.useState(() => Math.max(1, options.page ?? 1));
|
|
19156
|
+
const params = React.useMemo(() => {
|
|
19157
|
+
if (!enabled) return void 0;
|
|
19158
|
+
const p = { page };
|
|
19159
|
+
if (pageSize !== void 0) p.pageSize = pageSize;
|
|
19160
|
+
if (cursor !== void 0) p.cursor = cursor;
|
|
19161
|
+
if (orderBy) {
|
|
19162
|
+
p.sort_by = orderBy.field;
|
|
19163
|
+
p.sort_order = orderBy.direction;
|
|
19164
|
+
}
|
|
19165
|
+
if (where) Object.assign(p, where);
|
|
19166
|
+
return p;
|
|
19167
|
+
}, [enabled, page, pageSize, cursor, orderBy, where]);
|
|
19168
|
+
const { query: sync, pageEnvelope } = useListSync(params, page, pageSize ?? DEFAULT_PAGE_SIZE);
|
|
19169
|
+
const pageIds = React.useMemo(() => {
|
|
19170
|
+
if (!pageEnvelope) return [];
|
|
19171
|
+
return pageEnvelope.items.map((item) => item.id).filter((id) => typeof id === "string");
|
|
19172
|
+
}, [pageEnvelope]);
|
|
18933
19173
|
const liveResult = reactDb.useLiveQuery(collection);
|
|
18934
19174
|
const data = React.useMemo(() => {
|
|
18935
|
-
|
|
18936
|
-
|
|
18937
|
-
|
|
18938
|
-
|
|
18939
|
-
|
|
18940
|
-
|
|
18941
|
-
if (Array.isArray(value)) {
|
|
18942
|
-
return value.includes(itemValue);
|
|
18943
|
-
}
|
|
18944
|
-
return itemValue === value;
|
|
18945
|
-
});
|
|
18946
|
-
});
|
|
19175
|
+
var _a, _b;
|
|
19176
|
+
const live = liveResult.data ?? [];
|
|
19177
|
+
const byId = /* @__PURE__ */ new Map();
|
|
19178
|
+
for (const row of live) {
|
|
19179
|
+
const id = row.id;
|
|
19180
|
+
if (typeof id === "string") byId.set(id, row);
|
|
18947
19181
|
}
|
|
18948
|
-
|
|
18949
|
-
|
|
18950
|
-
|
|
18951
|
-
|
|
18952
|
-
|
|
18953
|
-
if (aVal > bVal) return orderBy.direction === "asc" ? 1 : -1;
|
|
18954
|
-
return 0;
|
|
18955
|
-
});
|
|
19182
|
+
const rows = [];
|
|
19183
|
+
for (const id of pageIds) {
|
|
19184
|
+
const row = byId.get(id) ?? // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19185
|
+
((_b = (_a = collection.state) == null ? void 0 : _a.get) == null ? void 0 : _b.call(_a, id));
|
|
19186
|
+
if (row !== void 0) rows.push(row);
|
|
18956
19187
|
}
|
|
18957
|
-
return
|
|
18958
|
-
}, [liveResult.data,
|
|
19188
|
+
return rows;
|
|
19189
|
+
}, [liveResult.data, pageIds]);
|
|
19190
|
+
const pageCount = (pageEnvelope == null ? void 0 : pageEnvelope.pageCount) ?? 1;
|
|
19191
|
+
const total = (pageEnvelope == null ? void 0 : pageEnvelope.total) ?? data.length;
|
|
19192
|
+
const resolvedPageSize = (pageEnvelope == null ? void 0 : pageEnvelope.pageSize) ?? pageSize ?? DEFAULT_PAGE_SIZE;
|
|
19193
|
+
const currentPage = (pageEnvelope == null ? void 0 : pageEnvelope.page) ?? page;
|
|
19194
|
+
const setPage = React.useCallback(
|
|
19195
|
+
(next2) => {
|
|
19196
|
+
const clamped = Math.max(1, pageCount > 0 ? Math.min(next2, pageCount) : next2);
|
|
19197
|
+
setPageState(clamped);
|
|
19198
|
+
},
|
|
19199
|
+
[pageCount]
|
|
19200
|
+
);
|
|
19201
|
+
const next = React.useCallback(() => setPage(page + 1), [setPage, page]);
|
|
19202
|
+
const prev = React.useCallback(() => setPage(page - 1), [setPage, page]);
|
|
18959
19203
|
return {
|
|
18960
19204
|
data,
|
|
18961
19205
|
isLoading: sync.isLoading || liveResult.isLoading,
|
|
18962
19206
|
isError: sync.isError,
|
|
18963
19207
|
error: sync.error,
|
|
18964
19208
|
refetch: sync.refetch,
|
|
18965
|
-
collection
|
|
19209
|
+
collection,
|
|
19210
|
+
page: currentPage,
|
|
19211
|
+
pageCount,
|
|
19212
|
+
total,
|
|
19213
|
+
pageSize: resolvedPageSize,
|
|
19214
|
+
setPage,
|
|
19215
|
+
next,
|
|
19216
|
+
prev,
|
|
19217
|
+
hasNext: currentPage < pageCount,
|
|
19218
|
+
hasPrev: currentPage > 1
|
|
18966
19219
|
};
|
|
18967
19220
|
}
|
|
18968
19221
|
function useGet(id, options = {}) {
|
|
@@ -19213,6 +19466,7 @@ exports.DropdownMenuSub = DropdownMenuSub;
|
|
|
19213
19466
|
exports.DropdownMenuSubContent = DropdownMenuSubContent;
|
|
19214
19467
|
exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
|
|
19215
19468
|
exports.DropdownMenuTrigger = DropdownMenuTrigger;
|
|
19469
|
+
exports.Duration = Duration;
|
|
19216
19470
|
exports.EmptyState = EmptyState;
|
|
19217
19471
|
exports.EnhancedDataTemplate = EnhancedDataTemplate;
|
|
19218
19472
|
exports.EntityIcon = EntityIcon;
|
|
@@ -19232,6 +19486,7 @@ exports.Label = Label;
|
|
|
19232
19486
|
exports.ListCard = ListCard;
|
|
19233
19487
|
exports.ListPageTemplate = ListPageTemplate;
|
|
19234
19488
|
exports.ListToolbar = ListToolbar;
|
|
19489
|
+
exports.LiveIndicator = LiveIndicator;
|
|
19235
19490
|
exports.Loading = Loading;
|
|
19236
19491
|
exports.LoginForm = LoginForm;
|
|
19237
19492
|
exports.LogoutButton = LogoutButton;
|
|
@@ -19276,6 +19531,7 @@ exports.SkeletonAvatar = SkeletonAvatar;
|
|
|
19276
19531
|
exports.SkeletonButton = SkeletonButton;
|
|
19277
19532
|
exports.SkeletonCard = SkeletonCard;
|
|
19278
19533
|
exports.SkeletonText = SkeletonText;
|
|
19534
|
+
exports.Sparkline = Sparkline;
|
|
19279
19535
|
exports.Spinner = Spinner;
|
|
19280
19536
|
exports.StatCard = StatCard;
|
|
19281
19537
|
exports.StyleGuide = StyleGuide;
|
|
@@ -19293,6 +19549,7 @@ exports.Tabs = Tabs;
|
|
|
19293
19549
|
exports.TabsContent = TabsContent;
|
|
19294
19550
|
exports.TabsList = TabsList;
|
|
19295
19551
|
exports.TabsTrigger = TabsTrigger;
|
|
19552
|
+
exports.Timestamp = Timestamp;
|
|
19296
19553
|
exports.Toast = Toast;
|
|
19297
19554
|
exports.ToastContainer = ToastContainer;
|
|
19298
19555
|
exports.Tooltip = Tooltip;
|