Complete basic request dispatch flow
continuous-integration/drone/push Build is passing Details

This commit is contained in:
toqvist 2024-04-07 19:40:38 +02:00
parent 00cf0d9905
commit 9be7ae81ae
11 changed files with 264 additions and 163 deletions

View File

@ -19,6 +19,7 @@
"@radix-ui/react-label": "^2.0.2",
"@radix-ui/react-slot": "^1.0.2",
"@tanstack/react-query": "^5.28.14",
"@tanstack/react-query-devtools": "^5.29.0",
"@types/leaflet": "^1.9.8",
"@types/react": "^18.2.74",
"@types/react-dom": "^18.2.23",
@ -27,6 +28,7 @@
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",
"css-select": "5.1.0",
"human-id": "^4.1.1",
"leaflet": "^1.9.4",
"lucide-react": "^0.364.0",
"react": "^18.2.0",

View File

@ -44,6 +44,7 @@ export interface Maker extends Node {
stock: Product[];
createdAt: string;
updatedAt: string;
admins: User[];
};
export interface Retailer extends Node {
@ -53,16 +54,17 @@ export interface Retailer extends Node {
stock: Product[];
createdAt: string;
updatedAt: string;
admins: User[];
};
const DISPATCH_STATUS = ['requested', 'accepted', 'archived'] as const;
export type DispatchStatus = typeof DISPATCH_STATUS[number];
export interface Dispatch {
id: string;
dispatchesCode?: string; //Human readable id
createdAt: string;
updatedAt: string;
id?: string;
code?: string; //Human readable id
createdAt?: string;
updatedAt?: string;
maker: Maker;
retailer: Retailer;
@ -73,8 +75,19 @@ export interface Dispatch {
timeSensitive: boolean;
status: DispatchStatus;
departureDate: string;
arrivalDate: string;
weightAllowance: number;
departureDate?: string;
arrivalDate?: string;
}
export interface CreateDispatch {
code?: string; //Human readable id
maker: Maker | string;
retailer: Retailer | string;
products: Product[] | string[] ;
courier?: User;
timeSensitive: boolean;
status: DispatchStatus;
}

View File

@ -1,6 +1,8 @@
import { useQuery, useMutation, useQueryClient, queryOptions, QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
import type { ReactNode } from "react";
import { KiosMap } from "@/components/KiosMap"
import { KiosMap } from "@/components/KiosMap";
export const queryClient = new QueryClient({
defaultOptions: {
@ -18,6 +20,7 @@ export const App: React.FC<AppProps> = (props) => {
return (
<div className="app">
<QueryClientProvider client={queryClient}>
<ReactQueryDevtools initialIsOpen={false} />
{props.children}
<KiosMap/>
</QueryClientProvider>

View File

@ -3,13 +3,15 @@ import { MapContainer, TileLayer, Marker, CircleMarker, Popup, Polyline, LayerGr
import 'leaflet/dist/leaflet.css';
import L, { LatLngBounds } from 'leaflet';
import Contacts from './Contacts';
import type { User, Node, Retailer, Maker, Product, Dispatch, DispatchStatus } from '../astroTypes';
import type { User, Node, Retailer, Maker, Product, Dispatch, DispatchStatus, CreateDispatch } from '../astroTypes';
import { useQuery, useMutation, useQueryClient, queryOptions } from "@tanstack/react-query";
import { useGetMakers, useGetDispatches, useGetRetailers, useGetUser, useGetMyself } from "../utils/hooks"
import { useGetMakers, useGetDispatches, useGetRetailers, useGetUser, useGetMyself, API_URL, useGetMyRetailers, useCreateDispatch } from "../utils/hooks"
import { Button, buttonVariants } from './ui/Button';
import { humanId, poolSize, minLength, maxLength } from 'human-id'
import {
Dialog,
DialogContent,
@ -21,7 +23,7 @@ import {
import { LoginForm } from './LoginForm';
import { hasAuthCookie } from '@/utils/authUtils';
//Payload longitude and latitude are mislabeled in payload (lol)
//Payload longitude and latitude are mislabeled/switched in payload
const locationSwitcharoo = (location: number[]) => {
if (location.length === 2) {
const correctedLocation = [location[1], location[0]]
@ -59,13 +61,16 @@ interface NodeSelection {
export const KiosMap = () => {
const [authToken, setAuthToken] = useState('')
const [authToken, setAuthToken] = useState<string>('')
const { data: makers, isLoading: isLoadingMakers } = useGetMakers();
const { data: retailers, isLoading: isLoadingRetailers } = useGetRetailers();
const { data: dispatches, isLoading: isLoadingDispatches } = useGetDispatches();
const { data: myself, isLoading: isLoadingMyself } = useGetMyself(authToken);
const { data: myRetailers, isLoading: isLoadingMyRetailers } = useGetMyRetailers(myself);
const createDispatchMutation = useCreateDispatch();
const [selectedNode, setSelectedNode] = useState<NodeSelection>({ id: "", type: "none" })
@ -88,7 +93,6 @@ export const KiosMap = () => {
const handleSelectNode = (nodeId: string, typeParam: "maker" | "retailer" | "dispatch" | "none") => {
setSelectedNode({ id: nodeId, type: typeParam })
console.log("set id:", nodeId)
}
//params: dispatch: Dispatch, courier: User
@ -96,12 +100,24 @@ export const KiosMap = () => {
}
const handleOpenCatalogue = () => {
}
//params
const handleRequestProduct = () => {
const handleRequestDispatch = (products: Product[], retailer: Retailer, maker: Maker | undefined) => {
if (maker === undefined) {
console.error("Request dispatch error: Marker undefined")
return
}
const dispatch: CreateDispatch = {
code: humanId({
separator: '-',
capitalize: false,
}),
products: products.map((product) => {return product.id}),
maker: maker.id,
retailer: retailer.id,
timeSensitive: false,
status: "requested",
}
console.log(dispatch)
createDispatchMutation.mutate(dispatch)
}
const blackDotIcon = L.divIcon({
@ -131,26 +147,22 @@ export const KiosMap = () => {
width={120}
src="/kios-logo.png"
alt="" />
{(myself && myself.name)
?
<p>Logged in as: {myself.name}</p>
: <p>Logged in</p>
}
{
(!hasAuthCookie() && !authToken) &&
(!hasAuthCookie() && !authToken) ?
<DialogTrigger
className={`px-14 w-6 ${buttonVariants({ variant: "kios" })}`}
className={`px-12 ${buttonVariants({ variant: "kios" })}`}
>
Login
</DialogTrigger>
: myself && <p>Logged in as: {myself?.name}</p>
}
</div>
<DialogContent>
<DialogHeader>
<DialogTitle className="text-4xl text-center">Login</DialogTitle>
<LoginForm setAuthToken={setAuthToken} authToken={authToken}/>
<LoginForm setAuthToken={setAuthToken} authToken={authToken} />
</DialogHeader>
</DialogContent>
</Dialog>
@ -173,7 +185,7 @@ export const KiosMap = () => {
phoneNumber={selectedMaker.phoneNumber}
role={'maker'}
/>
{(selectedMaker.stock !== undefined && selectedMaker.stock.length > 0) &&
{(selectedMaker !== undefined && selectedMaker.stock !== undefined && selectedMaker.stock.length > 0) &&
<Dialog>
<DialogTrigger
className={buttonVariants({ variant: "kios" })}
@ -187,7 +199,7 @@ export const KiosMap = () => {
<ul className='flex flex-col gap-4'>
{selectedMaker.stock.map((product, i) => {
return (
<li className="flex flex-row gap-4">
<li className="flex flex-row gap-4" key={product.id}>
{product.picture.url &&
<img
width={160}
@ -202,13 +214,24 @@ export const KiosMap = () => {
<p className='text-black text-lg'
>Weight: {product.weight}</p>
}
<Button
variant={'kios'}
className='w-full mt-6'
onClick={() => handleRequestProduct()}
>
Request product
</Button>
{myself ?
(myRetailers !== undefined) &&
<ul>
{myRetailers.map((retailer, i) => {
return (
<li key={retailer.id}>
<Button
variant="kios"
onClick={() => handleRequestDispatch([product], retailer, selectedMaker)}
>
Request product to {retailer.name}
</Button>
</li>
)
})}
</ul>
: <Button disabled>Login to request</Button>
}
</div>
</li>
)
@ -240,7 +263,7 @@ export const KiosMap = () => {
</h2>
{selectedDispatch.products.map((product, i) => {
return (
<div className='flex flex-row items-center gap-4'>
<div className='flex flex-row items-center gap-4' key={product.id}>
<img
src={product.picture.url}
alt={product.picture.alt}
@ -269,7 +292,6 @@ export const KiosMap = () => {
/>
{selectedDispatch.courier !== undefined ? (
<Contacts
name={selectedDispatch.courier.name}
email={selectedDispatch.courier.email}

View File

@ -15,8 +15,7 @@ import {
import { Input } from "@/components/ui/input"
import axios from "axios";
import { setAuthCookie } from "@/utils/authUtils"
const API_URL = "http://localhost:3001";
import { API_URL } from "@/utils/hooks"
const headers = {
"Content-Type": "application/json",

View File

@ -9,7 +9,7 @@ const buttonVariants = cva(
{
variants: {
variant: {
kios: "text-black border-2 border-gray-950 py-2 px-4 w-full hover:bg-gray-950 transition-all hover:text-white hover:font-bold rounded-none",
kios: "text-black border-2 border-gray-950 py-2 px-4 hover:bg-gray-950 transition-all hover:text-white hover:font-bold rounded-none",
default: "bg-primary text-primary-foreground hover:bg-primary/90",
destructive:
"bg-destructive text-destructive-foreground hover:bg-destructive/90",

View File

@ -54,10 +54,13 @@ export interface Dispatch {
id: string;
code: string;
products: string[] | Product[];
courier?: string | Courier;
courier?: string | User;
maker: string | Maker;
retailer: string | Retailer;
status: 'requested' | 'accepted' | 'archived';
departure?: string;
arrival?: string;
timeSensitive?: boolean;
updatedAt: string;
createdAt: string;
}

View File

@ -1,21 +1,20 @@
import type { User, Node, Retailer, Maker, Product, Dispatch } from '../astroTypes';
import type { User, Node, Retailer, Maker, Product, Dispatch, CreateDispatch } from '../astroTypes';
import { useQuery, useMutation, useQueryClient, queryOptions } from "@tanstack/react-query";
import axios from "axios";
import { hasAuthCookie } from './authUtils';
import { queryClient } from '@/components/App';
const API_URL = "http://localhost:3001"
export const API_URL = "http://localhost:3001"
const nonAuthHeaders = {
const headers = {
"Content-Type": "application/json",
}
const getMakers = async () => {
const url = `${API_URL}/api/makers`
console.log("Fetching url:", url)
const response = await axios.get(url);
const makers: Maker[] = response.data.docs;
console.log(`Fetch result from ${url}`, makers)
return makers;
}
@ -30,11 +29,9 @@ export const useGetMakers = () => {
const getRetailers = async () => {
const url = `${API_URL}/api/retailers`
console.log("Fetching url:", url)
const response = await axios.get(url);
const retailers: Retailer[] = response.data.docs;
console.log(`Fetch result from ${url}`, retailers)
return retailers;
}
@ -49,11 +46,9 @@ export const useGetRetailers = () => {
const getUser = async (userId: string) => {
const url = `${API_URL}/api/users/${userId}`
console.log("Fetching url:", url)
const response = await axios.get(url);
const user: User = response.data.docs;
console.log(`Fetch result from ${url}`, user)
return user;
}
@ -68,7 +63,6 @@ export const useGetUser = (userId: string) => {
const getMyself = async (authToken: string) => {
const url = `${API_URL}/api/users/me`
console.log("Fetching url:", url)
const authHeaders = {
"Content-Type": "application/json",
@ -81,8 +75,7 @@ const getMyself = async (authToken: string) => {
headers: authHeaders
});
const user: User = response.data
console.log(`Fetch result from ${url}`, user)
const user: User = response.data.user
return user;
}
@ -97,12 +90,9 @@ export const useGetMyself = (authToken: string) => {
const getDispatches = async () => {
const url = `${API_URL}/api/dispatches`
console.log("Fetching url:", url)
const response = await axios.get(url);
const dispatches: Dispatch[] = response.data.docs;
console.log(`Fetch result from ${url}`, dispatches)
return dispatches;
}
@ -113,4 +103,58 @@ export const useGetDispatches = () => {
queryKey: ['dispatches'],
enabled: true
})
}
const createDispatch = async (dispatch: CreateDispatch) => {
const url = `${API_URL}/api/dispatches`;
return await axios.post(url, dispatch);
};
export const useCreateDispatch = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (dispatch: CreateDispatch) => createDispatch(dispatch),
onSuccess: () => {
void queryClient.invalidateQueries({ queryKey: ['dispatches'] });
},
mutationKey: ["createDispatch"]
})
};
const getRetailersByAdminId = async (user: User | undefined) => {
if(user === undefined) {
console.error("getMyRetailers error: user undefined")
return []
}
const adminId = user.id
const url = `${API_URL}/api/retailers`
const response = await axios.get(url);
const retailers: Retailer[] = response.data.docs;
let myRetailers: Retailer[] = []
for (let retailer of retailers) {
console.log(retailer)
if(retailer.admins) {
for (let admin of retailer.admins) {
console.log(admin)
if(admin.id === adminId) {
myRetailers.push(retailer)
}
}
}
}
console.log("myRetailers:", myRetailers)
return myRetailers;
}
export const useGetMyRetailers = (user: User | undefined) => {
return useQuery<Retailer[]>({
queryFn: () => getRetailersByAdminId(user),
queryKey: ['myRetailers'],
enabled: (user !== undefined)
})
}

View File

@ -814,80 +814,80 @@
resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-2.1.0.tgz#383acd31259d7c9ae8fb1b02d5e18fe613c2a13d"
integrity sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==
"@rollup/rollup-android-arm-eabi@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.0.tgz#57936f50d0335e2e7bfac496d209606fa516add4"
integrity sha512-jwXtxYbRt1V+CdQSy6Z+uZti7JF5irRKF8hlKfEnF/xJpcNGuuiZMBvuoYM+x9sr9iWGnzrlM0+9hvQ1kgkf1w==
"@rollup/rollup-android-arm-eabi@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.1.tgz#ca0501dd836894216cb9572848c5dde4bfca3bec"
integrity sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==
"@rollup/rollup-android-arm64@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.0.tgz#81bba83b37382a2d0e30ceced06c8d3d85138054"
integrity sha512-fI9nduZhCccjzlsA/OuAwtFGWocxA4gqXGTLvOyiF8d+8o0fZUeSztixkYjcGq1fGZY3Tkq4yRvHPFxU+jdZ9Q==
"@rollup/rollup-android-arm64@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.1.tgz#154ca7e4f815d2e442ffc62ee7f64aee8b2547b0"
integrity sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==
"@rollup/rollup-darwin-arm64@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.0.tgz#a371bd723a5c4c4a33376da72abfc3938066842b"
integrity sha512-BcnSPRM76/cD2gQC+rQNGBN6GStBs2pl/FpweW8JYuz5J/IEa0Fr4AtrPv766DB/6b2MZ/AfSIOSGw3nEIP8SA==
"@rollup/rollup-darwin-arm64@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.1.tgz#02b522ab6ccc2c504634651985ff8e657b42c055"
integrity sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==
"@rollup/rollup-darwin-x64@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.0.tgz#8baf2fda277c9729125017c65651296282412886"
integrity sha512-LDyFB9GRolGN7XI6955aFeI3wCdCUszFWumWU0deHA8VpR3nWRrjG6GtGjBrQxQKFevnUTHKCfPR4IvrW3kCgQ==
"@rollup/rollup-darwin-x64@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.1.tgz#217737f9f73de729fdfd7d529afebb6c8283f554"
integrity sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==
"@rollup/rollup-linux-arm-gnueabihf@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.0.tgz#822830a8f7388d5b81d04c69415408d3bab1079b"
integrity sha512-ygrGVhQP47mRh0AAD0zl6QqCbNsf0eTo+vgwkY6LunBcg0f2Jv365GXlDUECIyoXp1kKwL5WW6rsO429DBY/bA==
"@rollup/rollup-linux-arm-gnueabihf@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.1.tgz#a87e478ab3f697c7f4e74c8b1cac1e0667f8f4be"
integrity sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==
"@rollup/rollup-linux-arm64-gnu@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.0.tgz#e20fbe1bd4414c7119f9e0bba8ad17a6666c8365"
integrity sha512-x+uJ6MAYRlHGe9wi4HQjxpaKHPM3d3JjqqCkeC5gpnnI6OWovLdXTpfa8trjxPLnWKyBsSi5kne+146GAxFt4A==
"@rollup/rollup-linux-arm64-gnu@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.1.tgz#4da6830eca27e5f4ca15f9197e5660952ca185c6"
integrity sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==
"@rollup/rollup-linux-arm64-musl@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.0.tgz#13f475596a62e1924f13fe1c8cf2c40e09a99b47"
integrity sha512-nrRw8ZTQKg6+Lttwqo6a2VxR9tOroa2m91XbdQ2sUUzHoedXlsyvY1fN4xWdqz8PKmf4orDwejxXHjh7YBGUCA==
"@rollup/rollup-linux-arm64-musl@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.1.tgz#0b0ed35720aebc8f5e501d370a9ea0f686ead1e0"
integrity sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==
"@rollup/rollup-linux-powerpc64le-gnu@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.0.tgz#6a431c441420d1c510a205e08c6673355a0a2ea9"
integrity sha512-xV0d5jDb4aFu84XKr+lcUJ9y3qpIWhttO3Qev97z8DKLXR62LC3cXT/bMZXrjLF9X+P5oSmJTzAhqwUbY96PnA==
"@rollup/rollup-linux-powerpc64le-gnu@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.1.tgz#024ad04d162726f25e62915851f7df69a9677c17"
integrity sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==
"@rollup/rollup-linux-riscv64-gnu@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.0.tgz#53d9448962c3f9ed7a1672269655476ea2d67567"
integrity sha512-SDDhBQwZX6LPRoPYjAZWyL27LbcBo7WdBFWJi5PI9RPCzU8ijzkQn7tt8NXiXRiFMJCVpkuMkBf4OxSxVMizAw==
"@rollup/rollup-linux-riscv64-gnu@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.1.tgz#180694d1cd069ddbe22022bb5b1bead3b7de581c"
integrity sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==
"@rollup/rollup-linux-s390x-gnu@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.0.tgz#95f0c133b324da3e7e5c7d12855e0eb71d21a946"
integrity sha512-RxB/qez8zIDshNJDufYlTT0ZTVut5eCpAZ3bdXDU9yTxBzui3KhbGjROK2OYTTor7alM7XBhssgoO3CZ0XD3qA==
"@rollup/rollup-linux-s390x-gnu@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.1.tgz#f7b4e2b0ca49be4e34f9ef0b548c926d94edee87"
integrity sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==
"@rollup/rollup-linux-x64-gnu@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.0.tgz#820ada75c68ead1acc486e41238ca0d8f8531478"
integrity sha512-C6y6z2eCNCfhZxT9u+jAM2Fup89ZjiG5pIzZIDycs1IwESviLxwkQcFRGLjnDrP+PT+v5i4YFvlcfAs+LnreXg==
"@rollup/rollup-linux-x64-gnu@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.1.tgz#0aaf79e5b9ccf7db3084fe6c3f2d2873a27d5af4"
integrity sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==
"@rollup/rollup-linux-x64-musl@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.0.tgz#ca74f22e125efbe94c1148d989ef93329b464443"
integrity sha512-i0QwbHYfnOMYsBEyjxcwGu5SMIi9sImDVjDg087hpzXqhBSosxkE7gyIYFHgfFl4mr7RrXksIBZ4DoLoP4FhJg==
"@rollup/rollup-linux-x64-musl@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.1.tgz#38f0a37ca5015eb07dff86a1b6f94279c179f4ed"
integrity sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==
"@rollup/rollup-win32-arm64-msvc@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.0.tgz#269023332297051d037a9593dcba92c10fef726b"
integrity sha512-Fq52EYb0riNHLBTAcL0cun+rRwyZ10S9vKzhGKKgeD+XbwunszSY0rVMco5KbOsTlwovP2rTOkiII/fQ4ih/zQ==
"@rollup/rollup-win32-arm64-msvc@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.1.tgz#84d48c55740ede42c77373f76e85f368633a0cc3"
integrity sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==
"@rollup/rollup-win32-ia32-msvc@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.0.tgz#d7701438daf964011fd7ca33e3f13f3ff5129e7b"
integrity sha512-e/PBHxPdJ00O9p5Ui43+vixSgVf4NlLsmV6QneGERJ3lnjIua/kim6PRFe3iDueT1rQcgSkYP8ZBBXa/h4iPvw==
"@rollup/rollup-win32-ia32-msvc@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.1.tgz#c1e0bc39e20e760f0a526ddf14ae0543af796605"
integrity sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==
"@rollup/rollup-win32-x64-msvc@4.14.0":
version "4.14.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.0.tgz#0bb7ac3cd1c3292db1f39afdabfd03ccea3a3d34"
integrity sha512-aGg7iToJjdklmxlUlJh/PaPNa4PmqHfyRMLunbL3eaMO0gp656+q1zOKkpJ/CVe9CryJv6tAN1HDoR8cNGzkag==
"@rollup/rollup-win32-x64-msvc@4.14.1":
version "4.14.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.1.tgz#299eee74b7d87e116083ac5b1ce8dd9434668294"
integrity sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==
"@shikijs/core@1.2.4":
version "1.2.4"
@ -899,6 +899,18 @@
resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.29.0.tgz#d0b3d12c07d5a47f42ab0c1ed4f317106f3d4b20"
integrity sha512-WgPTRs58hm9CMzEr5jpISe8HXa3qKQ8CxewdYZeVnA54JrPY9B1CZiwsCoLpLkf0dGRZq+LcX5OiJb0bEsOFww==
"@tanstack/query-devtools@5.28.10":
version "5.28.10"
resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.28.10.tgz#33e9a42dd2199fca12f0dd2d891570ecdbfd3c7b"
integrity sha512-5UN629fKa5/1K/2Pd26gaU7epxRrYiT1gy+V+pW5K6hnf1DeUKK3pANSb2eHKlecjIKIhTwyF7k9XdyE2gREvQ==
"@tanstack/react-query-devtools@^5.29.0":
version "5.29.0"
resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.29.0.tgz#fde50304cc777c9bc8ad3f2f8afcd62412636984"
integrity sha512-WLuaU6yM4KdvBimEP1Km5lM4/p1J40cMp5I5z0Mc6a8QbBUYLK8qJcGIKelfLfDp7KmEcr59tzbRTmdH/GWvzQ==
dependencies:
"@tanstack/query-devtools" "5.28.10"
"@tanstack/react-query@^5.28.14":
version "5.29.0"
resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.29.0.tgz#42b3a2de4ed1d63666f0af04392a34b5e70d49c0"
@ -2462,6 +2474,11 @@ http-cache-semantics@^4.1.1:
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
human-id@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/human-id/-/human-id-4.1.1.tgz#2801fbd61b9a5c1c9170f332802db6408a39a4b0"
integrity sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==
human-signals@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
@ -3626,9 +3643,9 @@ path-scurry@^1.10.2:
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
path-to-regexp@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5"
integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==
version "6.2.2"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.2.tgz#324377a83e5049cbecadc5554d6a63a9a4866b36"
integrity sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==
picocolors@^1.0.0:
version "1.0.0"
@ -4087,27 +4104,27 @@ reusify@^1.0.4:
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rollup@^4.13.0:
version "4.14.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.14.0.tgz#c3e2cd479f1b2358b65c1f810fa05b51603d7be8"
integrity sha512-Qe7w62TyawbDzB4yt32R0+AbIo6m1/sqO7UPzFS8Z/ksL5mrfhA0v4CavfdmFav3D+ub4QeAgsGEe84DoWe/nQ==
version "4.14.1"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.14.1.tgz#228d5159c3f4d8745bd24819d734bc6c6ca87c09"
integrity sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==
dependencies:
"@types/estree" "1.0.5"
optionalDependencies:
"@rollup/rollup-android-arm-eabi" "4.14.0"
"@rollup/rollup-android-arm64" "4.14.0"
"@rollup/rollup-darwin-arm64" "4.14.0"
"@rollup/rollup-darwin-x64" "4.14.0"
"@rollup/rollup-linux-arm-gnueabihf" "4.14.0"
"@rollup/rollup-linux-arm64-gnu" "4.14.0"
"@rollup/rollup-linux-arm64-musl" "4.14.0"
"@rollup/rollup-linux-powerpc64le-gnu" "4.14.0"
"@rollup/rollup-linux-riscv64-gnu" "4.14.0"
"@rollup/rollup-linux-s390x-gnu" "4.14.0"
"@rollup/rollup-linux-x64-gnu" "4.14.0"
"@rollup/rollup-linux-x64-musl" "4.14.0"
"@rollup/rollup-win32-arm64-msvc" "4.14.0"
"@rollup/rollup-win32-ia32-msvc" "4.14.0"
"@rollup/rollup-win32-x64-msvc" "4.14.0"
"@rollup/rollup-android-arm-eabi" "4.14.1"
"@rollup/rollup-android-arm64" "4.14.1"
"@rollup/rollup-darwin-arm64" "4.14.1"
"@rollup/rollup-darwin-x64" "4.14.1"
"@rollup/rollup-linux-arm-gnueabihf" "4.14.1"
"@rollup/rollup-linux-arm64-gnu" "4.14.1"
"@rollup/rollup-linux-arm64-musl" "4.14.1"
"@rollup/rollup-linux-powerpc64le-gnu" "4.14.1"
"@rollup/rollup-linux-riscv64-gnu" "4.14.1"
"@rollup/rollup-linux-s390x-gnu" "4.14.1"
"@rollup/rollup-linux-x64-gnu" "4.14.1"
"@rollup/rollup-linux-x64-musl" "4.14.1"
"@rollup/rollup-win32-arm64-msvc" "4.14.1"
"@rollup/rollup-win32-ia32-msvc" "4.14.1"
"@rollup/rollup-win32-x64-msvc" "4.14.1"
fsevents "~2.3.2"
run-parallel@^1.1.9:

View File

@ -7,7 +7,9 @@ const Dispatches: CollectionConfig = {
},
access: {
read: () => true,
create: () => true
},
fields: [
{
name: 'code',
@ -27,7 +29,7 @@ const Dispatches: CollectionConfig = {
{
name: 'courier',
type: 'relationship',
relationTo: 'couriers',
relationTo: 'users',
hasMany: false,
required: false
},
@ -64,28 +66,24 @@ const Dispatches: CollectionConfig = {
value: 'archived',
},
],
}
},
{
name: 'departure',
type: 'date',
required: false,
},
{
name: 'arrival',
type: 'date',
required: false,
},
{
name: 'timeSensitive',
type: 'checkbox',
required: false,
defaultValue: false
},
],
};
export default Dispatches;
// type Dispatch = {
// id: string;
// dispatchesCode: string; //Human readable id
// createdAt: string;
// updatedAt: string;
// maker: Maker;
// retailer: Retailer;
// products: Product[];
// courier: User;
// timeSensitive: boolean;
// status: DispatchStatus[];
// departureDate: string;
// arrivalDate: string;
// weightAllowance: number;
// }
export default Dispatches;

View File

@ -6,7 +6,7 @@ const Users: CollectionConfig = {
useAsTitle: 'email',
},
access: {
read: () => true
},
auth: {
tokenExpiration: 7200, // How many seconds to keep the user logged in