@voyantjs/resources-react 0.1.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.
Files changed (74) hide show
  1. package/README.md +36 -0
  2. package/dist/client.d.ts +14 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +59 -0
  5. package/dist/constants.d.ts +44 -0
  6. package/dist/constants.d.ts.map +1 -0
  7. package/dist/constants.js +20 -0
  8. package/dist/hooks/index.d.ts +31 -0
  9. package/dist/hooks/index.d.ts.map +1 -0
  10. package/dist/hooks/index.js +15 -0
  11. package/dist/hooks/use-allocation.d.ts +16 -0
  12. package/dist/hooks/use-allocation.d.ts.map +1 -0
  13. package/dist/hooks/use-allocation.js +12 -0
  14. package/dist/hooks/use-allocations.d.ts +20 -0
  15. package/dist/hooks/use-allocations.d.ts.map +1 -0
  16. package/dist/hooks/use-allocations.js +12 -0
  17. package/dist/hooks/use-assignment.d.ts +17 -0
  18. package/dist/hooks/use-assignment.d.ts.map +1 -0
  19. package/dist/hooks/use-assignment.js +12 -0
  20. package/dist/hooks/use-assignments.d.ts +21 -0
  21. package/dist/hooks/use-assignments.d.ts.map +1 -0
  22. package/dist/hooks/use-assignments.js +12 -0
  23. package/dist/hooks/use-bookings.d.ts +14 -0
  24. package/dist/hooks/use-bookings.d.ts.map +1 -0
  25. package/dist/hooks/use-bookings.js +12 -0
  26. package/dist/hooks/use-closeouts.d.ts +19 -0
  27. package/dist/hooks/use-closeouts.d.ts.map +1 -0
  28. package/dist/hooks/use-closeouts.js +12 -0
  29. package/dist/hooks/use-pool.d.ts +15 -0
  30. package/dist/hooks/use-pool.d.ts.map +1 -0
  31. package/dist/hooks/use-pool.js +12 -0
  32. package/dist/hooks/use-pools.d.ts +19 -0
  33. package/dist/hooks/use-pools.d.ts.map +1 -0
  34. package/dist/hooks/use-pools.js +12 -0
  35. package/dist/hooks/use-products.d.ts +14 -0
  36. package/dist/hooks/use-products.d.ts.map +1 -0
  37. package/dist/hooks/use-products.js +12 -0
  38. package/dist/hooks/use-resource.d.ts +16 -0
  39. package/dist/hooks/use-resource.d.ts.map +1 -0
  40. package/dist/hooks/use-resource.js +12 -0
  41. package/dist/hooks/use-resources.d.ts +20 -0
  42. package/dist/hooks/use-resources.d.ts.map +1 -0
  43. package/dist/hooks/use-resources.js +12 -0
  44. package/dist/hooks/use-rules.d.ts +15 -0
  45. package/dist/hooks/use-rules.d.ts.map +1 -0
  46. package/dist/hooks/use-rules.js +12 -0
  47. package/dist/hooks/use-slots.d.ts +16 -0
  48. package/dist/hooks/use-slots.d.ts.map +1 -0
  49. package/dist/hooks/use-slots.js +12 -0
  50. package/dist/hooks/use-start-times.d.ts +16 -0
  51. package/dist/hooks/use-start-times.d.ts.map +1 -0
  52. package/dist/hooks/use-start-times.js +12 -0
  53. package/dist/hooks/use-suppliers.d.ts +14 -0
  54. package/dist/hooks/use-suppliers.d.ts.map +1 -0
  55. package/dist/hooks/use-suppliers.js +12 -0
  56. package/dist/index.d.ts +9 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +8 -0
  59. package/dist/provider.d.ts +2 -0
  60. package/dist/provider.d.ts.map +1 -0
  61. package/dist/provider.js +1 -0
  62. package/dist/query-keys.d.ts +73 -0
  63. package/dist/query-keys.d.ts.map +1 -0
  64. package/dist/query-keys.js +29 -0
  65. package/dist/query-options.d.ts +801 -0
  66. package/dist/query-options.d.ts.map +1 -0
  67. package/dist/query-options.js +237 -0
  68. package/dist/schemas.d.ts +452 -0
  69. package/dist/schemas.d.ts.map +1 -0
  70. package/dist/schemas.js +126 -0
  71. package/dist/utils.d.ts +14 -0
  72. package/dist/utils.d.ts.map +1 -0
  73. package/dist/utils.js +33 -0
  74. package/package.json +79 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import { z } from "zod";
