Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • icat/data-portal
1 result
Show changes
Commits on Source (2)
......@@ -18,7 +18,7 @@
"dependencies": {
"@babel/eslint-parser": "^7.25.1",
"@edata-portal/core": "workspace:*",
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/react-fontawesome": "^0.2.2",
......
......@@ -19,7 +19,7 @@
"dependencies": {
"@babel/eslint-parser": "^7.25.1",
"@edata-portal/core": "workspace:*",
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/react-fontawesome": "^0.2.2",
......
......@@ -18,7 +18,7 @@
"dependencies": {
"@babel/eslint-parser": "^7.25.1",
"@edata-portal/core": "workspace:*",
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/react-fontawesome": "^0.2.2",
......
......@@ -18,7 +18,7 @@
"dependencies": {
"@babel/eslint-parser": "^7.25.1",
"@edata-portal/core": "workspace:*",
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/react-fontawesome": "^0.2.2",
......
import { faBoxOpen } from '@fortawesome/free-solid-svg-icons';
import { faBoxOpen, faDownload } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import type { CellContext, ColumnDef } from '@tanstack/react-table';
import { getCoreRowModel, useReactTable } from '@tanstack/react-table';
import {
Button,
formatDateToIcatDate,
InvestigationDate,
isDefined,
Loading,
NoData,
parseDate,
SearchBar,
SideNavElement,
SideNavFilter,
UI_DATE_DAY_FORMAT,
useConfig,
useEndpointPagination,
UserPortalButton,
......@@ -19,25 +24,33 @@ import {
Parcel,
PARCEL_LIST_ENDPOINT,
ShipmentAddress,
useEndpointURL,
} from '@edata-portal/icat-plus-api';
import { TanstackBootstrapTable } from '@edata-portal/core';
import { useNavigate } from 'react-router-dom';
import { ParcelStatusBadge } from 'components/investigation/shipment/parcel/ParcelStatusBadge';
import { AddressInfo } from 'components/address/AddressCard';
import { Col, OverlayTrigger, Popover } from 'react-bootstrap';
import { Suspense, useState } from 'react';
import { Suspense, useEffect, useState } from 'react';
import { PARCEL_STATUSES } from 'constants/statuses';
import ReactSelect from 'react-select';
import DatePicker from 'react-datepicker';
export function ParcelList({
shipmentId,
investigationId,
displayToolbar,
}: {
shipmentId?: string;
investigationId?: string;
displayToolbar?: boolean;
}) {
const user = useUser();
const [search, setSearch] = useState<string>();
const [status, setStatus] = useState<string>();
const [startDate, setStartDate] = useState<string>('undefined');
const [endDate, setEndDate] = useState<string>('undefined');
return (
<WithSideNav
......@@ -69,6 +82,39 @@ export function ParcelList({
}}
/>
</SideNavFilter>
{user?.isAdministrator && (
<>
<SideNavFilter label={'Start date (stores)'}>
<DatePicker
className="form-control"
dateFormat={UI_DATE_DAY_FORMAT}
selected={parseDate(startDate)}
maxDate={parseDate(endDate)}
onChange={(date: any) => {
const strDate = formatDateToIcatDate(date) || 'undefined';
setStartDate(strDate);
}}
isClearable
placeholderText="Start date"
/>
</SideNavFilter>
<SideNavFilter label={'End date (back to stores)'}>
<DatePicker
className="form-control"
dateFormat={UI_DATE_DAY_FORMAT}
selected={parseDate(endDate)}
minDate={parseDate(startDate)}
onChange={(date: any) => {
const strDate = formatDateToIcatDate(date) || 'undefined';
setEndDate(strDate);
}}
isClearable
placeholderText="End date"
/>
</SideNavFilter>
</>
)}
</>
</SideNavElement>
}
......@@ -79,6 +125,9 @@ export function ParcelList({
investigationId={investigationId}
search={search?.trim()}
status={status}
startDate={startDate}
endDate={endDate}
displayToolbar={displayToolbar}
/>
</Suspense>
</WithSideNav>
......@@ -90,26 +139,62 @@ function LoadAndDisplayParcels({
investigationId,
search,
status,
startDate,
endDate,
displayToolbar,
}: {
shipmentId?: string;
investigationId?: string;
search?: string;
status?: string;
startDate?: string;
endDate?: string;
displayToolbar?: boolean;
}) {
const user = useUser();
const config = useConfig();
const [filters, setFilters] = useState({
shipmentId,
investigationId,
search: search,
status: status,
startDate: isDefined(startDate) ? startDate : undefined,
endDate: isDefined(endDate) ? endDate : undefined,
});
useEffect(() => {
setFilters({
shipmentId,
investigationId,
search,
status,
startDate: isDefined(startDate) ? startDate : undefined,
endDate: isDefined(endDate) ? endDate : undefined,
});
}, [shipmentId, investigationId, search, status, startDate, endDate]);
const getUrl = useEndpointURL(PARCEL_LIST_ENDPOINT);
const getQueryParams = (filters: Record<string, any>) => {
const cleanedFilters = Object.fromEntries(
Object.entries(filters).filter(([_, v]) => v !== undefined),
);
return {
...cleanedFilters,
...(cleanedFilters.startDate
? { startStatus: PARCEL_STATUSES.STORES }
: {}),
...(cleanedFilters.endDate
? { endStatus: PARCEL_STATUSES.BACK_STORES }
: {}),
};
};
const parcels = useEndpointPagination({
endpoint: PARCEL_LIST_ENDPOINT,
params: {
...(search?.length ? { search } : {}),
...(status?.length ? { status } : {}),
...(shipmentId && investigationId
? {
shipmentId,
investigationId,
}
: undefined),
...getQueryParams(filters),
},
paginationParams: {
paginationKey: 'parcels',
......@@ -287,11 +372,36 @@ function LoadAndDisplayParcels({
);
return (
<TanstackBootstrapTable
table={table}
onRowClick={onRowClick}
dataLength={parcels.totalElements}
/>
<>
{user?.isAdministrator && displayToolbar && (
<Button
variant="primary"
disabled={!filters.startDate && !filters.endDate}
onClick={() => {
const url = getUrl({
...getQueryParams(filters),
format: 'csv',
});
window.open(url, '_blank');
}}
>
<span>
<FontAwesomeIcon
icon={faDownload}
style={{
marginRight: '0.5rem',
}}
/>
CSV Export
</span>
</Button>
)}
<TanstackBootstrapTable
table={table}
onRowClick={onRowClick}
dataLength={parcels.totalElements}
/>
</>
);
}
......
......@@ -8,7 +8,7 @@ export default function MyParcels() {
<h4>My parcels</h4>
</Row>
<Row>
<ParcelList />
<ParcelList displayToolbar={true} />
</Row>
</Container>
);
......
......@@ -16,7 +16,7 @@
"fix:prettier": "prettier . --write"
},
"dependencies": {
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/react-fontawesome": "^0.2.2",
......
......@@ -19,7 +19,7 @@
"@babel/eslint-parser": "^7.25.1",
"@edata-portal/core": "workspace:*",
"@edata-portal/h5": "workspace:*",
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/react-fontawesome": "^0.2.2",
......
......@@ -22,7 +22,7 @@
"@edata-portal/core": "workspace:*",
"@edata-portal/doi": "^0.0.16",
"@edata-portal/h5": "workspace:*",
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@edata-portal/react-calendar-timeline": "^0.29.0",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
......
......@@ -18,7 +18,7 @@
"dependencies": {
"@babel/eslint-parser": "^7.25.1",
"@edata-portal/core": "workspace:*",
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/react-fontawesome": "^0.2.2",
......
......@@ -23,7 +23,7 @@
"typescript": "5.5.3"
},
"devDependencies": {
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@tanstack/react-query": "^5.52.1",
"cypress": "^13.13.3",
"dotenv": "^16.4.5",
......
......@@ -19,7 +19,7 @@
"dependencies": {
"@dagrejs/dagre": "^1.1.4",
"@edata-portal/doi": "^0.0.14",
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/react-fontawesome": "^0.2.2",
......
......@@ -18,7 +18,7 @@
},
"dependencies": {
"@edata-portal/core": "workspace:*",
"@edata-portal/icat-plus-api": "^1.8.15",
"@edata-portal/icat-plus-api": "^1.8.16",
"@h5web/app": "14.0.0",
"@h5web/lib": "14.0.0",
"@react-three/fiber": "^8.17.6",
......
......@@ -21,8 +21,8 @@ importers:
version: 5.5.3
devDependencies:
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tanstack/react-query':
specifier: ^5.52.1
version: 5.52.1(react@18.3.1)
......@@ -54,8 +54,8 @@ importers:
specifier: workspace:*
version: link:../../packages/core
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@fortawesome/fontawesome-svg-core':
specifier: ^6.6.0
version: 6.6.0
......@@ -139,8 +139,8 @@ importers:
specifier: workspace:*
version: link:../../packages/core
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@fortawesome/fontawesome-svg-core':
specifier: ^6.6.0
version: 6.6.0
......@@ -236,8 +236,8 @@ importers:
specifier: workspace:*
version: link:../../packages/core
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@fortawesome/fontawesome-svg-core':
specifier: ^6.6.0
version: 6.6.0
......@@ -342,8 +342,8 @@ importers:
specifier: workspace:*
version: link:../../packages/core
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@fortawesome/fontawesome-svg-core':
specifier: ^6.6.0
version: 6.6.0
......@@ -460,8 +460,8 @@ importers:
apps/maintenance:
dependencies:
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@fortawesome/fontawesome-svg-core':
specifier: ^6.6.0
version: 6.6.0
......@@ -518,8 +518,8 @@ importers:
specifier: workspace:*
version: link:../../packages/h5
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@fortawesome/fontawesome-svg-core':
specifier: ^6.6.0
version: 6.6.0
......@@ -627,8 +627,8 @@ importers:
specifier: workspace:*
version: link:../../packages/h5
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@edata-portal/react-calendar-timeline':
specifier: ^0.29.0
version: 0.29.0(interactjs@1.10.27)(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
......@@ -763,8 +763,8 @@ importers:
specifier: workspace:*
version: link:../../packages/core
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@fortawesome/fontawesome-svg-core':
specifier: ^6.6.0
version: 6.6.0
......@@ -851,8 +851,8 @@ importers:
specifier: ^0.0.14
version: 0.0.14(@tanstack/react-query@5.52.1(react@18.3.1))(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@fortawesome/fontawesome-svg-core':
specifier: ^6.6.0
version: 6.6.0
......@@ -972,8 +972,8 @@ importers:
specifier: workspace:*
version: link:../core
'@edata-portal/icat-plus-api':
specifier: ^1.8.15
version: 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^1.8.16
version: 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@h5web/app':
specifier: 14.0.0
version: 14.0.0(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(use-sync-external-store@1.4.0(react@18.3.1))
......@@ -1772,8 +1772,8 @@ packages:
react: ^18.3.1
react-dom: ^18.3.1
'@edata-portal/icat-plus-api@1.8.15':
resolution: {integrity: sha512-0gO/NpNUTCDlhtAmxKBvWJ255UrKnpNaOq31hIKpj2QaU3FF8YlRc/BpKt8daPBRnYCzvK5nq4rxXBWjkMbf4A==}
'@edata-portal/icat-plus-api@1.8.16':
resolution: {integrity: sha512-bMXrs75NAREnBcWIEU+BXZFUaDcna4PqQ1YpSusXXjN37h/t5as4Evt6oTrdYbSiBUl6q81yT5PRfVCEAsCLDw==}
peerDependencies:
'@tanstack/react-query': ^5.28.9
react: ^18.2.0
......@@ -6550,7 +6550,7 @@ snapshots:
'@edata-portal/doi@0.0.14(@tanstack/react-query@5.52.1(react@18.3.1))(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@edata-portal/icat-plus-api': 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@edata-portal/icat-plus-api': 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@fortawesome/fontawesome-svg-core': 6.6.0
'@fortawesome/free-solid-svg-icons': 6.6.0
'@fortawesome/react-fontawesome': 0.2.2(@fortawesome/fontawesome-svg-core@6.6.0)(react@18.3.1)
......@@ -6565,7 +6565,7 @@ snapshots:
'@edata-portal/doi@0.0.16(@tanstack/react-query@5.52.1(react@18.3.1))(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@edata-portal/icat-plus-api': 1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@edata-portal/icat-plus-api': 1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@fortawesome/fontawesome-svg-core': 6.6.0
'@fortawesome/free-solid-svg-icons': 6.6.0
'@fortawesome/react-fontawesome': 0.2.2(@fortawesome/fontawesome-svg-core@6.6.0)(react@18.3.1)
......@@ -6578,7 +6578,7 @@ snapshots:
transitivePeerDependencies:
- '@types/react'
'@edata-portal/icat-plus-api@1.8.15(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
'@edata-portal/icat-plus-api@1.8.16(@tanstack/react-query@5.52.1(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@tanstack/react-query': 5.52.1(react@18.3.1)
date-fns: 3.6.0
......