@voyant-travel/operations-react 0.19.0 → 0.19.2
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/availability/components/availability-rule-detail-page.d.ts +5 -5
- package/dist/availability/components/availability-slot-detail-page.d.ts +5 -5
- package/dist/availability/components/availability-start-time-detail-page.d.ts +5 -5
- package/dist/availability/hooks/use-availability-batch-mutations.d.ts +2 -2
- package/dist/availability/hooks/use-availability-overview.d.ts +1 -1
- package/dist/availability/hooks/use-availability-slot-mutation.d.ts +3 -3
- package/dist/availability/hooks/use-slots.d.ts +1 -1
- package/dist/availability/query-options.d.ts +12 -12
- package/dist/availability/schemas.d.ts +6 -6
- package/dist/places/hooks/use-facilities.d.ts +1 -1
- package/dist/places/hooks/use-facility-feature-mutation.d.ts +2 -2
- package/dist/places/hooks/use-facility-features.d.ts +1 -1
- package/dist/places/hooks/use-facility-mutation.d.ts +4 -4
- package/dist/places/hooks/use-facility.d.ts +1 -1
- package/dist/places/hooks/use-property-group-mutation.d.ts +6 -6
- package/dist/places/hooks/use-property-group.d.ts +2 -2
- package/dist/places/hooks/use-property-groups.d.ts +2 -2
- package/dist/places/query-options.d.ts +32 -32
- package/dist/resources/admin/detail-hosts.d.ts.map +1 -1
- package/dist/resources/admin/detail-hosts.js +97 -22
- package/dist/resources/admin/resources-dialogs-ops.d.ts +3 -2
- package/dist/resources/admin/resources-dialogs-ops.d.ts.map +1 -1
- package/dist/resources/admin/resources-dialogs-ops.js +44 -6
- package/dist/resources/admin/resources-dialogs.d.ts.map +1 -1
- package/dist/resources/admin/resources-dialogs.js +1 -1
- package/dist/resources/components/resource-allocation-detail-page.d.ts +2 -1
- package/dist/resources/components/resource-allocation-detail-page.d.ts.map +1 -1
- package/dist/resources/components/resource-allocation-detail-page.js +2 -2
- package/dist/resources/components/resource-assignment-detail-page.d.ts +2 -1
- package/dist/resources/components/resource-assignment-detail-page.d.ts.map +1 -1
- package/dist/resources/components/resource-assignment-detail-page.js +4 -3
- package/dist/resources/components/resource-detail-page.d.ts +2 -1
- package/dist/resources/components/resource-detail-page.d.ts.map +1 -1
- package/dist/resources/components/resource-detail-page.js +6 -3
- package/dist/resources/components/resource-detail-shared.d.ts +2 -1
- package/dist/resources/components/resource-detail-shared.d.ts.map +1 -1
- package/dist/resources/components/resource-detail-shared.js +3 -3
- package/dist/resources/components/resource-pool-detail-page.d.ts +5 -1
- package/dist/resources/components/resource-pool-detail-page.d.ts.map +1 -1
- package/dist/resources/components/resource-pool-detail-page.js +38 -8
- package/dist/resources/components/resources-overview.d.ts +3 -2
- package/dist/resources/components/resources-overview.d.ts.map +1 -1
- package/dist/resources/components/resources-overview.js +2 -1
- package/dist/resources/components/resources-page.d.ts.map +1 -1
- package/dist/resources/components/resources-page.js +45 -9
- package/dist/resources/components/resources-tabs-primary.d.ts.map +1 -1
- package/dist/resources/components/resources-tabs-primary.js +28 -19
- package/dist/resources/components/resources-tabs-secondary.d.ts +2 -1
- package/dist/resources/components/resources-tabs-secondary.d.ts.map +1 -1
- package/dist/resources/components/resources-tabs-secondary.js +22 -9
- package/dist/resources/hooks/use-assignment.d.ts +1 -2
- package/dist/resources/hooks/use-assignment.d.ts.map +1 -1
- package/dist/resources/hooks/use-assignments.d.ts +1 -0
- package/dist/resources/hooks/use-assignments.d.ts.map +1 -1
- package/dist/resources/hooks/use-pool.d.ts +1 -1
- package/dist/resources/hooks/use-pools.d.ts +1 -1
- package/dist/resources/hooks/use-resource.d.ts +1 -1
- package/dist/resources/hooks/use-resources.d.ts +1 -1
- package/dist/resources/i18n/en.d.ts.map +1 -1
- package/dist/resources/i18n/en.js +8 -0
- package/dist/resources/i18n/messages.d.ts +8 -0
- package/dist/resources/i18n/messages.d.ts.map +1 -1
- package/dist/resources/i18n/ro.d.ts.map +1 -1
- package/dist/resources/i18n/ro.js +8 -0
- package/dist/resources/i18n/utils.d.ts +2 -1
- package/dist/resources/i18n/utils.d.ts.map +1 -1
- package/dist/resources/i18n/utils.js +3 -1
- package/dist/resources/query-options.d.ts +24 -24
- package/dist/resources/query-options.d.ts.map +1 -1
- package/dist/resources/schemas.d.ts +13 -13
- package/dist/resources/schemas.d.ts.map +1 -1
- package/dist/resources/schemas.js +2 -4
- package/package.json +10 -10
|
@@ -8,7 +8,7 @@ import type { UsePropertyGroupsOptions } from "./hooks/use-property-groups.js";
|
|
|
8
8
|
export declare function getFacilitiesQueryOptions(client: FetchWithValidationOptions, options?: UseFacilitiesOptions): import("@tanstack/react-query").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<{
|
|
9
9
|
data: {
|
|
10
10
|
kind: "property" | "other" | "hotel" | "resort" | "camp" | "lodge" | "venue" | "meeting_point" | "transfer_hub" | "airport" | "station" | "marina" | "office" | "attraction" | "restaurant";
|
|
11
|
-
status: "active" | "
|
|
11
|
+
status: "active" | "inactive" | "archived";
|
|
12
12
|
name: string;
|
|
13
13
|
id: string;
|
|
14
14
|
parentFacilityId: string | null;
|
|
@@ -33,7 +33,7 @@ export declare function getFacilitiesQueryOptions(client: FetchWithValidationOpt
|
|
|
33
33
|
}, Error, {
|
|
34
34
|
data: {
|
|
35
35
|
kind: "property" | "other" | "hotel" | "resort" | "camp" | "lodge" | "venue" | "meeting_point" | "transfer_hub" | "airport" | "station" | "marina" | "office" | "attraction" | "restaurant";
|
|
36
|
-
status: "active" | "
|
|
36
|
+
status: "active" | "inactive" | "archived";
|
|
37
37
|
name: string;
|
|
38
38
|
id: string;
|
|
39
39
|
parentFacilityId: string | null;
|
|
@@ -59,7 +59,7 @@ export declare function getFacilitiesQueryOptions(client: FetchWithValidationOpt
|
|
|
59
59
|
queryFn?: import("@tanstack/react-query").QueryFunction<{
|
|
60
60
|
data: {
|
|
61
61
|
kind: "property" | "other" | "hotel" | "resort" | "camp" | "lodge" | "venue" | "meeting_point" | "transfer_hub" | "airport" | "station" | "marina" | "office" | "attraction" | "restaurant";
|
|
62
|
-
status: "active" | "
|
|
62
|
+
status: "active" | "inactive" | "archived";
|
|
63
63
|
name: string;
|
|
64
64
|
id: string;
|
|
65
65
|
parentFacilityId: string | null;
|
|
@@ -87,7 +87,7 @@ export declare function getFacilitiesQueryOptions(client: FetchWithValidationOpt
|
|
|
87
87
|
[dataTagSymbol]: {
|
|
88
88
|
data: {
|
|
89
89
|
kind: "property" | "other" | "hotel" | "resort" | "camp" | "lodge" | "venue" | "meeting_point" | "transfer_hub" | "airport" | "station" | "marina" | "office" | "attraction" | "restaurant";
|
|
90
|
-
status: "active" | "
|
|
90
|
+
status: "active" | "inactive" | "archived";
|
|
91
91
|
name: string;
|
|
92
92
|
id: string;
|
|
93
93
|
parentFacilityId: string | null;
|
|
@@ -115,7 +115,7 @@ export declare function getFacilitiesQueryOptions(client: FetchWithValidationOpt
|
|
|
115
115
|
};
|
|
116
116
|
export declare function getFacilityQueryOptions(client: FetchWithValidationOptions, id: string): import("@tanstack/react-query").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<{
|
|
117
117
|
kind: "property" | "other" | "hotel" | "resort" | "camp" | "lodge" | "venue" | "meeting_point" | "transfer_hub" | "airport" | "station" | "marina" | "office" | "attraction" | "restaurant";
|
|
118
|
-
status: "active" | "
|
|
118
|
+
status: "active" | "inactive" | "archived";
|
|
119
119
|
name: string;
|
|
120
120
|
id: string;
|
|
121
121
|
parentFacilityId: string | null;
|
|
@@ -135,7 +135,7 @@ export declare function getFacilityQueryOptions(client: FetchWithValidationOptio
|
|
|
135
135
|
tags: string[];
|
|
136
136
|
}, Error, {
|
|
137
137
|
kind: "property" | "other" | "hotel" | "resort" | "camp" | "lodge" | "venue" | "meeting_point" | "transfer_hub" | "airport" | "station" | "marina" | "office" | "attraction" | "restaurant";
|
|
138
|
-
status: "active" | "
|
|
138
|
+
status: "active" | "inactive" | "archived";
|
|
139
139
|
name: string;
|
|
140
140
|
id: string;
|
|
141
141
|
parentFacilityId: string | null;
|
|
@@ -156,7 +156,7 @@ export declare function getFacilityQueryOptions(client: FetchWithValidationOptio
|
|
|
156
156
|
}, readonly ["facilities", "facilities", string]>, "queryFn"> & {
|
|
157
157
|
queryFn?: import("@tanstack/react-query").QueryFunction<{
|
|
158
158
|
kind: "property" | "other" | "hotel" | "resort" | "camp" | "lodge" | "venue" | "meeting_point" | "transfer_hub" | "airport" | "station" | "marina" | "office" | "attraction" | "restaurant";
|
|
159
|
-
status: "active" | "
|
|
159
|
+
status: "active" | "inactive" | "archived";
|
|
160
160
|
name: string;
|
|
161
161
|
id: string;
|
|
162
162
|
parentFacilityId: string | null;
|
|
@@ -179,7 +179,7 @@ export declare function getFacilityQueryOptions(client: FetchWithValidationOptio
|
|
|
179
179
|
queryKey: readonly ["facilities", "facilities", string] & {
|
|
180
180
|
[dataTagSymbol]: {
|
|
181
181
|
kind: "property" | "other" | "hotel" | "resort" | "camp" | "lodge" | "venue" | "meeting_point" | "transfer_hub" | "airport" | "station" | "marina" | "office" | "attraction" | "restaurant";
|
|
182
|
-
status: "active" | "
|
|
182
|
+
status: "active" | "inactive" | "archived";
|
|
183
183
|
name: string;
|
|
184
184
|
id: string;
|
|
185
185
|
parentFacilityId: string | null;
|
|
@@ -203,7 +203,7 @@ export declare function getFacilityQueryOptions(client: FetchWithValidationOptio
|
|
|
203
203
|
};
|
|
204
204
|
export declare function getFacilityFeaturesQueryOptions(client: FetchWithValidationOptions, options: UseFacilityFeaturesOptions): import("@tanstack/react-query").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<{
|
|
205
205
|
data: {
|
|
206
|
-
category: "security" | "
|
|
206
|
+
category: "security" | "service" | "other" | "accessibility" | "amenity" | "policy";
|
|
207
207
|
name: string;
|
|
208
208
|
highlighted: boolean;
|
|
209
209
|
sortOrder: number;
|
|
@@ -218,7 +218,7 @@ export declare function getFacilityFeaturesQueryOptions(client: FetchWithValidat
|
|
|
218
218
|
offset: number;
|
|
219
219
|
}, Error, {
|
|
220
220
|
data: {
|
|
221
|
-
category: "security" | "
|
|
221
|
+
category: "security" | "service" | "other" | "accessibility" | "amenity" | "policy";
|
|
222
222
|
name: string;
|
|
223
223
|
highlighted: boolean;
|
|
224
224
|
sortOrder: number;
|
|
@@ -234,7 +234,7 @@ export declare function getFacilityFeaturesQueryOptions(client: FetchWithValidat
|
|
|
234
234
|
}, readonly ["facilities", "facility-features", import("./query-keys.js").FacilityFeaturesListFilters]>, "queryFn"> & {
|
|
235
235
|
queryFn?: import("@tanstack/react-query").QueryFunction<{
|
|
236
236
|
data: {
|
|
237
|
-
category: "security" | "
|
|
237
|
+
category: "security" | "service" | "other" | "accessibility" | "amenity" | "policy";
|
|
238
238
|
name: string;
|
|
239
239
|
highlighted: boolean;
|
|
240
240
|
sortOrder: number;
|
|
@@ -252,7 +252,7 @@ export declare function getFacilityFeaturesQueryOptions(client: FetchWithValidat
|
|
|
252
252
|
queryKey: readonly ["facilities", "facility-features", import("./query-keys.js").FacilityFeaturesListFilters] & {
|
|
253
253
|
[dataTagSymbol]: {
|
|
254
254
|
data: {
|
|
255
|
-
category: "security" | "
|
|
255
|
+
category: "security" | "service" | "other" | "accessibility" | "amenity" | "policy";
|
|
256
256
|
name: string;
|
|
257
257
|
highlighted: boolean;
|
|
258
258
|
sortOrder: number;
|
|
@@ -270,7 +270,7 @@ export declare function getFacilityFeaturesQueryOptions(client: FetchWithValidat
|
|
|
270
270
|
};
|
|
271
271
|
};
|
|
272
272
|
export declare function getFacilityFeatureQueryOptions(client: FetchWithValidationOptions, id: string): import("@tanstack/react-query").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<{
|
|
273
|
-
category: "security" | "
|
|
273
|
+
category: "security" | "service" | "other" | "accessibility" | "amenity" | "policy";
|
|
274
274
|
name: string;
|
|
275
275
|
highlighted: boolean;
|
|
276
276
|
sortOrder: number;
|
|
@@ -280,7 +280,7 @@ export declare function getFacilityFeatureQueryOptions(client: FetchWithValidati
|
|
|
280
280
|
description: string | null;
|
|
281
281
|
valueText: string | null;
|
|
282
282
|
}, Error, {
|
|
283
|
-
category: "security" | "
|
|
283
|
+
category: "security" | "service" | "other" | "accessibility" | "amenity" | "policy";
|
|
284
284
|
name: string;
|
|
285
285
|
highlighted: boolean;
|
|
286
286
|
sortOrder: number;
|
|
@@ -291,7 +291,7 @@ export declare function getFacilityFeatureQueryOptions(client: FetchWithValidati
|
|
|
291
291
|
valueText: string | null;
|
|
292
292
|
}, readonly ["facilities", "facility-features", string]>, "queryFn"> & {
|
|
293
293
|
queryFn?: import("@tanstack/react-query").QueryFunction<{
|
|
294
|
-
category: "security" | "
|
|
294
|
+
category: "security" | "service" | "other" | "accessibility" | "amenity" | "policy";
|
|
295
295
|
name: string;
|
|
296
296
|
highlighted: boolean;
|
|
297
297
|
sortOrder: number;
|
|
@@ -304,7 +304,7 @@ export declare function getFacilityFeatureQueryOptions(client: FetchWithValidati
|
|
|
304
304
|
} & {
|
|
305
305
|
queryKey: readonly ["facilities", "facility-features", string] & {
|
|
306
306
|
[dataTagSymbol]: {
|
|
307
|
-
category: "security" | "
|
|
307
|
+
category: "security" | "service" | "other" | "accessibility" | "amenity" | "policy";
|
|
308
308
|
name: string;
|
|
309
309
|
highlighted: boolean;
|
|
310
310
|
sortOrder: number;
|
|
@@ -567,8 +567,8 @@ export declare function getPropertyQueryOptions(client: FetchWithValidationOptio
|
|
|
567
567
|
};
|
|
568
568
|
export declare function getPropertyGroupsQueryOptions(client: FetchWithValidationOptions, options?: UsePropertyGroupsOptions): import("@tanstack/react-query").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<{
|
|
569
569
|
data: {
|
|
570
|
-
groupType: "
|
|
571
|
-
status: "active" | "
|
|
570
|
+
groupType: "other" | "brand" | "chain" | "management_company" | "collection" | "portfolio" | "cluster";
|
|
571
|
+
status: "active" | "inactive" | "archived";
|
|
572
572
|
name: string;
|
|
573
573
|
id: string;
|
|
574
574
|
parentGroupId: string | null;
|
|
@@ -584,8 +584,8 @@ export declare function getPropertyGroupsQueryOptions(client: FetchWithValidatio
|
|
|
584
584
|
offset: number;
|
|
585
585
|
}, Error, {
|
|
586
586
|
data: {
|
|
587
|
-
groupType: "
|
|
588
|
-
status: "active" | "
|
|
587
|
+
groupType: "other" | "brand" | "chain" | "management_company" | "collection" | "portfolio" | "cluster";
|
|
588
|
+
status: "active" | "inactive" | "archived";
|
|
589
589
|
name: string;
|
|
590
590
|
id: string;
|
|
591
591
|
parentGroupId: string | null;
|
|
@@ -602,8 +602,8 @@ export declare function getPropertyGroupsQueryOptions(client: FetchWithValidatio
|
|
|
602
602
|
}, readonly ["facilities", "property-groups", import("./query-keys.js").PropertyGroupsListFilters]>, "queryFn"> & {
|
|
603
603
|
queryFn?: import("@tanstack/react-query").QueryFunction<{
|
|
604
604
|
data: {
|
|
605
|
-
groupType: "
|
|
606
|
-
status: "active" | "
|
|
605
|
+
groupType: "other" | "brand" | "chain" | "management_company" | "collection" | "portfolio" | "cluster";
|
|
606
|
+
status: "active" | "inactive" | "archived";
|
|
607
607
|
name: string;
|
|
608
608
|
id: string;
|
|
609
609
|
parentGroupId: string | null;
|
|
@@ -622,8 +622,8 @@ export declare function getPropertyGroupsQueryOptions(client: FetchWithValidatio
|
|
|
622
622
|
queryKey: readonly ["facilities", "property-groups", import("./query-keys.js").PropertyGroupsListFilters] & {
|
|
623
623
|
[dataTagSymbol]: {
|
|
624
624
|
data: {
|
|
625
|
-
groupType: "
|
|
626
|
-
status: "active" | "
|
|
625
|
+
groupType: "other" | "brand" | "chain" | "management_company" | "collection" | "portfolio" | "cluster";
|
|
626
|
+
status: "active" | "inactive" | "archived";
|
|
627
627
|
name: string;
|
|
628
628
|
id: string;
|
|
629
629
|
parentGroupId: string | null;
|
|
@@ -642,8 +642,8 @@ export declare function getPropertyGroupsQueryOptions(client: FetchWithValidatio
|
|
|
642
642
|
};
|
|
643
643
|
};
|
|
644
644
|
export declare function getPropertyGroupQueryOptions(client: FetchWithValidationOptions, id: string): import("@tanstack/react-query").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<{
|
|
645
|
-
groupType: "
|
|
646
|
-
status: "active" | "
|
|
645
|
+
groupType: "other" | "brand" | "chain" | "management_company" | "collection" | "portfolio" | "cluster";
|
|
646
|
+
status: "active" | "inactive" | "archived";
|
|
647
647
|
name: string;
|
|
648
648
|
id: string;
|
|
649
649
|
parentGroupId: string | null;
|
|
@@ -654,8 +654,8 @@ export declare function getPropertyGroupQueryOptions(client: FetchWithValidation
|
|
|
654
654
|
notes: string | null;
|
|
655
655
|
metadata?: Record<string, unknown> | null | undefined;
|
|
656
656
|
}, Error, {
|
|
657
|
-
groupType: "
|
|
658
|
-
status: "active" | "
|
|
657
|
+
groupType: "other" | "brand" | "chain" | "management_company" | "collection" | "portfolio" | "cluster";
|
|
658
|
+
status: "active" | "inactive" | "archived";
|
|
659
659
|
name: string;
|
|
660
660
|
id: string;
|
|
661
661
|
parentGroupId: string | null;
|
|
@@ -667,8 +667,8 @@ export declare function getPropertyGroupQueryOptions(client: FetchWithValidation
|
|
|
667
667
|
metadata?: Record<string, unknown> | null | undefined;
|
|
668
668
|
}, readonly ["facilities", "property-groups", string]>, "queryFn"> & {
|
|
669
669
|
queryFn?: import("@tanstack/react-query").QueryFunction<{
|
|
670
|
-
groupType: "
|
|
671
|
-
status: "active" | "
|
|
670
|
+
groupType: "other" | "brand" | "chain" | "management_company" | "collection" | "portfolio" | "cluster";
|
|
671
|
+
status: "active" | "inactive" | "archived";
|
|
672
672
|
name: string;
|
|
673
673
|
id: string;
|
|
674
674
|
parentGroupId: string | null;
|
|
@@ -682,8 +682,8 @@ export declare function getPropertyGroupQueryOptions(client: FetchWithValidation
|
|
|
682
682
|
} & {
|
|
683
683
|
queryKey: readonly ["facilities", "property-groups", string] & {
|
|
684
684
|
[dataTagSymbol]: {
|
|
685
|
-
groupType: "
|
|
686
|
-
status: "active" | "
|
|
685
|
+
groupType: "other" | "brand" | "chain" | "management_company" | "collection" | "portfolio" | "cluster";
|
|
686
|
+
status: "active" | "inactive" | "archived";
|
|
687
687
|
name: string;
|
|
688
688
|
id: string;
|
|
689
689
|
parentGroupId: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detail-hosts.d.ts","sourceRoot":"","sources":["../../../src/resources/admin/detail-hosts.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"detail-hosts.d.ts","sourceRoot":"","sources":["../../../src/resources/admin/detail-hosts.tsx"],"names":[],"mappings":"AA+BA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAA;CACX;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,uBAAuB,+BAgDjE;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAA;CACX;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,2BAA2B,+BAgEzE;AAED,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,MAAM,CAAA;CACX;AAED,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,EAAE,EAAE,iCAAiC,+BAuDrF;AAED,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,MAAM,CAAA;CACX;AAED,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,EAAE,EAAE,iCAAiC,+BAoDrF"}
|
|
@@ -1,50 +1,125 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useQueryClient } from "@tanstack/react-query";
|
|
4
4
|
import { useAdminNavigate } from "@voyant-travel/admin";
|
|
5
|
+
import { useState } from "react";
|
|
5
6
|
import { ResourceAllocationDetailPage } from "../components/resource-allocation-detail-page.js";
|
|
6
7
|
import { ResourceAssignmentDetailPage } from "../components/resource-assignment-detail-page.js";
|
|
7
8
|
import { ResourceDetailPage } from "../components/resource-detail-page.js";
|
|
8
9
|
import { ResourcePoolDetailPage } from "../components/resource-pool-detail-page.js";
|
|
9
|
-
import { resourcesQueryKeys, useVoyantResourcesContext } from "../index.js";
|
|
10
|
+
import { resourcesQueryKeys, useAllocation, useAssignment, useBookings, usePool, usePools, useProducts, useResource, useResources, useRules, useSlots, useStartTimes, useSuppliers, useVoyantResourcesContext, } from "../index.js";
|
|
10
11
|
import { sendResourcesMutation } from "./resources-admin-api.js";
|
|
12
|
+
import { ResourceAllocationDialog } from "./resources-dialog-allocation.js";
|
|
13
|
+
import { ResourceDialog, ResourcePoolDialog } from "./resources-dialogs-core.js";
|
|
14
|
+
import { ResourceSlotAssignmentDialog } from "./resources-dialogs-ops.js";
|
|
15
|
+
import { resourcesPageQueryFilters } from "./resources-page-data.js";
|
|
11
16
|
export function ResourceDetailHost({ id }) {
|
|
12
17
|
const navigateTo = useAdminNavigate();
|
|
13
18
|
const queryClient = useQueryClient();
|
|
14
19
|
const client = useVoyantResourcesContext();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
const [resourceDialogOpen, setResourceDialogOpen] = useState(false);
|
|
21
|
+
const resource = useResource(id).data;
|
|
22
|
+
const suppliers = useSuppliers(resourcesPageQueryFilters.suppliers).data?.data ?? [];
|
|
23
|
+
const refreshResource = async () => {
|
|
24
|
+
await Promise.all([
|
|
25
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.resources() }),
|
|
26
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.resource(id) }),
|
|
27
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.all }),
|
|
28
|
+
]);
|
|
29
|
+
};
|
|
30
|
+
return (_jsxs(_Fragment, { children: [_jsx(ResourceDetailPage, { id: id, onBack: () => navigateTo("resource.list", {}), onEdit: () => setResourceDialogOpen(true), onOpenSupplier: (supplierId) => navigateTo("supplier.detail", { supplierId }), onOpenAssignment: (assignmentId) => navigateTo("resourceAssignment.detail", { assignmentId }), onDelete: async (resource) => {
|
|
31
|
+
await sendResourcesMutation(client, "DELETE", `/v1/admin/operations/resources/${resource.id}`);
|
|
32
|
+
await refreshResource();
|
|
33
|
+
navigateTo("resource.list", {});
|
|
34
|
+
} }), _jsx(ResourceDialog, { open: resourceDialogOpen, onOpenChange: setResourceDialogOpen, resource: resource, suppliers: suppliers, onSuccess: () => {
|
|
35
|
+
setResourceDialogOpen(false);
|
|
36
|
+
void refreshResource();
|
|
37
|
+
} })] }));
|
|
20
38
|
}
|
|
21
39
|
export function ResourcePoolDetailHost({ id }) {
|
|
22
40
|
const navigateTo = useAdminNavigate();
|
|
23
41
|
const queryClient = useQueryClient();
|
|
24
42
|
const client = useVoyantResourcesContext();
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
43
|
+
const [poolDialogOpen, setPoolDialogOpen] = useState(false);
|
|
44
|
+
const pool = usePool(id).data;
|
|
45
|
+
const products = useProducts(resourcesPageQueryFilters.products).data?.data ?? [];
|
|
46
|
+
const refreshPool = async () => {
|
|
47
|
+
await Promise.all([
|
|
48
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.pools() }),
|
|
49
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.pool(id) }),
|
|
50
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.resources() }),
|
|
51
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.all }),
|
|
52
|
+
]);
|
|
53
|
+
};
|
|
54
|
+
return (_jsxs(_Fragment, { children: [_jsx(ResourcePoolDetailPage, { id: id, onBack: () => navigateTo("resource.list", {}), onEdit: () => setPoolDialogOpen(true), onAddMember: async (pool, resourceId) => {
|
|
55
|
+
await sendResourcesMutation(client, "POST", "/v1/admin/operations/pool-members", {
|
|
56
|
+
poolId: pool.id,
|
|
57
|
+
resourceId,
|
|
58
|
+
});
|
|
59
|
+
await refreshPool();
|
|
60
|
+
}, onRemoveMember: async (member) => {
|
|
61
|
+
await sendResourcesMutation(client, "DELETE", `/v1/admin/operations/pool-members/${member.id}`);
|
|
62
|
+
await refreshPool();
|
|
63
|
+
}, onOpenProduct: (productId) => navigateTo("product.detail", { productId }), onOpenResource: (resourceId) => navigateTo("resource.detail", { resourceId }), onOpenAllocation: (allocationId) => navigateTo("resourceAllocation.detail", { allocationId }), onOpenAssignment: (assignmentId) => navigateTo("resourceAssignment.detail", { assignmentId }), onDelete: async (pool) => {
|
|
64
|
+
await sendResourcesMutation(client, "DELETE", `/v1/admin/operations/pools/${pool.id}`);
|
|
65
|
+
await refreshPool();
|
|
66
|
+
navigateTo("resource.list", {});
|
|
67
|
+
} }), _jsx(ResourcePoolDialog, { open: poolDialogOpen, onOpenChange: setPoolDialogOpen, pool: pool, products: products, onSuccess: () => {
|
|
68
|
+
setPoolDialogOpen(false);
|
|
69
|
+
void refreshPool();
|
|
70
|
+
} })] }));
|
|
30
71
|
}
|
|
31
72
|
export function ResourceAssignmentDetailHost({ id }) {
|
|
32
73
|
const navigateTo = useAdminNavigate();
|
|
33
74
|
const queryClient = useQueryClient();
|
|
34
75
|
const client = useVoyantResourcesContext();
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
76
|
+
const [assignmentDialogOpen, setAssignmentDialogOpen] = useState(false);
|
|
77
|
+
const assignment = useAssignment(id).data;
|
|
78
|
+
const slots = useSlots(resourcesPageQueryFilters.slots).data?.data ?? [];
|
|
79
|
+
const pools = usePools(resourcesPageQueryFilters.pools).data?.data ?? [];
|
|
80
|
+
const resources = useResources(resourcesPageQueryFilters.resources).data?.data ?? [];
|
|
81
|
+
const bookings = useBookings(resourcesPageQueryFilters.bookings).data?.data ?? [];
|
|
82
|
+
const products = useProducts(resourcesPageQueryFilters.products).data?.data ?? [];
|
|
83
|
+
const refreshAssignment = async () => {
|
|
84
|
+
await Promise.all([
|
|
85
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.assignments() }),
|
|
86
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.assignment(id) }),
|
|
87
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.resources() }),
|
|
88
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.pools() }),
|
|
89
|
+
]);
|
|
90
|
+
};
|
|
91
|
+
return (_jsxs(_Fragment, { children: [_jsx(ResourceAssignmentDetailPage, { id: id, onBack: () => navigateTo("resource.list", {}), onEdit: () => setAssignmentDialogOpen(true), onOpenSlot: (slotId) => navigateTo("availabilitySlot.detail", { slotId }), onOpenResource: (resourceId) => navigateTo("resource.detail", { resourceId }), onDelete: async (assignment) => {
|
|
92
|
+
await sendResourcesMutation(client, "DELETE", `/v1/admin/operations/slot-assignments/${assignment.id}`);
|
|
93
|
+
await refreshAssignment();
|
|
94
|
+
navigateTo("resource.list", {});
|
|
95
|
+
} }), _jsx(ResourceSlotAssignmentDialog, { open: assignmentDialogOpen, onOpenChange: setAssignmentDialogOpen, assignment: assignment, slots: slots, pools: pools, resources: resources, bookings: bookings, products: products, onSuccess: () => {
|
|
96
|
+
setAssignmentDialogOpen(false);
|
|
97
|
+
void refreshAssignment();
|
|
98
|
+
} })] }));
|
|
40
99
|
}
|
|
41
100
|
export function ResourceAllocationDetailHost({ id }) {
|
|
42
101
|
const navigateTo = useAdminNavigate();
|
|
43
102
|
const queryClient = useQueryClient();
|
|
44
103
|
const client = useVoyantResourcesContext();
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
104
|
+
const [allocationDialogOpen, setAllocationDialogOpen] = useState(false);
|
|
105
|
+
const allocation = useAllocation(id).data;
|
|
106
|
+
const pools = usePools(resourcesPageQueryFilters.pools).data?.data ?? [];
|
|
107
|
+
const products = useProducts(resourcesPageQueryFilters.products).data?.data ?? [];
|
|
108
|
+
const rules = useRules(resourcesPageQueryFilters.rules).data?.data ?? [];
|
|
109
|
+
const startTimes = useStartTimes(resourcesPageQueryFilters.startTimes).data?.data ?? [];
|
|
110
|
+
const refreshAllocation = async () => {
|
|
111
|
+
await Promise.all([
|
|
112
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.allocations() }),
|
|
113
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.allocation(id) }),
|
|
114
|
+
queryClient.invalidateQueries({ queryKey: resourcesQueryKeys.pools() }),
|
|
115
|
+
]);
|
|
116
|
+
};
|
|
117
|
+
return (_jsxs(_Fragment, { children: [_jsx(ResourceAllocationDetailPage, { id: id, onBack: () => navigateTo("resource.list", {}), onEdit: () => setAllocationDialogOpen(true), onOpenPool: (poolId) => navigateTo("resourcePool.detail", { poolId }), onOpenProduct: (productId) => navigateTo("product.detail", { productId }), onDelete: async (allocation) => {
|
|
118
|
+
await sendResourcesMutation(client, "DELETE", `/v1/admin/operations/allocations/${allocation.id}`);
|
|
119
|
+
await refreshAllocation();
|
|
120
|
+
navigateTo("resource.list", {});
|
|
121
|
+
} }), _jsx(ResourceAllocationDialog, { open: allocationDialogOpen, onOpenChange: setAllocationDialogOpen, allocation: allocation, pools: pools, products: products, rules: rules, startTimes: startTimes, onSuccess: () => {
|
|
122
|
+
setAllocationDialogOpen(false);
|
|
123
|
+
void refreshAllocation();
|
|
124
|
+
} })] }));
|
|
50
125
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type BookingOption, type ResourceCloseoutRow, type ResourcePoolRow, type ResourceRow, type ResourceSlotAssignmentRow, type SlotOption } from "../index.js";
|
|
2
|
-
export declare function ResourceSlotAssignmentDialog({ open, onOpenChange, assignment, slots, pools, resources, bookings, onSuccess, }: {
|
|
1
|
+
import { type BookingOption, type ProductOption, type ResourceCloseoutRow, type ResourcePoolRow, type ResourceRow, type ResourceSlotAssignmentRow, type SlotOption } from "../index.js";
|
|
2
|
+
export declare function ResourceSlotAssignmentDialog({ open, onOpenChange, assignment, slots, pools, resources, bookings, products, onSuccess, }: {
|
|
3
3
|
open: boolean;
|
|
4
4
|
onOpenChange: (open: boolean) => void;
|
|
5
5
|
assignment?: ResourceSlotAssignmentRow;
|
|
@@ -7,6 +7,7 @@ export declare function ResourceSlotAssignmentDialog({ open, onOpenChange, assig
|
|
|
7
7
|
pools: ResourcePoolRow[];
|
|
8
8
|
resources: ResourceRow[];
|
|
9
9
|
bookings: BookingOption[];
|
|
10
|
+
products: ProductOption[];
|
|
10
11
|
onSuccess: () => void;
|
|
11
12
|
}): import("react").JSX.Element;
|
|
12
13
|
export declare function ResourceCloseoutDialog({ open, onOpenChange, closeout, resources, onSuccess, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources-dialogs-ops.d.ts","sourceRoot":"","sources":["../../../src/resources/admin/resources-dialogs-ops.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resources-dialogs-ops.d.ts","sourceRoot":"","sources":["../../../src/resources/admin/resources-dialogs-ops.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAEL,KAAK,aAAa,EAGlB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,UAAU,EAIhB,MAAM,aAAa,CAAA;AA+BpB,wBAAgB,4BAA4B,CAAC,EAC3C,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,KAAK,EACL,KAAK,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,EAAE;IACD,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB,+BAqOA;AAuBD,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,SAAS,GACV,EAAE;IACD,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,QAAQ,CAAC,EAAE,mBAAmB,CAAA;IAC9B,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB,+BAiKA"}
|
|
@@ -7,9 +7,12 @@ import { Loader2 } from "lucide-react";
|
|
|
7
7
|
import { useEffect } from "react";
|
|
8
8
|
import { useForm } from "react-hook-form";
|
|
9
9
|
import { z } from "zod/v4";
|
|
10
|
-
import {
|
|
10
|
+
import { useResourcesUiI18nOrDefault } from "../i18n/index.js";
|
|
11
|
+
import { formatResourceSlotLabel } from "../i18n/utils.js";
|
|
12
|
+
import { assignmentStatusOptions, NONE_VALUE, nullableString, toIsoDateTime, toLocalDateTimeInput, useVoyantResourcesContext, } from "../index.js";
|
|
11
13
|
import { sendResourcesMutation } from "./resources-admin-api.js";
|
|
12
|
-
const getAssignmentFormSchema = (messages) => z
|
|
14
|
+
const getAssignmentFormSchema = (messages) => z
|
|
15
|
+
.object({
|
|
13
16
|
slotId: z.string().min(1, messages.resources.dialogs.assignment.validationSlotRequired),
|
|
14
17
|
poolId: z.string().optional(),
|
|
15
18
|
resourceId: z.string().optional(),
|
|
@@ -18,11 +21,28 @@ const getAssignmentFormSchema = (messages) => z.object({
|
|
|
18
21
|
assignedBy: z.string().optional(),
|
|
19
22
|
releasedAt: z.string().optional(),
|
|
20
23
|
notes: z.string().optional(),
|
|
24
|
+
})
|
|
25
|
+
.superRefine((values, ctx) => {
|
|
26
|
+
if ((!values.poolId || values.poolId === NONE_VALUE) &&
|
|
27
|
+
(!values.resourceId || values.resourceId === NONE_VALUE)) {
|
|
28
|
+
const issue = {
|
|
29
|
+
code: "custom",
|
|
30
|
+
message: messages.resources.dialogs.assignment.validationTargetRequired,
|
|
31
|
+
};
|
|
32
|
+
ctx.addIssue({ ...issue, path: ["poolId"] });
|
|
33
|
+
ctx.addIssue({ ...issue, path: ["resourceId"] });
|
|
34
|
+
}
|
|
21
35
|
});
|
|
22
|
-
export function ResourceSlotAssignmentDialog({ open, onOpenChange, assignment, slots, pools, resources, bookings, onSuccess, }) {
|
|
36
|
+
export function ResourceSlotAssignmentDialog({ open, onOpenChange, assignment, slots, pools, resources, bookings, products, onSuccess, }) {
|
|
23
37
|
const client = useVoyantResourcesContext();
|
|
24
38
|
const messages = useOperatorAdminMessages();
|
|
39
|
+
const i18n = useResourcesUiI18nOrDefault();
|
|
25
40
|
const dialogMessages = messages.resources.dialogs.assignment;
|
|
41
|
+
const slotLabel = (slot) => formatResourceSlotLabel(slot, {
|
|
42
|
+
template: i18n.messages.common.slotLabel,
|
|
43
|
+
formatDate: i18n.formatDate,
|
|
44
|
+
products,
|
|
45
|
+
});
|
|
26
46
|
const assignmentFormSchema = getAssignmentFormSchema(messages);
|
|
27
47
|
const form = useForm({
|
|
28
48
|
resolver: zodResolver(assignmentFormSchema),
|
|
@@ -74,15 +94,27 @@ export function ResourceSlotAssignmentDialog({ open, onOpenChange, assignment, s
|
|
|
74
94
|
}
|
|
75
95
|
onSuccess();
|
|
76
96
|
};
|
|
77
|
-
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { size: "lg", children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEditing ? dialogMessages.editTitle : dialogMessages.newTitle }) }), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsxs(DialogBody, { className: "grid gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.slotLabel }), _jsxs(Select, { items: slots.map((slot) => ({ label: slotLabel(slot), value: slot.id })), value: form.watch("slotId"), onValueChange: (value) => form.setValue("slotId", value ?? ""), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, { placeholder: dialogMessages.selectSlotPlaceholder }) }), _jsx(SelectContent, { children: slots.map((slot) => (_jsx(SelectItem, { value: slot.id, children: slotLabel(slot) }, slot.id))) })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.poolLabel }), _jsxs(Select, { value: form.watch("poolId"), onValueChange: (value) => form.setValue("poolId", value ?? NONE_VALUE), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: NONE_VALUE, children: dialogMessages.noPool }), pools.map((pool) => (_jsx(SelectItem, { value: pool.id, children: pool.name }, pool.id)))] })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.resourceLabel }), _jsxs(Select, { value: form.watch("resourceId"), onValueChange: (value) => form.setValue("resourceId", value ?? NONE_VALUE), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: NONE_VALUE, children: dialogMessages.noResource }), resources.map((resource) => (_jsx(SelectItem, { value: resource.id, children: resource.name }, resource.id)))] })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.bookingLabel }), _jsxs(Select, { value: form.watch("bookingId"), onValueChange: (value) => form.setValue("bookingId", value ?? NONE_VALUE), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: NONE_VALUE, children: dialogMessages.noBooking }), bookings.map((booking) => (_jsx(SelectItem, { value: booking.id, children: booking.bookingNumber }, booking.id)))] })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.statusLabel }), _jsxs(Select, { items: assignmentStatusOptions, value: form.watch("status"), onValueChange: (value) => form.setValue("status", value), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: assignmentStatusOptions.map((option) => (_jsx(SelectItem, { value: option.value, children: messages.resources.assignmentStatusLabels[option.value] }, option.value))) })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.assignedByLabel }), _jsx(Input, { ...form.register("assignedBy"), placeholder: dialogMessages.assignedByPlaceholder })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.releasedAtLabel }), _jsx(DateTimePicker, { value: form.watch("releasedAt") || null, onChange: (value) => form.setValue("releasedAt", value ?? "", { shouldDirty: true }), className: "w-full" })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.notesLabel }), _jsx(Textarea, { ...form.register("notes"), placeholder: dialogMessages.notesPlaceholder })] })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "ghost", onClick: () => onOpenChange(false), children: dialogMessages.cancel }), _jsxs(Button, { type: "submit", disabled: form.formState.isSubmitting, children: [form.formState.isSubmitting && _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), isEditing ? dialogMessages.save : dialogMessages.create] })] })] })] }) }));
|
|
97
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { size: "lg", children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEditing ? dialogMessages.editTitle : dialogMessages.newTitle }) }), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsxs(DialogBody, { className: "grid gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.slotLabel }), _jsxs(Select, { items: slots.map((slot) => ({ label: slotLabel(slot), value: slot.id })), value: form.watch("slotId"), onValueChange: (value) => form.setValue("slotId", value ?? ""), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, { placeholder: dialogMessages.selectSlotPlaceholder }) }), _jsx(SelectContent, { children: slots.map((slot) => (_jsx(SelectItem, { value: slot.id, children: slotLabel(slot) }, slot.id))) })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.poolLabel }), _jsxs(Select, { value: form.watch("poolId"), onValueChange: (value) => form.setValue("poolId", value ?? NONE_VALUE, { shouldValidate: true }), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: NONE_VALUE, children: dialogMessages.noPool }), pools.map((pool) => (_jsx(SelectItem, { value: pool.id, children: pool.name }, pool.id)))] })] }), form.formState.errors.poolId ? (_jsx("p", { className: "text-destructive text-xs", children: form.formState.errors.poolId.message })) : null] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.resourceLabel }), _jsxs(Select, { value: form.watch("resourceId"), onValueChange: (value) => form.setValue("resourceId", value ?? NONE_VALUE, { shouldValidate: true }), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: NONE_VALUE, children: dialogMessages.noResource }), resources.map((resource) => (_jsx(SelectItem, { value: resource.id, children: resource.name }, resource.id)))] })] }), form.formState.errors.resourceId ? (_jsx("p", { className: "text-destructive text-xs", children: form.formState.errors.resourceId.message })) : null] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.bookingLabel }), _jsxs(Select, { value: form.watch("bookingId"), onValueChange: (value) => form.setValue("bookingId", value ?? NONE_VALUE), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: NONE_VALUE, children: dialogMessages.noBooking }), bookings.map((booking) => (_jsx(SelectItem, { value: booking.id, children: booking.bookingNumber }, booking.id)))] })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.statusLabel }), _jsxs(Select, { items: assignmentStatusOptions, value: form.watch("status"), onValueChange: (value) => form.setValue("status", value), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: assignmentStatusOptions.map((option) => (_jsx(SelectItem, { value: option.value, children: messages.resources.assignmentStatusLabels[option.value] }, option.value))) })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.assignedByLabel }), _jsx(Input, { ...form.register("assignedBy"), placeholder: dialogMessages.assignedByPlaceholder })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.releasedAtLabel }), _jsx(DateTimePicker, { value: form.watch("releasedAt") || null, onChange: (value) => form.setValue("releasedAt", value ?? "", { shouldDirty: true }), className: "w-full" })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.notesLabel }), _jsx(Textarea, { ...form.register("notes"), placeholder: dialogMessages.notesPlaceholder })] })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "ghost", onClick: () => onOpenChange(false), children: dialogMessages.cancel }), _jsxs(Button, { type: "submit", disabled: form.formState.isSubmitting, children: [form.formState.isSubmitting && _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), isEditing ? dialogMessages.save : dialogMessages.create] })] })] })] }) }));
|
|
78
98
|
}
|
|
79
|
-
const getCloseoutFormSchema = (messages) => z
|
|
99
|
+
const getCloseoutFormSchema = (messages) => z
|
|
100
|
+
.object({
|
|
80
101
|
resourceId: z.string().min(1, messages.resources.dialogs.closeout.validationResourceRequired),
|
|
81
102
|
dateLocal: z.string().min(1, messages.resources.dialogs.closeout.validationDateRequired),
|
|
82
103
|
startsAt: z.string().optional(),
|
|
83
104
|
endsAt: z.string().optional(),
|
|
84
105
|
reason: z.string().optional(),
|
|
85
106
|
createdBy: z.string().optional(),
|
|
107
|
+
})
|
|
108
|
+
.superRefine((values, ctx) => {
|
|
109
|
+
if (!values.startsAt || !values.endsAt)
|
|
110
|
+
return;
|
|
111
|
+
if (new Date(values.startsAt).getTime() < new Date(values.endsAt).getTime())
|
|
112
|
+
return;
|
|
113
|
+
ctx.addIssue({
|
|
114
|
+
code: "custom",
|
|
115
|
+
path: ["endsAt"],
|
|
116
|
+
message: messages.resources.dialogs.closeout.validationWindowOrder,
|
|
117
|
+
});
|
|
86
118
|
});
|
|
87
119
|
export function ResourceCloseoutDialog({ open, onOpenChange, closeout, resources, onSuccess, }) {
|
|
88
120
|
const client = useVoyantResourcesContext();
|
|
@@ -136,5 +168,11 @@ export function ResourceCloseoutDialog({ open, onOpenChange, closeout, resources
|
|
|
136
168
|
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEditing ? dialogMessages.editTitle : dialogMessages.newTitle }) }), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsxs(DialogBody, { className: "grid gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.resourceLabel }), _jsxs(Select, { items: resources.map((resource) => ({ label: resource.name, value: resource.id })), value: form.watch("resourceId"), onValueChange: (value) => form.setValue("resourceId", value ?? ""), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, { placeholder: dialogMessages.selectResourcePlaceholder }) }), _jsx(SelectContent, { children: resources.map((resource) => (_jsx(SelectItem, { value: resource.id, children: resource.name }, resource.id))) })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.dateLabel }), _jsx(DatePicker, { value: form.watch("dateLocal") || null, onChange: (value) => form.setValue("dateLocal", value ?? "", {
|
|
137
169
|
shouldDirty: true,
|
|
138
170
|
shouldValidate: true,
|
|
139
|
-
}), className: "w-full" })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.startsAtLabel }), _jsx(DateTimePicker, { value: form.watch("startsAt") || null, onChange: (value) => form.setValue("startsAt", value ?? "", {
|
|
171
|
+
}), className: "w-full" })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.startsAtLabel }), _jsx(DateTimePicker, { value: form.watch("startsAt") || null, onChange: (value) => form.setValue("startsAt", value ?? "", {
|
|
172
|
+
shouldDirty: true,
|
|
173
|
+
shouldValidate: true,
|
|
174
|
+
}), className: "w-full" })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.endsAtLabel }), _jsx(DateTimePicker, { value: form.watch("endsAt") || null, onChange: (value) => form.setValue("endsAt", value ?? "", {
|
|
175
|
+
shouldDirty: true,
|
|
176
|
+
shouldValidate: true,
|
|
177
|
+
}), className: "w-full" }), form.formState.errors.endsAt ? (_jsx("p", { className: "text-xs text-destructive", children: form.formState.errors.endsAt.message })) : null] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.createdByLabel }), _jsx(Input, { ...form.register("createdBy"), placeholder: dialogMessages.createdByPlaceholder })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: dialogMessages.reasonLabel }), _jsx(Textarea, { ...form.register("reason"), placeholder: dialogMessages.reasonPlaceholder })] })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "ghost", onClick: () => onOpenChange(false), children: dialogMessages.cancel }), _jsxs(Button, { type: "submit", disabled: form.formState.isSubmitting, children: [form.formState.isSubmitting && _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), isEditing ? dialogMessages.save : dialogMessages.create] })] })] })] }) }));
|
|
140
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources-dialogs.d.ts","sourceRoot":"","sources":["../../../src/resources/admin/resources-dialogs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,yBAAyB,EACzB,UAAU,EACV,UAAU,EACV,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAA;AAMpB,wBAAgB,gBAAgB,CAAC,EAC/B,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,SAAS,EACT,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,EACT,KAAK,EACL,KAAK,EACL,QAAQ,EACR,UAAU,GACX,EAAE;IACD,kBAAkB,EAAE,OAAO,CAAA;IAC3B,qBAAqB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9C,eAAe,EAAE,WAAW,GAAG,SAAS,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC1C,WAAW,EAAE,eAAe,GAAG,SAAS,CAAA;IACxC,oBAAoB,EAAE,OAAO,CAAA;IAC7B,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,iBAAiB,EAAE,qBAAqB,GAAG,SAAS,CAAA;IACpD,oBAAoB,EAAE,OAAO,CAAA;IAC7B,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,iBAAiB,EAAE,yBAAyB,GAAG,SAAS,CAAA;IACxD,kBAAkB,EAAE,OAAO,CAAA;IAC3B,qBAAqB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9C,eAAe,EAAE,mBAAmB,GAAG,SAAS,CAAA;IAChD,SAAS,EAAE,cAAc,EAAE,CAAA;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC,+
|
|
1
|
+
{"version":3,"file":"resources-dialogs.d.ts","sourceRoot":"","sources":["../../../src/resources/admin/resources-dialogs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,yBAAyB,EACzB,UAAU,EACV,UAAU,EACV,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAA;AAMpB,wBAAgB,gBAAgB,CAAC,EAC/B,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,SAAS,EACT,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,EACT,KAAK,EACL,KAAK,EACL,QAAQ,EACR,UAAU,GACX,EAAE;IACD,kBAAkB,EAAE,OAAO,CAAA;IAC3B,qBAAqB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9C,eAAe,EAAE,WAAW,GAAG,SAAS,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC1C,WAAW,EAAE,eAAe,GAAG,SAAS,CAAA;IACxC,oBAAoB,EAAE,OAAO,CAAA;IAC7B,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,iBAAiB,EAAE,qBAAqB,GAAG,SAAS,CAAA;IACpD,oBAAoB,EAAE,OAAO,CAAA;IAC7B,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,iBAAiB,EAAE,yBAAyB,GAAG,SAAS,CAAA;IACxD,kBAAkB,EAAE,OAAO,CAAA;IAC3B,qBAAqB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9C,eAAe,EAAE,mBAAmB,GAAG,SAAS,CAAA;IAChD,SAAS,EAAE,cAAc,EAAE,CAAA;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC,+BA8DA"}
|
|
@@ -13,7 +13,7 @@ export function ResourcesDialogs({ resourceDialogOpen, setResourceDialogOpen, ed
|
|
|
13
13
|
} }), _jsx(ResourceAllocationDialog, { open: allocationDialogOpen, onOpenChange: setAllocationDialogOpen, allocation: editingAllocation, pools: pools, products: products, rules: rules, startTimes: startTimes, onSuccess: () => {
|
|
14
14
|
setAllocationDialogOpen(false);
|
|
15
15
|
void refreshAll();
|
|
16
|
-
} }), _jsx(ResourceSlotAssignmentDialog, { open: assignmentDialogOpen, onOpenChange: setAssignmentDialogOpen, assignment: editingAssignment, slots: slots, pools: pools, resources: resources, bookings: bookings, onSuccess: () => {
|
|
16
|
+
} }), _jsx(ResourceSlotAssignmentDialog, { open: assignmentDialogOpen, onOpenChange: setAssignmentDialogOpen, assignment: editingAssignment, slots: slots, pools: pools, resources: resources, bookings: bookings, products: products, onSuccess: () => {
|
|
17
17
|
setAssignmentDialogOpen(false);
|
|
18
18
|
void refreshAll();
|
|
19
19
|
} }), _jsx(ResourceCloseoutDialog, { open: closeoutDialogOpen, onOpenChange: setCloseoutDialogOpen, closeout: editingCloseout, resources: resources, onSuccess: () => {
|
|
@@ -8,9 +8,10 @@ export interface ResourceAllocationDetailPageProps {
|
|
|
8
8
|
deleting?: boolean;
|
|
9
9
|
onBack?: () => void;
|
|
10
10
|
onDelete?: (allocation: ResourceAllocationDetail) => Promise<void> | void;
|
|
11
|
+
onEdit?: (allocation: ResourceAllocationDetail) => void;
|
|
11
12
|
onOpenPool?: (poolId: string) => void;
|
|
12
13
|
onOpenProduct?: (productId: string) => void;
|
|
13
14
|
confirmAction?: ConfirmAction;
|
|
14
15
|
}
|
|
15
|
-
export declare function ResourceAllocationDetailPage({ className, confirmAction, deleting, id, onBack, onDelete, onOpenPool, onOpenProduct, }: ResourceAllocationDetailPageProps): import("react").JSX.Element;
|
|
16
|
+
export declare function ResourceAllocationDetailPage({ className, confirmAction, deleting, id, onBack, onDelete, onEdit, onOpenPool, onOpenProduct, }: ResourceAllocationDetailPageProps): import("react").JSX.Element;
|
|
16
17
|
//# sourceMappingURL=resource-allocation-detail-page.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-allocation-detail-page.d.ts","sourceRoot":"","sources":["../../../src/resources/components/resource-allocation-detail-page.tsx"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,wBAAwB,EAM9B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,aAAa,EAKnB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAA;AAMjF,OAAO,EAAE,gCAAgC,EAAE,CAAA;AAE3C,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACzE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,SAAS,EACT,aAAa,EACb,QAAQ,EACR,EAAE,EACF,MAAM,EACN,QAAQ,EACR,UAAU,EACV,aAAa,GACd,EAAE,iCAAiC,+
|
|
1
|
+
{"version":3,"file":"resource-allocation-detail-page.d.ts","sourceRoot":"","sources":["../../../src/resources/components/resource-allocation-detail-page.tsx"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,wBAAwB,EAM9B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,aAAa,EAKnB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAA;AAMjF,OAAO,EAAE,gCAAgC,EAAE,CAAA;AAE3C,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACzE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,wBAAwB,KAAK,IAAI,CAAA;IACvD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,SAAS,EACT,aAAa,EACb,QAAQ,EACR,EAAE,EACF,MAAM,EACN,QAAQ,EACR,MAAM,EACN,UAAU,EACV,aAAa,GACd,EAAE,iCAAiC,+BA4HnC"}
|
|
@@ -11,7 +11,7 @@ import { ResourceAllocationDetailSkeleton } from "./resource-detail-skeletons.js
|
|
|
11
11
|
// `pendingComponent` without pinning this page module into the workspace
|
|
12
12
|
// chrome chunk. Re-exported here for backwards compatibility.
|
|
13
13
|
export { ResourceAllocationDetailSkeleton };
|
|
14
|
-
export function ResourceAllocationDetailPage({ className, confirmAction, deleting, id, onBack, onDelete, onOpenPool, onOpenProduct, }) {
|
|
14
|
+
export function ResourceAllocationDetailPage({ className, confirmAction, deleting, id, onBack, onDelete, onEdit, onOpenPool, onOpenProduct, }) {
|
|
15
15
|
const i18n = useResourcesUiI18nOrDefault();
|
|
16
16
|
const m = i18n.messages;
|
|
17
17
|
const page = m.detailPages;
|
|
@@ -40,7 +40,7 @@ export function ResourceAllocationDetailPage({ className, confirmAction, deletin
|
|
|
40
40
|
}
|
|
41
41
|
const rule = rulesQuery.data?.data.find((entry) => entry.id === allocation.availabilityRuleId);
|
|
42
42
|
const startTime = startTimesQuery.data?.data.find((entry) => entry.id === allocation.startTimeId);
|
|
43
|
-
return (_jsxs("div", { "data-slot": "resource-allocation-detail-page", className: cn("flex flex-col gap-6 p-6", className), children: [_jsx(ResourceDetailHeader, { title: page.allocation.pageTitle, deleteConfirmName: allocation.id, deleteConfirmTemplate: page.allocation.deleteConfirm, deleteErrorMessage: page.allocation.deleteFailed, deleting: deleting, confirmAction: confirmAction, onBack: onBack, onDelete: onDelete ? () => onDelete(allocation) : undefined, badges: _jsxs(_Fragment, { children: [_jsx(Badge, { variant: "outline", children: m.common.allocationModeLabels[allocation.allocationMode] }), _jsxs(Badge, { variant: "secondary", children: [page.common.quantity, " ", i18n.formatNumber(allocation.quantityRequired)] })] }), actions: _jsxs(_Fragment, { children: [onOpenPool ? (_jsxs(Button, { type: "button", variant: "outline", onClick: () => onOpenPool(allocation.poolId), children: [_jsx(Wrench, { "data-icon": "inline-start", "aria-hidden": "true" }), page.common.openPool] })) : null, onOpenProduct ? (_jsxs(Button, { type: "button", variant: "outline", onClick: () => onOpenProduct(allocation.productId), children: [_jsx(Package, { "data-icon": "inline-start", "aria-hidden": "true" }), page.common.openProduct] })) : null] }) }), _jsx(ResourceDetailCard, { title: page.allocation.detailsTitle, children: _jsxs("div", { className: "grid gap-3 md:grid-cols-2", children: [_jsx(ResourceDetailField, { label: page.common.pool, children: poolQuery.data?.name ?? allocation.poolId }), _jsx(ResourceDetailField, { label: page.common.product, children: labelById(productsQuery.data?.data ?? [], allocation.productId) ||
|
|
43
|
+
return (_jsxs("div", { "data-slot": "resource-allocation-detail-page", className: cn("flex flex-col gap-6 p-6", className), children: [_jsx(ResourceDetailHeader, { title: page.allocation.pageTitle, deleteConfirmName: allocation.id, deleteConfirmTemplate: page.allocation.deleteConfirm, deleteErrorMessage: page.allocation.deleteFailed, deleting: deleting, confirmAction: confirmAction, onBack: onBack, onDelete: onDelete ? () => onDelete(allocation) : undefined, onEdit: onEdit ? () => onEdit(allocation) : undefined, badges: _jsxs(_Fragment, { children: [_jsx(Badge, { variant: "outline", children: m.common.allocationModeLabels[allocation.allocationMode] }), _jsxs(Badge, { variant: "secondary", children: [page.common.quantity, " ", i18n.formatNumber(allocation.quantityRequired)] })] }), actions: _jsxs(_Fragment, { children: [onOpenPool ? (_jsxs(Button, { type: "button", variant: "outline", onClick: () => onOpenPool(allocation.poolId), children: [_jsx(Wrench, { "data-icon": "inline-start", "aria-hidden": "true" }), page.common.openPool] })) : null, onOpenProduct ? (_jsxs(Button, { type: "button", variant: "outline", onClick: () => onOpenProduct(allocation.productId), children: [_jsx(Package, { "data-icon": "inline-start", "aria-hidden": "true" }), page.common.openProduct] })) : null] }) }), _jsx(ResourceDetailCard, { title: page.allocation.detailsTitle, children: _jsxs("div", { className: "grid gap-3 md:grid-cols-2", children: [_jsx(ResourceDetailField, { label: page.common.pool, children: poolQuery.data?.name ?? allocation.poolId }), _jsx(ResourceDetailField, { label: page.common.product, children: labelById(productsQuery.data?.data ?? [], allocation.productId) ||
|
|
44
44
|
allocation.productId }), _jsx(ResourceDetailField, { label: page.allocation.rule, children: rule?.recurrenceRule ?? allocation.availabilityRuleId ?? page.common.noRule }), _jsx(ResourceDetailField, { label: page.allocation.startTime, children: startTime?.label ??
|
|
45
45
|
startTime?.startTimeLocal ??
|
|
46
46
|
allocation.startTimeId ??
|