@voyantjs/availability-ui 0.22.0 → 0.24.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.
|
@@ -20,10 +20,11 @@ export interface AvailabilityOverviewMessages extends AvailabilityColumnsMessage
|
|
|
20
20
|
coverageGapDescription: string;
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
-
export declare function AvailabilityOverview({ messages, products, constrainedSlots, filteredRules, filteredPickupPoints, productsWithoutActiveRules, search, setSearch, productFilter, setProductFilter, hasFilters, onClearFilters, onOpenSlot, onOpenProduct, }: {
|
|
23
|
+
export declare function AvailabilityOverview({ messages, products, constrainedSlots, openSlotsCount: providedOpenSlotsCount, filteredRules, filteredPickupPoints, productsWithoutActiveRules, search, setSearch, productFilter, setProductFilter, hasFilters, onClearFilters, onOpenSlot, onOpenProduct, }: {
|
|
24
24
|
messages: AvailabilityOverviewMessages;
|
|
25
25
|
products: ProductOption[];
|
|
26
26
|
constrainedSlots: AvailabilitySlotRow[];
|
|
27
|
+
openSlotsCount?: number;
|
|
27
28
|
filteredRules: AvailabilityRuleRow[];
|
|
28
29
|
filteredPickupPoints: AvailabilityPickupPointRow[];
|
|
29
30
|
productsWithoutActiveRules: ProductOption[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"availability-overview.d.ts","sourceRoot":"","sources":["../../src/components/availability-overview.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACd,MAAM,8BAA8B,CAAA;AAiBrC,OAAO,EAAE,KAAK,2BAA2B,EAAsB,MAAM,2BAA2B,CAAA;AAEhG,MAAM,WAAW,4BAA6B,SAAQ,2BAA2B;IAC/E,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM,CAAA;QACtB,oBAAoB,EAAE,MAAM,CAAA;QAC5B,qBAAqB,EAAE,MAAM,CAAA;QAC7B,2BAA2B,EAAE,MAAM,CAAA;QACnC,gBAAgB,EAAE,MAAM,CAAA;QACxB,sBAAsB,EAAE,MAAM,CAAA;QAC9B,iBAAiB,EAAE,MAAM,CAAA;QACzB,uBAAuB,EAAE,MAAM,CAAA;QAC/B,sBAAsB,EAAE,MAAM,CAAA;QAC9B,sBAAsB,EAAE,MAAM,CAAA;QAC9B,iBAAiB,EAAE,MAAM,CAAA;QACzB,iBAAiB,EAAE,MAAM,CAAA;QACzB,sBAAsB,EAAE,MAAM,CAAA;KAC/B,CAAA;CACF;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,0BAA0B,EAC1B,MAAM,EACN,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,UAAU,EACV,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,4BAA4B,CAAA;IACtC,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,gBAAgB,EAAE,mBAAmB,EAAE,CAAA;IACvC,aAAa,EAAE,mBAAmB,EAAE,CAAA;IACpC,oBAAoB,EAAE,0BAA0B,EAAE,CAAA;IAClD,0BAA0B,EAAE,aAAa,EAAE,CAAA;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C,
|
|
1
|
+
{"version":3,"file":"availability-overview.d.ts","sourceRoot":"","sources":["../../src/components/availability-overview.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACd,MAAM,8BAA8B,CAAA;AAiBrC,OAAO,EAAE,KAAK,2BAA2B,EAAsB,MAAM,2BAA2B,CAAA;AAEhG,MAAM,WAAW,4BAA6B,SAAQ,2BAA2B;IAC/E,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM,CAAA;QACtB,oBAAoB,EAAE,MAAM,CAAA;QAC5B,qBAAqB,EAAE,MAAM,CAAA;QAC7B,2BAA2B,EAAE,MAAM,CAAA;QACnC,gBAAgB,EAAE,MAAM,CAAA;QACxB,sBAAsB,EAAE,MAAM,CAAA;QAC9B,iBAAiB,EAAE,MAAM,CAAA;QACzB,uBAAuB,EAAE,MAAM,CAAA;QAC/B,sBAAsB,EAAE,MAAM,CAAA;QAC9B,sBAAsB,EAAE,MAAM,CAAA;QAC9B,iBAAiB,EAAE,MAAM,CAAA;QACzB,iBAAiB,EAAE,MAAM,CAAA;QACzB,sBAAsB,EAAE,MAAM,CAAA;KAC/B,CAAA;CACF;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,cAAc,EAAE,sBAAsB,EACtC,aAAa,EACb,oBAAoB,EACpB,0BAA0B,EAC1B,MAAM,EACN,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,UAAU,EACV,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,4BAA4B,CAAA;IACtC,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,gBAAgB,EAAE,mBAAmB,EAAE,CAAA;IACvC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,mBAAmB,EAAE,CAAA;IACpC,oBAAoB,EAAE,0BAA0B,EAAE,CAAA;IAClD,0BAA0B,EAAE,aAAa,EAAE,CAAA;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C,2CA6HA"}
|
|
@@ -4,8 +4,8 @@ import { formatDateTime, productNameById } from "@voyantjs/availability-react";
|
|
|
4
4
|
import { Button, Card, CardContent, CardHeader, CardTitle, Input, OverviewMetric, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@voyantjs/ui/components";
|
|
5
5
|
import { CalendarDays, Clock3, Package, Search, Truck } from "lucide-react";
|
|
6
6
|
import { getSlotStatusLabel } from "./availability-columns.js";
|
|
7
|
-
export function AvailabilityOverview({ messages, products, constrainedSlots, filteredRules, filteredPickupPoints, productsWithoutActiveRules, search, setSearch, productFilter, setProductFilter, hasFilters, onClearFilters, onOpenSlot, onOpenProduct, }) {
|
|
8
|
-
const openSlotsCount = constrainedSlots.filter((slot) => slot.status === "open").length;
|
|
7
|
+
export function AvailabilityOverview({ messages, products, constrainedSlots, openSlotsCount: providedOpenSlotsCount, filteredRules, filteredPickupPoints, productsWithoutActiveRules, search, setSearch, productFilter, setProductFilter, hasFilters, onClearFilters, onOpenSlot, onOpenProduct, }) {
|
|
8
|
+
const openSlotsCount = providedOpenSlotsCount ?? constrainedSlots.filter((slot) => slot.status === "open").length;
|
|
9
9
|
const activeRulesCount = filteredRules.filter((rule) => rule.active).length;
|
|
10
10
|
const activePickupPointsCount = filteredPickupPoints.filter((pickupPoint) => pickupPoint.active).length;
|
|
11
11
|
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "grid gap-4 md:grid-cols-2 xl:grid-cols-4", children: [_jsx(OverviewMetric, { title: messages.overview.openSlotsTitle, value: openSlotsCount, description: messages.overview.openSlotsDescription, icon: CalendarDays }), _jsx(OverviewMetric, { title: messages.overview.constrainedSlotsTitle, value: constrainedSlots.length, description: messages.overview.constrainedSlotsDescription, icon: Clock3 }), _jsx(OverviewMetric, { title: messages.overview.activeRulesTitle, value: activeRulesCount, description: messages.overview.activeRulesDescription, icon: Package }), _jsx(OverviewMetric, { title: messages.overview.pickupPointsTitle, value: activePickupPointsCount, description: messages.overview.pickupPointsDescription, icon: Truck })] }), _jsxs("div", { className: "grid gap-4 xl:grid-cols-2", children: [_jsxs(Card, { size: "sm", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: messages.overview.capacityWatchlistTitle }) }), _jsx(CardContent, { className: "space-y-3 text-sm", children: constrainedSlots.length === 0 ? (_jsx("p", { className: "text-muted-foreground", children: messages.overview.capacityWatchlistEmpty })) : (constrainedSlots.slice(0, 4).map((slot) => (_jsxs("button", { type: "button", className: "block w-full rounded-md border p-3 text-left hover:bg-muted/40", onClick: () => onOpenSlot(slot.id), children: [_jsxs("div", { className: "font-medium", children: [productNameById(products, slot.productId, slot.productName), " \u00B7 ", slot.dateLocal] }), _jsxs("div", { className: "text-muted-foreground", children: [formatDateTime(slot.startsAt), " \u00B7 ", getSlotStatusLabel(slot.status, messages), " \u00B7", " ", messages.remainingPaxLabel, ": ", slot.remainingPax ?? messages.details.noValue] })] }, slot.id)))) })] }), _jsxs(Card, { size: "sm", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: messages.overview.coverageGapsTitle }) }), _jsx(CardContent, { className: "space-y-3 text-sm", children: productsWithoutActiveRules.length === 0 ? (_jsx("p", { className: "text-muted-foreground", children: messages.overview.coverageGapsEmpty })) : (productsWithoutActiveRules.slice(0, 4).map((product) => (_jsxs("button", { type: "button", className: "block w-full rounded-md border p-3 text-left hover:bg-muted/40", onClick: () => onOpenProduct(product.id), children: [_jsx("div", { className: "font-medium", children: product.name }), _jsx("div", { className: "text-muted-foreground", children: messages.overview.coverageGapDescription })] }, product.id)))) })] })] }), _jsxs("div", { className: "flex flex-col gap-3 md:flex-row md:items-center md:justify-between", children: [_jsxs("div", { className: "flex flex-1 flex-col gap-3 md:flex-row md:items-center", children: [_jsxs("div", { className: "relative w-full max-w-sm", children: [_jsx(Search, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { placeholder: messages.searchPlaceholder, value: search, onChange: (event) => setSearch(event.target.value), className: "pl-9" })] }), _jsxs(Select, { value: productFilter, onValueChange: (value) => setProductFilter(value ?? "all"), children: [_jsx(SelectTrigger, { className: "w-full md:w-56", children: _jsx(SelectValue, { placeholder: messages.allProducts }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "all", children: messages.allProducts }), products.map((product) => (_jsx(SelectItem, { value: product.id, children: product.name }, product.id)))] })] })] }), hasFilters ? (_jsx(Button, { variant: "outline", onClick: onClearFilters, children: messages.clearFilters })) : null] })] }));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyantjs/availability-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"react-dom": "^19.0.0",
|
|
34
34
|
"react-hook-form": "^7.72.1",
|
|
35
35
|
"zod": "^4.3.6",
|
|
36
|
-
"@voyantjs/availability-react": "0.
|
|
37
|
-
"@voyantjs/ui": "0.
|
|
36
|
+
"@voyantjs/availability-react": "0.24.0",
|
|
37
|
+
"@voyantjs/ui": "0.24.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@tanstack/react-table": "^8.21.3",
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"typescript": "^6.0.2",
|
|
48
48
|
"vitest": "^4.1.2",
|
|
49
49
|
"zod": "^4.3.6",
|
|
50
|
-
"@voyantjs/availability-react": "0.
|
|
51
|
-
"@voyantjs/ui": "0.
|
|
50
|
+
"@voyantjs/availability-react": "0.24.0",
|
|
51
|
+
"@voyantjs/ui": "0.24.0",
|
|
52
52
|
"@voyantjs/voyant-typescript-config": "0.1.0"
|
|
53
53
|
},
|
|
54
54
|
"files": [
|