2
+ export const paginatedEnvelope = (item) => z.object({
3
+ data: z.array(item),
4
+ total: z.number().int(),
5
+ limit: z.number().int(),
6
+ offset: z.number().int(),
7
+ });
8
+ export const singleEnvelope = (item) => z.object({ data: item });
9
+ export const supplierOptionSchema = z.object({
10
+ id: z.string(),
11
+ name: z.string(),
12
+ });
13
+ export const productOptionSchema = z.object({
14
+ id: z.string(),
15
+ name: z.string(),
16
+ });
17
+ export const bookingOptionSchema = z.object({
18
+ id: z.string(),
19
+ bookingNumber: z.string(),
20
+ });
21
+ export const slotOptionSchema = z.object({
22
+ id: z.string(),
23
+ productId: z.string(),
24
+ dateLocal: z.string(),
25
+ startsAt: z.string(),
26
+ });
27
+ export const ruleOptionSchema = z.object({
28
+ id: z.string(),
29
+ productId: z.string(),
30
+ recurrenceRule: z.string(),
31
+ });
32
+ export const startTimeOptionSchema = z.object({
33
+ id: z.string(),
34
+ productId: z.string(),
35
+ label: z.string().nullable(),
36
+ startTimeLocal: z.string(),
37
+ });
38
+ export const resourceKindSchema = z.enum(["guide", "vehicle", "room", "boat", "equipment", "other"]);
39
+ export const resourceStatusSchema = z.enum([
40
+ "reserved",
41
+ "assigned",
42
+ "released",
43
+ "cancelled",
44
+ "completed",
45
+ ]);
46
+ export const allocationModeSchema = z.enum(["shared", "exclusive"]);
47
+ export const resourceRecordSchema = z.object({
48
+ id: z.string(),
49
+ supplierId: z.string().nullable(),
50
+ kind: resourceKindSchema,
51
+ name: z.string(),
52
+ code: z.string().nullable(),
53
+ capacity: z.number().int().nullable(),
54
+ active: z.boolean(),
55
+ notes: z.string().nullable(),
56
+ });
57
+ export const resourceDetailSchema = resourceRecordSchema.extend({
58
+ createdAt: z.string(),
59
+ updatedAt: z.string(),
60
+ });
61
+ export const resourcePoolRecordSchema = z.object({
62
+ id: z.string(),
63
+ productId: z.string().nullable(),
64
+ kind: resourceKindSchema,
65
+ name: z.string(),
66
+ sharedCapacity: z.number().int().nullable(),
67
+ active: z.boolean(),
68
+ notes: z.string().nullable(),
69
+ });
70
+ export const resourcePoolDetailSchema = resourcePoolRecordSchema.extend({
71
+ createdAt: z.string(),
72
+ updatedAt: z.string(),
73
+ });
74
+ export const resourceAllocationRecordSchema = z.object({
75
+ id: z.string(),
76
+ poolId: z.string(),
77
+ productId: z.string(),
78
+ availabilityRuleId: z.string().nullable(),
79
+ startTimeId: z.string().nullable(),
80
+ quantityRequired: z.number().int(),
81
+ allocationMode: allocationModeSchema,
82
+ priority: z.number().int(),
83
+ });
84
+ export const resourceAllocationDetailSchema = resourceAllocationRecordSchema.extend({
85
+ createdAt: z.string(),
86
+ updatedAt: z.string(),
87
+ });
88
+ export const resourceSlotAssignmentRecordSchema = z.object({
89
+ id: z.string(),
90
+ slotId: z.string(),
91
+ poolId: z.string().nullable(),
92
+ resourceId: z.string().nullable(),
93
+ bookingId: z.string().nullable(),
94
+ status: resourceStatusSchema,
95
+ assignedBy: z.string().nullable(),
96
+ releasedAt: z.string().nullable(),
97
+ notes: z.string().nullable(),
98
+ });
99
+ export const resourceSlotAssignmentDetailSchema = resourceSlotAssignmentRecordSchema.extend({
100
+ createdAt: z.string(),
101
+ updatedAt: z.string(),
102
+ });
103
+ export const resourceCloseoutRecordSchema = z.object({
104
+ id: z.string(),
105
+ resourceId: z.string(),
106
+ dateLocal: z.string(),
107
+ startsAt: z.string().nullable(),
108
+ endsAt: z.string().nullable(),
109
+ reason: z.string().nullable(),
110
+ createdBy: z.string().nullable(),
111
+ });
112
+ export const supplierListResponse = paginatedEnvelope(supplierOptionSchema);
113
+ export const productListResponse = paginatedEnvelope(productOptionSchema);
114
+ export const bookingListResponse = paginatedEnvelope(bookingOptionSchema);
115
+ export const slotListResponse = paginatedEnvelope(slotOptionSchema);
116
+ export const ruleListResponse = paginatedEnvelope(ruleOptionSchema);
117
+ export const startTimeListResponse = paginatedEnvelope(startTimeOptionSchema);
118
+ export const resourceListResponse = paginatedEnvelope(resourceRecordSchema);
119
+ export const resourcePoolListResponse = paginatedEnvelope(resourcePoolRecordSchema);
120
+ export const resourceAllocationListResponse = paginatedEnvelope(resourceAllocationRecordSchema);
121
+ export const resourceSlotAssignmentListResponse = paginatedEnvelope(resourceSlotAssignmentRecordSchema);
122
+ export const resourceCloseoutListResponse = paginatedEnvelope(resourceCloseoutRecordSchema);
123
+ export const resourceSingleResponse = singleEnvelope(resourceDetailSchema);
124
+ export const resourcePoolSingleResponse = singleEnvelope(resourcePoolDetailSchema);
125
+ export const resourceAllocationSingleResponse = singleEnvelope(resourceAllocationDetailSchema);
126
+ export const resourceSlotAssignmentSingleResponse = singleEnvelope(resourceSlotAssignmentDetailSchema);
@@ -0,0 +1,14 @@
1
+ import type { SlotOption } from "./schemas.js";
2
+ export declare function nullableString(value: string | null | undefined): string | null;
3
+ export declare function nullableNumber(value: string | null | undefined): number | null;
4
+ export declare function toLocalDateTimeInput(value: string | null | undefined): string;
5
+ export declare function toIsoDateTime(value: string | null | undefined): string | null;
6
+ export declare function formatDateTime(value: string | null): string;
7
+ export declare function labelById(options: Array<{
8
+ id: string;
9
+ name?: string;
10
+ bookingNumber?: string;
11
+ }>, id: string | null): string;
12
+ export declare function slotLabel(slot: SlotOption): string;
13
+ export declare function formatSelectionLabel(count: number, singular: string, plural?: string): string;
14
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,iBAG9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,iBAG9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,UAGpE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,iBAG7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,UAElD;AAED,wBAAgB,SAAS,CACvB,OAAO,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACrE,EAAE,EAAE,MAAM,GAAG,IAAI,UAKlB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,UAEzC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAiB,UAE5F"}
package/dist/utils.js ADDED
@@ -0,0 +1,33 @@
1
+ export function nullableString(value) {
2
+ const trimmed = value?.trim() ?? "";
3
+ return trimmed ? trimmed : null;
4
+ }
5
+ export function nullableNumber(value) {
6
+ const trimmed = value?.trim() ?? "";
7
+ return trimmed ? Number(trimmed) : null;
8
+ }
9
+ export function toLocalDateTimeInput(value) {
10
+ if (!value)
11
+ return "";
12
+ return value.slice(0, 16);
13
+ }
14
+ export function toIsoDateTime(value) {
15
+ if (!value)
16
+ return null;
17
+ return new Date(value).toISOString();
18
+ }
19
+ export function formatDateTime(value) {
20
+ return value ? value.replace("T", " ").slice(0, 16) : "-";
21
+ }
22
+ export function labelById(options, id) {
23
+ if (!id)
24
+ return "-";
25
+ const match = options.find((option) => option.id === id);
26
+ return match?.name ?? match?.bookingNumber ?? id;
27
+ }
28
+ export function slotLabel(slot) {
29
+ return `${slot.dateLocal} · ${formatDateTime(slot.startsAt)}`;
30
+ }
31
+ export function formatSelectionLabel(count, singular, plural = `${singular}s`) {
32
+ return `${count} ${count === 1 ? singular : plural}`;
33
+ }
package/package.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "@voyantjs/resources-react",
3
+ "version": "0.1.0",
4
+ "license": "FSL-1.1-Apache-2.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/voyantjs/voyant.git",
8
+ "directory": "packages/resources-react"
9
+ },
10
+ "type": "module",
11
+ "exports": {
12
+ ".": "./src/index.ts",
13
+ "./provider": "./src/provider.tsx",
14
+ "./hooks": "./src/hooks/index.ts",
15
+ "./client": "./src/client.ts",
16
+ "./query-keys": "./src/query-keys.ts"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc -p tsconfig.json",
20
+ "clean": "rm -rf dist",
21
+ "prepack": "pnpm run build",
22
+ "typecheck": "tsc --noEmit",
23
+ "lint": "biome check src/",
24
+ "test": "vitest run --passWithNoTests"
25
+ },
26
+ "peerDependencies": {
27
+ "@voyantjs/resources": "workspace:*",
28
+ "@tanstack/react-query": "^5.0.0",
29
+ "react": "^19.0.0",
30
+ "react-dom": "^19.0.0",
31
+ "zod": "^4.0.0"
32
+ },
33
+ "devDependencies": {
34
+ "@voyantjs/react": "workspace:*",
35
+ "@voyantjs/resources": "workspace:*",
36
+ "@voyantjs/voyant-typescript-config": "workspace:*",
37
+ "@tanstack/react-query": "^5.96.2",
38
+ "@types/react": "^19.2.14",
39
+ "@types/react-dom": "^19.2.3",
40
+ "react": "^19.2.4",
41
+ "react-dom": "^19.2.4",
42
+ "typescript": "^6.0.2",
43
+ "vitest": "^4.1.2",
44
+ "zod": "^4.3.6"
45
+ },
46
+ "dependencies": {
47
+ "@voyantjs/react": "workspace:*"
48
+ },
49
+ "files": [
50
+ "dist"
51
+ ],
52
+ "publishConfig": {
53
+ "access": "public",
54
+ "exports": {
55
+ ".": {
56
+ "types": "./dist/index.d.ts",
57
+ "import": "./dist/index.js"
58
+ },
59
+ "./provider": {
60
+ "types": "./dist/provider.d.ts",
61
+ "import": "./dist/provider.js"
62
+ },
63
+ "./hooks": {
64
+ "types": "./dist/hooks/index.d.ts",
65
+ "import": "./dist/hooks/index.js"
66
+ },
67
+ "./client": {
68
+ "types": "./dist/client.d.ts",
69
+ "import": "./dist/client.js"
70
+ },
71
+ "./query-keys": {
72
+ "types": "./dist/query-keys.d.ts",
73
+ "import": "./dist/query-keys.js"
74
+ }
75
+ },
76
+ "main": "./dist/index.js",
77
+ "types": "./dist/index.d.ts"
78
+ }
79
+ }