Skip to content
This repository has been archived by the owner on Sep 24, 2024. It is now read-only.

Commit

Permalink
Merge pull request #67 from commercelayer/apps-cross-navigation
Browse files Browse the repository at this point in the history
Apps cross navigation
  • Loading branch information
pfferrari authored Aug 3, 2023
2 parents fcd51ad + 5c28d68 commit e0d911c
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 58 deletions.
40 changes: 20 additions & 20 deletions packages/app/src/components/ListItemOrder.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { appRoutes } from '#data/routes'
import { useBackToList } from '#hooks/useBackToList'
import { makeOrder } from '#mocks'
import { ListItemOrder as ListItemOrderElements } from '@commercelayer/app-elements'
import {
ListItemOrder as ListItemOrderElements,
navigateToDetail
} from '@commercelayer/app-elements'
import type { Order } from '@commercelayer/sdk'
import { Link } from 'wouter'
import { useLocation } from 'wouter'

interface Props {
resource?: Order
Expand All @@ -16,22 +17,21 @@ export function ListItemOrder({
isLoading,
delayMs
}: Props): JSX.Element {
const { setBackToList } = useBackToList()
const [, setLocation] = useLocation()

return (
<Link
href={appRoutes.details.makePath(resource.id)}
onClick={() => {
setBackToList({
search: window.location.search
})
}}
>
<ListItemOrderElements
order={resource}
isLoading={isLoading}
delayMs={delayMs}
tag='a'
/>
</Link>
<ListItemOrderElements
order={resource}
isLoading={isLoading}
delayMs={delayMs}
tag='a'
{...navigateToDetail({
setLocation,
destination: {
app: 'orders',
resourceId: resource.id
}
})}
/>
)
}
20 changes: 19 additions & 1 deletion packages/app/src/components/OrderCustomer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,43 @@ import {
Legend,
ListItem,
Text,
navigateToDetail,
useTokenProvider,
withSkeletonTemplate
} from '@commercelayer/app-elements'
import type { Order } from '@commercelayer/sdk'
import { useLocation } from 'wouter'

interface Props {
order: Order
}

export const OrderCustomer = withSkeletonTemplate<Props>(
({ order }): JSX.Element | null => {
const [, setLocation] = useLocation()
const { canAccess } = useTokenProvider()

if (order.customer == null) {
return null
}

const navigateToCustomer = canAccess('customers')
? navigateToDetail({
setLocation,
destination: {
app: 'customers',
resourceId: order.customer.id
}
})
: {}

return (
<>
<Legend title='Customer' />
<ListItem
tag='div'
tag={canAccess('customers') ? 'a' : 'div'}
icon={<Icon name='user' background='teal' gap='large' />}
{...navigateToCustomer}
>
<div>
<Text tag='div' weight='semibold'>
Expand All @@ -32,6 +49,7 @@ export const OrderCustomer = withSkeletonTemplate<Props>(
{order.customer.total_orders_count} orders
</Text>
</div>
{canAccess('customers') && <Icon name='caretRight' />}
</ListItem>
</>
)
Expand Down
25 changes: 22 additions & 3 deletions packages/app/src/components/OrderShipments.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import {
formatDate,
Icon,
Legend,
ListItem,
Text,
formatDate,
navigateToDetail,
useTokenProvider,
withSkeletonTemplate
} from '@commercelayer/app-elements'
import type { Order, Shipment } from '@commercelayer/sdk'
import type { SetNonNullable, SetRequired } from 'type-fest'
import { useLocation } from 'wouter'

interface Props {
order: Order
Expand Down Expand Up @@ -41,10 +43,26 @@ function sanitizeShipmentStatus(status: Shipment['status']): string {
}

const renderShipment = (shipment: Shipment): JSX.Element => {
const { user } = useTokenProvider()
const { user, canAccess } = useTokenProvider()
const [, setLocation] = useLocation()

const navigateToShipment = canAccess('customers')
? navigateToDetail({
setLocation,
destination: {
app: 'shipments',
resourceId: shipment.id
}
})
: {}

return (
<ListItem key={shipment.id} tag='div' icon={getIcon(shipment.status)}>
<ListItem
key={shipment.id}
tag={canAccess('shipments') ? 'a' : 'div'}
icon={getIcon(shipment.status)}
{...navigateToShipment}
>
<div>
<Text tag='div' weight='semibold'>
#{shipment.number}
Expand All @@ -58,6 +76,7 @@ const renderShipment = (shipment: Shipment): JSX.Element => {
})}
</Text>
</div>
{canAccess('shipments') && <Icon name='caretRight' />}
</ListItem>
)
}
Expand Down
11 changes: 7 additions & 4 deletions packages/app/src/pages/OrderDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import { OrderSummary } from '#components/OrderSummary'
import { OrderTimeline } from '#components/OrderTimeline'
import { ScrollToTop } from '#components/ScrollToTop'
import { appRoutes } from '#data/routes'
import { useBackToList } from '#hooks/useBackToList'
import { useOrderDetails } from '#hooks/useOrderDetails'
import {
Button,
Expand All @@ -17,6 +16,7 @@ import {
SkeletonTemplate,
Spacer,
formatDate,
goBack,
useTokenProvider
} from '@commercelayer/app-elements'
import { Link, useLocation, useRoute } from 'wouter'
Expand All @@ -30,8 +30,6 @@ export function OrderDetails(): JSX.Element {
const [, setLocation] = useLocation()
const [, params] = useRoute<{ orderId: string }>(appRoutes.details.path)

const { goBackToList } = useBackToList()

const orderId = params?.orderId ?? ''

const { order, isLoading } = useOrderDetails(orderId)
Expand Down Expand Up @@ -79,7 +77,12 @@ export function OrderDetails(): JSX.Element {
{order.reference != null && <div>Ref. {order.reference}</div>}
</SkeletonTemplate>
}
onGoBack={goBackToList}
onGoBack={() => {
goBack({
setLocation,
defaultRelativePath: appRoutes.home.makePath()
})
}}
>
<ScrollToTop />
<SkeletonTemplate isLoading={isLoading}>
Expand Down
37 changes: 7 additions & 30 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit e0d911c

Please sign in to comment.