diff --git a/apps/admin-ui/.expo/types/router.d.ts b/apps/admin-ui/.expo/types/router.d.ts index 3dc99d3..e400cfe 100644 --- a/apps/admin-ui/.expo/types/router.d.ts +++ b/apps/admin-ui/.expo/types/router.d.ts @@ -6,9 +6,9 @@ export * from 'expo-router'; declare module 'expo-router' { export namespace ExpoRouter { export interface __routes { - hrefInputParams: { pathname: Router.RelativePathString, params?: Router.UnknownInputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownInputParams } | { pathname: `/`; params?: Router.UnknownInputParams; } | { pathname: `/login`; params?: Router.UnknownInputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/address-management` | `/address-management`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/complaints` | `/complaints`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons/create` | `/coupons/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons` | `/coupons`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons/reserved-coupons` | `/coupons/reserved-coupons`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app/all-items-order` | `/customize-app/all-items-order`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app` | `/customize-app`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app/popular-items` | `/customize-app/popular-items`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard` | `/dashboard`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners/create` | `/dashboard-banners/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners` | `/dashboard-banners`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders` | `/manage-orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders/delivery-sequences` | `/manage-orders/delivery-sequences`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders/orders` | `/manage-orders/orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/prices-overview` | `/prices-overview`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-groupings/create` | `/product-groupings/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-groupings` | `/product-groupings`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags/add` | `/product-tags/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags` | `/product-tags`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags/edit` | `/product-tags/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products/add` | `/products/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products/edit` | `/products/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products` | `/products`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/rebalance-orders` | `/rebalance-orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/send-notifications` | `/send-notifications`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots/add` | `/slots/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots` | `/slots`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots/slot-details` | `/slots/slot-details`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stocking-schedules` | `/stocking-schedules`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores/add` | `/stores/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores/edit` | `/stores/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores` | `/stores`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/user-management` | `/user-management`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/users` | `/users`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/vendor-snippets` | `/vendor-snippets`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons/edit/[id]` | `/coupons/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/dashboard-banners/edit/[id]` | `/dashboard-banners/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/manage-orders/order-details/[id]` | `/manage-orders/order-details/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/product-groupings/edit/[id]` | `/product-groupings/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/products/detail/[id]` | `/products/detail/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/slots/edit/[id]` | `/slots/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/user-management/[id]` | `/user-management/[id]`, params: Router.UnknownInputParams & { id: string | number; } }; - hrefOutputParams: { pathname: Router.RelativePathString, params?: Router.UnknownOutputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownOutputParams } | { pathname: `/`; params?: Router.UnknownOutputParams; } | { pathname: `/login`; params?: Router.UnknownOutputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/address-management` | `/address-management`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/complaints` | `/complaints`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/coupons/create` | `/coupons/create`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/coupons` | `/coupons`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/coupons/reserved-coupons` | `/coupons/reserved-coupons`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/customize-app/all-items-order` | `/customize-app/all-items-order`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/customize-app` | `/customize-app`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/customize-app/popular-items` | `/customize-app/popular-items`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/dashboard` | `/dashboard`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners/create` | `/dashboard-banners/create`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners` | `/dashboard-banners`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/manage-orders` | `/manage-orders`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/manage-orders/delivery-sequences` | `/manage-orders/delivery-sequences`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/manage-orders/orders` | `/manage-orders/orders`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/prices-overview` | `/prices-overview`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/product-groupings/create` | `/product-groupings/create`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/product-groupings` | `/product-groupings`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/product-tags/add` | `/product-tags/add`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/product-tags` | `/product-tags`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/product-tags/edit` | `/product-tags/edit`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/products/add` | `/products/add`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/products/edit` | `/products/edit`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/products` | `/products`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/rebalance-orders` | `/rebalance-orders`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/send-notifications` | `/send-notifications`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/slots/add` | `/slots/add`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/slots` | `/slots`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/slots/slot-details` | `/slots/slot-details`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/stocking-schedules` | `/stocking-schedules`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/stores/add` | `/stores/add`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/stores/edit` | `/stores/edit`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/stores` | `/stores`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/user-management` | `/user-management`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/users` | `/users`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/vendor-snippets` | `/vendor-snippets`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/coupons/edit/[id]` | `/coupons/edit/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/dashboard-banners/edit/[id]` | `/dashboard-banners/edit/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/manage-orders/order-details/[id]` | `/manage-orders/order-details/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/product-groupings/edit/[id]` | `/product-groupings/edit/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/products/detail/[id]` | `/products/detail/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/slots/edit/[id]` | `/slots/edit/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/user-management/[id]` | `/user-management/[id]`, params: Router.UnknownOutputParams & { id: string; } }; - href: Router.RelativePathString | Router.ExternalPathString | `/${`?${string}` | `#${string}` | ''}` | `/login${`?${string}` | `#${string}` | ''}` | `/_sitemap${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/address-management${`?${string}` | `#${string}` | ''}` | `/address-management${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/complaints${`?${string}` | `#${string}` | ''}` | `/complaints${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/coupons/create${`?${string}` | `#${string}` | ''}` | `/coupons/create${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/coupons${`?${string}` | `#${string}` | ''}` | `/coupons${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/coupons/reserved-coupons${`?${string}` | `#${string}` | ''}` | `/coupons/reserved-coupons${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/customize-app/all-items-order${`?${string}` | `#${string}` | ''}` | `/customize-app/all-items-order${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/customize-app${`?${string}` | `#${string}` | ''}` | `/customize-app${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/customize-app/popular-items${`?${string}` | `#${string}` | ''}` | `/customize-app/popular-items${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/dashboard${`?${string}` | `#${string}` | ''}` | `/dashboard${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/dashboard-banners/create${`?${string}` | `#${string}` | ''}` | `/dashboard-banners/create${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/dashboard-banners${`?${string}` | `#${string}` | ''}` | `/dashboard-banners${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/manage-orders${`?${string}` | `#${string}` | ''}` | `/manage-orders${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/manage-orders/delivery-sequences${`?${string}` | `#${string}` | ''}` | `/manage-orders/delivery-sequences${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/manage-orders/orders${`?${string}` | `#${string}` | ''}` | `/manage-orders/orders${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/prices-overview${`?${string}` | `#${string}` | ''}` | `/prices-overview${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-groupings/create${`?${string}` | `#${string}` | ''}` | `/product-groupings/create${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-groupings${`?${string}` | `#${string}` | ''}` | `/product-groupings${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-tags/add${`?${string}` | `#${string}` | ''}` | `/product-tags/add${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-tags${`?${string}` | `#${string}` | ''}` | `/product-tags${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-tags/edit${`?${string}` | `#${string}` | ''}` | `/product-tags/edit${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/products/add${`?${string}` | `#${string}` | ''}` | `/products/add${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/products/edit${`?${string}` | `#${string}` | ''}` | `/products/edit${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/products${`?${string}` | `#${string}` | ''}` | `/products${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/rebalance-orders${`?${string}` | `#${string}` | ''}` | `/rebalance-orders${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/send-notifications${`?${string}` | `#${string}` | ''}` | `/send-notifications${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/slots/add${`?${string}` | `#${string}` | ''}` | `/slots/add${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/slots${`?${string}` | `#${string}` | ''}` | `/slots${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/slots/slot-details${`?${string}` | `#${string}` | ''}` | `/slots/slot-details${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/stocking-schedules${`?${string}` | `#${string}` | ''}` | `/stocking-schedules${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/stores/add${`?${string}` | `#${string}` | ''}` | `/stores/add${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/stores/edit${`?${string}` | `#${string}` | ''}` | `/stores/edit${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/stores${`?${string}` | `#${string}` | ''}` | `/stores${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/user-management${`?${string}` | `#${string}` | ''}` | `/user-management${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/users${`?${string}` | `#${string}` | ''}` | `/users${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/vendor-snippets${`?${string}` | `#${string}` | ''}` | `/vendor-snippets${`?${string}` | `#${string}` | ''}` | { pathname: Router.RelativePathString, params?: Router.UnknownInputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownInputParams } | { pathname: `/`; params?: Router.UnknownInputParams; } | { pathname: `/login`; params?: Router.UnknownInputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/address-management` | `/address-management`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/complaints` | `/complaints`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons/create` | `/coupons/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons` | `/coupons`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons/reserved-coupons` | `/coupons/reserved-coupons`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app/all-items-order` | `/customize-app/all-items-order`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app` | `/customize-app`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app/popular-items` | `/customize-app/popular-items`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard` | `/dashboard`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners/create` | `/dashboard-banners/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners` | `/dashboard-banners`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders` | `/manage-orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders/delivery-sequences` | `/manage-orders/delivery-sequences`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders/orders` | `/manage-orders/orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/prices-overview` | `/prices-overview`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-groupings/create` | `/product-groupings/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-groupings` | `/product-groupings`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags/add` | `/product-tags/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags` | `/product-tags`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags/edit` | `/product-tags/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products/add` | `/products/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products/edit` | `/products/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products` | `/products`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/rebalance-orders` | `/rebalance-orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/send-notifications` | `/send-notifications`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots/add` | `/slots/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots` | `/slots`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots/slot-details` | `/slots/slot-details`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stocking-schedules` | `/stocking-schedules`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores/add` | `/stores/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores/edit` | `/stores/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores` | `/stores`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/user-management` | `/user-management`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/users` | `/users`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/vendor-snippets` | `/vendor-snippets`; params?: Router.UnknownInputParams; } | `${'/(drawer)'}/coupons/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/coupons/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/dashboard-banners/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/dashboard-banners/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/manage-orders/order-details/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/manage-orders/order-details/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-groupings/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/product-groupings/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/products/detail/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/products/detail/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/slots/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/slots/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/user-management/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/user-management/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | { pathname: `${'/(drawer)'}/coupons/edit/[id]` | `/coupons/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/dashboard-banners/edit/[id]` | `/dashboard-banners/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/manage-orders/order-details/[id]` | `/manage-orders/order-details/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/product-groupings/edit/[id]` | `/product-groupings/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/products/detail/[id]` | `/products/detail/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/slots/edit/[id]` | `/slots/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/user-management/[id]` | `/user-management/[id]`, params: Router.UnknownInputParams & { id: string | number; } }; + hrefInputParams: { pathname: Router.RelativePathString, params?: Router.UnknownInputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownInputParams } | { pathname: `/`; params?: Router.UnknownInputParams; } | { pathname: `/login`; params?: Router.UnknownInputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/address-management` | `/address-management`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/complaints` | `/complaints`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons/create` | `/coupons/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons` | `/coupons`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons/reserved-coupons` | `/coupons/reserved-coupons`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app/all-items-order` | `/customize-app/all-items-order`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app` | `/customize-app`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app/popular-items` | `/customize-app/popular-items`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard` | `/dashboard`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners/create` | `/dashboard-banners/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners` | `/dashboard-banners`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders` | `/manage-orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders/delivery-sequences` | `/manage-orders/delivery-sequences`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders/orders` | `/manage-orders/orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/prices-overview` | `/prices-overview`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-groupings/create` | `/product-groupings/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-groupings` | `/product-groupings`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags/add` | `/product-tags/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags` | `/product-tags`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags/edit` | `/product-tags/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products/add` | `/products/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products/edit` | `/products/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products` | `/products`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/rebalance-orders` | `/rebalance-orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/send-notifications` | `/send-notifications`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots/add` | `/slots/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots` | `/slots`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots/slot-details` | `/slots/slot-details`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores/add` | `/stores/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores/edit` | `/stores/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores` | `/stores`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/user-management` | `/user-management`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/users` | `/users`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/vendor-snippets` | `/vendor-snippets`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stocking-schedules` | `/stocking-schedules`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons/edit/[id]` | `/coupons/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/dashboard-banners/edit/[id]` | `/dashboard-banners/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/manage-orders/order-details/[id]` | `/manage-orders/order-details/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/product-groupings/edit/[id]` | `/product-groupings/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/products/detail/[id]` | `/products/detail/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/slots/edit/[id]` | `/slots/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/user-management/[id]` | `/user-management/[id]`, params: Router.UnknownInputParams & { id: string | number; } }; + hrefOutputParams: { pathname: Router.RelativePathString, params?: Router.UnknownOutputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownOutputParams } | { pathname: `/`; params?: Router.UnknownOutputParams; } | { pathname: `/login`; params?: Router.UnknownOutputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/address-management` | `/address-management`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/complaints` | `/complaints`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/coupons/create` | `/coupons/create`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/coupons` | `/coupons`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/coupons/reserved-coupons` | `/coupons/reserved-coupons`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/customize-app/all-items-order` | `/customize-app/all-items-order`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/customize-app` | `/customize-app`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/customize-app/popular-items` | `/customize-app/popular-items`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/dashboard` | `/dashboard`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners/create` | `/dashboard-banners/create`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners` | `/dashboard-banners`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/manage-orders` | `/manage-orders`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/manage-orders/delivery-sequences` | `/manage-orders/delivery-sequences`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/manage-orders/orders` | `/manage-orders/orders`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/prices-overview` | `/prices-overview`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/product-groupings/create` | `/product-groupings/create`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/product-groupings` | `/product-groupings`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/product-tags/add` | `/product-tags/add`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/product-tags` | `/product-tags`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/product-tags/edit` | `/product-tags/edit`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/products/add` | `/products/add`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/products/edit` | `/products/edit`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/products` | `/products`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/rebalance-orders` | `/rebalance-orders`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/send-notifications` | `/send-notifications`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/slots/add` | `/slots/add`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/slots` | `/slots`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/slots/slot-details` | `/slots/slot-details`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/stores/add` | `/stores/add`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/stores/edit` | `/stores/edit`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/stores` | `/stores`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/user-management` | `/user-management`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/users` | `/users`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/vendor-snippets` | `/vendor-snippets`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/stocking-schedules` | `/stocking-schedules`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(drawer)'}/coupons/edit/[id]` | `/coupons/edit/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/dashboard-banners/edit/[id]` | `/dashboard-banners/edit/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/manage-orders/order-details/[id]` | `/manage-orders/order-details/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/product-groupings/edit/[id]` | `/product-groupings/edit/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/products/detail/[id]` | `/products/detail/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/slots/edit/[id]` | `/slots/edit/[id]`, params: Router.UnknownOutputParams & { id: string; } } | { pathname: `${'/(drawer)'}/user-management/[id]` | `/user-management/[id]`, params: Router.UnknownOutputParams & { id: string; } }; + href: Router.RelativePathString | Router.ExternalPathString | `/${`?${string}` | `#${string}` | ''}` | `/login${`?${string}` | `#${string}` | ''}` | `/_sitemap${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/address-management${`?${string}` | `#${string}` | ''}` | `/address-management${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/complaints${`?${string}` | `#${string}` | ''}` | `/complaints${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/coupons/create${`?${string}` | `#${string}` | ''}` | `/coupons/create${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/coupons${`?${string}` | `#${string}` | ''}` | `/coupons${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/coupons/reserved-coupons${`?${string}` | `#${string}` | ''}` | `/coupons/reserved-coupons${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/customize-app/all-items-order${`?${string}` | `#${string}` | ''}` | `/customize-app/all-items-order${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/customize-app${`?${string}` | `#${string}` | ''}` | `/customize-app${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/customize-app/popular-items${`?${string}` | `#${string}` | ''}` | `/customize-app/popular-items${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/dashboard${`?${string}` | `#${string}` | ''}` | `/dashboard${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/dashboard-banners/create${`?${string}` | `#${string}` | ''}` | `/dashboard-banners/create${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/dashboard-banners${`?${string}` | `#${string}` | ''}` | `/dashboard-banners${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/manage-orders${`?${string}` | `#${string}` | ''}` | `/manage-orders${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/manage-orders/delivery-sequences${`?${string}` | `#${string}` | ''}` | `/manage-orders/delivery-sequences${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/manage-orders/orders${`?${string}` | `#${string}` | ''}` | `/manage-orders/orders${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/prices-overview${`?${string}` | `#${string}` | ''}` | `/prices-overview${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-groupings/create${`?${string}` | `#${string}` | ''}` | `/product-groupings/create${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-groupings${`?${string}` | `#${string}` | ''}` | `/product-groupings${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-tags/add${`?${string}` | `#${string}` | ''}` | `/product-tags/add${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-tags${`?${string}` | `#${string}` | ''}` | `/product-tags${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-tags/edit${`?${string}` | `#${string}` | ''}` | `/product-tags/edit${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/products/add${`?${string}` | `#${string}` | ''}` | `/products/add${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/products/edit${`?${string}` | `#${string}` | ''}` | `/products/edit${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/products${`?${string}` | `#${string}` | ''}` | `/products${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/rebalance-orders${`?${string}` | `#${string}` | ''}` | `/rebalance-orders${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/send-notifications${`?${string}` | `#${string}` | ''}` | `/send-notifications${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/slots/add${`?${string}` | `#${string}` | ''}` | `/slots/add${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/slots${`?${string}` | `#${string}` | ''}` | `/slots${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/slots/slot-details${`?${string}` | `#${string}` | ''}` | `/slots/slot-details${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/stores/add${`?${string}` | `#${string}` | ''}` | `/stores/add${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/stores/edit${`?${string}` | `#${string}` | ''}` | `/stores/edit${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/stores${`?${string}` | `#${string}` | ''}` | `/stores${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/user-management${`?${string}` | `#${string}` | ''}` | `/user-management${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/users${`?${string}` | `#${string}` | ''}` | `/users${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/vendor-snippets${`?${string}` | `#${string}` | ''}` | `/vendor-snippets${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/stocking-schedules${`?${string}` | `#${string}` | ''}` | `/stocking-schedules${`?${string}` | `#${string}` | ''}` | { pathname: Router.RelativePathString, params?: Router.UnknownInputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownInputParams } | { pathname: `/`; params?: Router.UnknownInputParams; } | { pathname: `/login`; params?: Router.UnknownInputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/address-management` | `/address-management`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/complaints` | `/complaints`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons/create` | `/coupons/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons` | `/coupons`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/coupons/reserved-coupons` | `/coupons/reserved-coupons`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app/all-items-order` | `/customize-app/all-items-order`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app` | `/customize-app`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/customize-app/popular-items` | `/customize-app/popular-items`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard` | `/dashboard`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners/create` | `/dashboard-banners/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/dashboard-banners` | `/dashboard-banners`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders` | `/manage-orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders/delivery-sequences` | `/manage-orders/delivery-sequences`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/manage-orders/orders` | `/manage-orders/orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/prices-overview` | `/prices-overview`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-groupings/create` | `/product-groupings/create`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-groupings` | `/product-groupings`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags/add` | `/product-tags/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags` | `/product-tags`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/product-tags/edit` | `/product-tags/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products/add` | `/products/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products/edit` | `/products/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/products` | `/products`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/rebalance-orders` | `/rebalance-orders`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/send-notifications` | `/send-notifications`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots/add` | `/slots/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots` | `/slots`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/slots/slot-details` | `/slots/slot-details`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores/add` | `/stores/add`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores/edit` | `/stores/edit`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stores` | `/stores`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/user-management` | `/user-management`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/users` | `/users`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/vendor-snippets` | `/vendor-snippets`; params?: Router.UnknownInputParams; } | { pathname: `${'/(drawer)'}/stocking-schedules` | `/stocking-schedules`; params?: Router.UnknownInputParams; } | `${'/(drawer)'}/coupons/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/coupons/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/dashboard-banners/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/dashboard-banners/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/manage-orders/order-details/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/manage-orders/order-details/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/product-groupings/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/product-groupings/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/products/detail/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/products/detail/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/slots/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/slots/edit/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `${'/(drawer)'}/user-management/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | `/user-management/${Router.SingleRoutePart}${`?${string}` | `#${string}` | ''}` | { pathname: `${'/(drawer)'}/coupons/edit/[id]` | `/coupons/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/dashboard-banners/edit/[id]` | `/dashboard-banners/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/manage-orders/order-details/[id]` | `/manage-orders/order-details/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/product-groupings/edit/[id]` | `/product-groupings/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/products/detail/[id]` | `/products/detail/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/slots/edit/[id]` | `/slots/edit/[id]`, params: Router.UnknownInputParams & { id: string | number; } } | { pathname: `${'/(drawer)'}/user-management/[id]` | `/user-management/[id]`, params: Router.UnknownInputParams & { id: string | number; } }; } } } diff --git a/apps/backend/index.ts b/apps/backend/index.ts index 97c11bf..b450036 100755 --- a/apps/backend/index.ts +++ b/apps/backend/index.ts @@ -75,7 +75,6 @@ app.use('/api/trpc', createExpressMiddleware({ let staffUser = null; const authHeader = req.headers.authorization; - console.log({authHeader}) if (authHeader?.startsWith('Bearer ')) { const token = authHeader.substring(7); try { diff --git a/apps/backend/src/main-router.ts b/apps/backend/src/main-router.ts index 446cc4c..f8dd753 100755 --- a/apps/backend/src/main-router.ts +++ b/apps/backend/src/main-router.ts @@ -4,8 +4,6 @@ import { ApiError } from "@/src/lib/api-error" import v1Router from "@/src/v1-router" import testController from "@/src/test-controller" import { authenticateUser } from "@/src/middleware/auth.middleware" -import { raiseComplaint } from "@/src/uv-apis/user-rest.controller" -import uploadHandler from "@/src/lib/upload-handler" const router = Router(); diff --git a/apps/backend/src/trpc/apis/common-apis/common-trpc-index.ts b/apps/backend/src/trpc/apis/common-apis/common-trpc-index.ts index 59696cb..b45764c 100644 --- a/apps/backend/src/trpc/apis/common-apis/common-trpc-index.ts +++ b/apps/backend/src/trpc/apis/common-apis/common-trpc-index.ts @@ -69,7 +69,7 @@ export const commonApiRouter = router({ generateUploadUrls: protectedProcedure .input(z.object({ - contextString: z.enum(['review', 'product_info', 'store', 'notification', 'profile']), + contextString: z.enum(['review', 'product_info', 'store', 'notification', 'profile', 'complaint']), mimeTypes: z.array(z.string()), })) .mutation(async ({ input }): Promise<{ uploadUrls: string[] }> => { @@ -89,6 +89,8 @@ export const commonApiRouter = router({ folder = 'store-images'; } else if (contextString === 'profile') { folder = 'profile-images'; + } else if (contextString === 'complaint') { + folder = 'complaint-images'; } // else if (contextString === 'review_response') { // diff --git a/apps/backend/src/trpc/apis/user-apis/apis/complaint.ts b/apps/backend/src/trpc/apis/user-apis/apis/complaint.ts index 08dae54..8006f13 100644 --- a/apps/backend/src/trpc/apis/user-apis/apis/complaint.ts +++ b/apps/backend/src/trpc/apis/user-apis/apis/complaint.ts @@ -3,6 +3,7 @@ import { z } from 'zod'; import { db } from '@/src/db/db_index'; import { complaints } from '@/src/db/schema'; import { eq } from 'drizzle-orm'; +import { scaffoldAssetUrl, claimUploadUrl } from '@/src/lib/s3-client'; export const complaintRouter = router({ getAll: protectedProcedure @@ -17,6 +18,7 @@ export const complaintRouter = router({ isResolved: complaints.isResolved, createdAt: complaints.createdAt, orderId: complaints.orderId, + images: complaints.images, }) .from(complaints) .where(eq(complaints.userId, userId)) @@ -30,34 +32,39 @@ export const complaintRouter = router({ isResolved: c.isResolved, createdAt: c.createdAt, orderId: c.orderId, + images: c.images ? scaffoldAssetUrl(c.images as string[]) : [], })), }; }), raise: protectedProcedure .input(z.object({ - orderId: z.string().optional(), + orderId: z.number().optional(), complaintBody: z.string().min(1, 'Complaint body is required'), + imageKeys: z.array(z.string()).optional(), })) .mutation(async ({ input, ctx }) => { const userId = ctx.user.userId; - const { orderId, complaintBody } = input; - - let orderIdNum: number | null = null; - - if (orderId) { - const readableIdMatch = orderId.match(/^ORD(\d+)$/); - if (readableIdMatch) { - orderIdNum = parseInt(readableIdMatch[1]); - } - } + const { orderId, complaintBody, imageKeys } = input; await db.insert(complaints).values({ userId, - orderId: orderIdNum, + orderId: orderId || null, complaintBody: complaintBody.trim(), + images: imageKeys || [], }); + // Claim upload URLs for images + if (imageKeys && imageKeys.length > 0) { + for (const key of imageKeys) { + try { + await claimUploadUrl(key); + } catch (e) { + console.warn(`Failed to claim upload URL for key: ${key}`, e); + } + } + } + return { success: true, message: 'Complaint raised successfully' }; }), }); diff --git a/apps/backend/src/uv-apis/auth.controller.ts b/apps/backend/src/uv-apis/auth.controller.ts deleted file mode 100644 index 8cdc9c0..0000000 --- a/apps/backend/src/uv-apis/auth.controller.ts +++ /dev/null @@ -1,321 +0,0 @@ -import { Request, Response, NextFunction } from 'express'; -import bcrypt from 'bcryptjs'; -import jwt from 'jsonwebtoken'; -import { eq } from 'drizzle-orm'; -import { db } from '@/src/db/db_index' -import { users, userCreds, userDetails } from '@/src/db/schema' -import { ApiError } from '@/src/lib/api-error' -import catchAsync from '@/src/lib/catch-async' -import { jwtSecret } from '@/src/lib/env-exporter'; -import uploadHandler from '@/src/lib/upload-handler' -import { imageUploadS3, generateSignedUrlFromS3Url } from '@/src/lib/s3-client' - -interface RegisterRequest { - name: string; - email: string; - mobile: string; - password: string; - profileImage?: string; -} - -interface UpdateProfileRequest { - name?: string; - email?: string; - mobile?: string; - password?: string; - bio?: string; - dateOfBirth?: string; - gender?: string; - occupation?: string; -} - -interface AuthResponse { - token: string; - user: { - id: number; - name: string | null; - email: string | null; - mobile: string | null; - profileImage?: string | null; - bio?: string | null; - dateOfBirth?: string | null; - gender?: string | null; - occupation?: string | null; - }; -} - -const generateToken = (userId: number): string => { - const secret = jwtSecret; - if (!secret) { - throw new ApiError('JWT secret not configured', 500); - } - - return jwt.sign({ userId }, secret, { expiresIn: '7d' }); -}; - -export const register = catchAsync(async (req: Request, res: Response, next: NextFunction) => { - const { name, email, mobile, password }: RegisterRequest = req.body; - - // Handle profile image upload - let profileImageUrl: string | undefined; - if (req.file) { - const key = `profile-images/${Date.now()}-${req.file.originalname}`; - profileImageUrl = await imageUploadS3(req.file.buffer, req.file.mimetype, key); - } - - if (!name || !email || !mobile || !password) { - throw new ApiError('All fields are required', 400); - } - - // Validate email format - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - if (!emailRegex.test(email)) { - throw new ApiError('Invalid email format', 400); - } - - // Validate mobile format (Indian mobile numbers) - const cleanMobile = mobile.replace(/\D/g, ''); - if (cleanMobile.length !== 10 || !/^[6-9]/.test(cleanMobile)) { - throw new ApiError('Invalid mobile number', 400); - } - - // Check if email already exists - const [existingEmail] = await db - .select() - .from(users) - .where(eq(users.email, email.toLowerCase())) - .limit(1); - - if (existingEmail) { - throw new ApiError('Email already registered', 409); - } - - // Check if mobile already exists - const [existingMobile] = await db - .select() - .from(users) - .where(eq(users.mobile, cleanMobile)) - .limit(1); - - if (existingMobile) { - throw new ApiError('Mobile number already registered', 409); - } - - // Hash password - const hashedPassword = await bcrypt.hash(password, 12); - - // Create user and credentials in a transaction - const newUser = await db.transaction(async (tx) => { - // Create user - const [user] = await tx - .insert(users) - .values({ - name: name.trim(), - email: email.toLowerCase().trim(), - mobile: cleanMobile, - }) - .returning(); - - // Create user credentials - await tx - .insert(userCreds) - .values({ - userId: user.id, - userPassword: hashedPassword, - }); - - // Create user details with profile image - await tx - .insert(userDetails) - .values({ - userId: user.id, - profileImage: profileImageUrl, - }); - - return user; - }); - - const token = generateToken(newUser.id); - - // Generate signed URL for profile image if it was uploaded - const profileImageSignedUrl = profileImageUrl - ? await generateSignedUrlFromS3Url(profileImageUrl) - : null; - - const response: AuthResponse = { - token, - user: { - id: newUser.id, - name: newUser.name, - email: newUser.email, - mobile: newUser.mobile, - profileImage: profileImageSignedUrl, - bio: null, - dateOfBirth: null, - gender: null, - occupation: null, - }, - }; - - res.status(201).json({ - success: true, - data: response, - }); -}); - -export const updateProfile = catchAsync(async (req: Request, res: Response, next: NextFunction) => { - const userId = req.user?.userId; - - if (!userId) { - throw new ApiError('User not authenticated', 401); - } - - const { name, email, mobile, password, bio, dateOfBirth, gender, occupation }: UpdateProfileRequest = req.body; - - // Handle profile image upload - let profileImageUrl: string | undefined; - if (req.file) { - const key = `profile-images/${Date.now()}-${req.file.originalname}`; - profileImageUrl = await imageUploadS3(req.file.buffer, req.file.mimetype, key); - } - - // Validate email format if provided - if (email) { - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - if (!emailRegex.test(email)) { - throw new ApiError('Invalid email format', 400); - } - } - - // Validate mobile format if provided - if (mobile) { - const cleanMobile = mobile.replace(/\D/g, ''); - if (cleanMobile.length !== 10 || !/^[6-9]/.test(cleanMobile)) { - throw new ApiError('Invalid mobile number', 400); - } - } - - // Check if email already exists (if changing email) - if (email) { - const [existingEmail] = await db - .select() - .from(users) - .where(eq(users.email, email.toLowerCase())) - .limit(1); - - if (existingEmail && existingEmail.id !== userId) { - throw new ApiError('Email already registered', 409); - } - } - - // Check if mobile already exists (if changing mobile) - if (mobile) { - const cleanMobile = mobile.replace(/\D/g, ''); - const [existingMobile] = await db - .select() - .from(users) - .where(eq(users.mobile, cleanMobile)) - .limit(1); - - if (existingMobile && existingMobile.id !== userId) { - throw new ApiError('Mobile number already registered', 409); - } - } - - // Update user and user details in a transaction - const updatedUser = await db.transaction(async (tx) => { - // Update user table - const updateData: any = {}; - if (name) updateData.name = name.trim(); - if (email) updateData.email = email.toLowerCase().trim(); - if (mobile) updateData.mobile = mobile.replace(/\D/g, ''); - - if (Object.keys(updateData).length > 0) { - await tx - .update(users) - .set(updateData) - .where(eq(users.id, userId)); - } - - // Update password if provided - if (password) { - const hashedPassword = await bcrypt.hash(password, 12); - await tx - .update(userCreds) - .set({ userPassword: hashedPassword }) - .where(eq(userCreds.userId, userId)); - } - - // Update or insert user details - const userDetailsUpdate: any = {}; - if (bio !== undefined) userDetailsUpdate.bio = bio; - if (dateOfBirth !== undefined) userDetailsUpdate.dateOfBirth = dateOfBirth ? new Date(dateOfBirth) : null; - if (gender !== undefined) userDetailsUpdate.gender = gender; - if (occupation !== undefined) userDetailsUpdate.occupation = occupation; - if (profileImageUrl) userDetailsUpdate.profileImage = profileImageUrl; - userDetailsUpdate.updatedAt = new Date(); - - // Check if user details record exists - const [existingDetails] = await tx - .select() - .from(userDetails) - .where(eq(userDetails.userId, userId)) - .limit(1); - - if (existingDetails) { - // Update existing record - await tx - .update(userDetails) - .set(userDetailsUpdate) - .where(eq(userDetails.userId, userId)); - } else { - // Create new record - userDetailsUpdate.userId = userId; - userDetailsUpdate.createdAt = new Date(); - await tx - .insert(userDetails) - .values(userDetailsUpdate); - } - - // Return updated user data - const [user] = await tx - .select() - .from(users) - .where(eq(users.id, userId)) - .limit(1); - - return user; - }); - - // Get updated user details for response - const [userDetail] = await db - .select() - .from(userDetails) - .where(eq(userDetails.userId, userId)) - .limit(1); - - // Generate signed URL for profile image if it exists - const profileImageSignedUrl = userDetail?.profileImage - ? await generateSignedUrlFromS3Url(userDetail.profileImage) - : null; - - const response: AuthResponse = { - token: req.headers.authorization?.replace('Bearer ', '') || '', // Keep existing token - user: { - id: updatedUser.id, - name: updatedUser.name, - email: updatedUser.email, - mobile: updatedUser.mobile, - profileImage: profileImageSignedUrl, - bio: userDetail?.bio || null, - dateOfBirth: userDetail?.dateOfBirth || null, - gender: userDetail?.gender || null, - occupation: userDetail?.occupation || null, - }, - }; - - res.status(200).json({ - success: true, - data: response, - }); -}); diff --git a/apps/backend/src/uv-apis/auth.router.ts b/apps/backend/src/uv-apis/auth.router.ts deleted file mode 100644 index 63ceff5..0000000 --- a/apps/backend/src/uv-apis/auth.router.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Router } from 'express'; -import { register, updateProfile } from '@/src/uv-apis/auth.controller' -import { verifyToken } from '@/src/middleware/auth' -import uploadHandler from '@/src/lib/upload-handler' - -const router = Router(); - -router.post('/register', uploadHandler.single('profileImage'), register); -router.put('/profile', verifyToken, uploadHandler.single('profileImage'), updateProfile); - -const authRouter = router; -export default authRouter; \ No newline at end of file diff --git a/apps/backend/src/uv-apis/user-rest.controller.ts b/apps/backend/src/uv-apis/user-rest.controller.ts deleted file mode 100644 index 8fd02a1..0000000 --- a/apps/backend/src/uv-apis/user-rest.controller.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { Request, Response, NextFunction } from 'express'; -import { db } from '@/src/db/db_index' -import { complaints } from '@/src/db/schema' -import { ApiError } from '@/src/lib/api-error' -import catchAsync from '@/src/lib/catch-async' -import { imageUploadS3 } from '@/src/lib/s3-client' - -interface RaiseComplaintRequest { - orderId?: string; - complaintBody: string; -} - -export const raiseComplaint = catchAsync(async (req: Request, res: Response, next: NextFunction) => { - console.log('raising complaint') - - const userId = req.user?.userId; - - if (!userId) { - throw new ApiError('User not authenticated', 401); - } - - const { orderId, complaintBody }: RaiseComplaintRequest = req.body; - - let orderIdNum: number | null = null; - - if (orderId) { - const readableIdMatch = orderId.match(/^ORD(\d+)$/); - if (readableIdMatch) { - orderIdNum = parseInt(readableIdMatch[1]); - } - } - - // Handle image uploads - const images = (req.files as Express.Multer.File[])?.filter(item => item.fieldname === 'images'); - let uploadedImageUrls: string[] = []; - - if (images && Array.isArray(images)) { - const imageUploadPromises = images.map((file, index) => { - const key = `complaint-images/${Date.now()}-${index}`; - return imageUploadS3(file.buffer, file.mimetype, key); - }); - - uploadedImageUrls = await Promise.all(imageUploadPromises); - } - - await db.insert(complaints).values({ - userId, - orderId: orderIdNum, - complaintBody: complaintBody.trim(), - images: uploadedImageUrls.length > 0 ? uploadedImageUrls : null, - }); - - res.status(200).json({ - success: true, - message: 'Complaint raised successfully' - }); -}); \ No newline at end of file diff --git a/apps/backend/src/uv-apis/uv-router.ts b/apps/backend/src/uv-apis/uv-router.ts index e205b76..4fa47a2 100644 --- a/apps/backend/src/uv-apis/uv-router.ts +++ b/apps/backend/src/uv-apis/uv-router.ts @@ -1,12 +1,8 @@ import { Router } from "express"; -import authRouter from "@/src/uv-apis/auth.router" -import { raiseComplaint } from "@/src/uv-apis/user-rest.controller" -import uploadHandler from "@/src/lib/upload-handler"; const router = Router(); -router.use("/auth", authRouter); -router.use("/complaints/raise", uploadHandler.array('images'),raiseComplaint) +// All user APIs migrated to tRPC const uvRouter = router; export default uvRouter; diff --git a/apps/user-ui/app/(drawer)/(tabs)/me/complaints/index.tsx b/apps/user-ui/app/(drawer)/(tabs)/me/complaints/index.tsx index 67240ff..04976f0 100644 --- a/apps/user-ui/app/(drawer)/(tabs)/me/complaints/index.tsx +++ b/apps/user-ui/app/(drawer)/(tabs)/me/complaints/index.tsx @@ -48,6 +48,23 @@ const ComplaintItem: React.FC = ({ item }) => ( {item.complaintBody} + {/* Complaint Images */} + {item.images && item.images.length > 0 && ( + + + {item.images.map((imageUrl: string, index: number) => ( + + + + ))} + + + )} + {/* Admin Response */} {item.response && ( diff --git a/apps/user-ui/components/ComplaintForm.tsx b/apps/user-ui/components/ComplaintForm.tsx index 040d06b..1607546 100644 --- a/apps/user-ui/components/ComplaintForm.tsx +++ b/apps/user-ui/components/ComplaintForm.tsx @@ -1,11 +1,10 @@ import React, { useState } from 'react'; import { View, TextInput, ActivityIndicator, KeyboardAvoidingView, Platform, Alert } from 'react-native'; import { MaterialIcons } from '@expo/vector-icons'; -import { useMutation } from "@tanstack/react-query"; import { MyText, ImageUploader, tw, MyTouchableOpacity } from 'common-ui'; import usePickImage from 'common-ui/src/components/use-pick-image'; -import axios from '../services/axios-user-ui'; -// import axios from 'common-ui/src/services/axios'; +import { trpc } from '@/src/trpc-client'; +import { useUploadToObjectStorage } from '@/src/hooks/useUploadToObjectStorage'; interface ComplaintFormProps { open: boolean; @@ -15,70 +14,73 @@ interface ComplaintFormProps { export default function ComplaintForm({ open, onClose, orderId }: ComplaintFormProps) { const [complaintBody, setComplaintBody] = useState(''); - const [complaintImages, setComplaintImages] = useState<{ uri?: string }[]>([]); - - // API function - const raiseComplaintApi = async (payload: { complaintBody: string; images: { uri?: string }[] }) => { - const formData = new FormData(); - - formData.append('orderId', orderId.toString()); - formData.append('complaintBody', payload.complaintBody); - - // Add images if provided - if (payload.images && payload.images.length > 0) { - payload.images.forEach((image, index) => { - if (image.uri) { - const fileName = `complaint-image-${index}.jpg`; - formData.append('images', { - uri: image.uri, - name: fileName, - type: 'image/jpeg', - } as any); - } - }); - } - - const response = await axios.post('/uv/complaints/raise', formData, { - headers: { - 'Content-Type': 'multipart/form-data', - }, - }); - return response.data; - }; - - // Hook - const raiseComplaintMutation = useMutation({ - mutationFn: raiseComplaintApi, - }); + const [complaintImages, setComplaintImages] = useState<{ uri: string; mimeType: string }[]>([]); + + const raiseComplaintMutation = trpc.user.complaint.raise.useMutation(); + const { upload, isUploading } = useUploadToObjectStorage(); const pickComplaintImage = usePickImage({ - setFile: (files) => setComplaintImages(prev => [...prev, ...files]), + setFile: async (assets: any) => { + if (!assets || (Array.isArray(assets) && assets.length === 0)) { + return; + } + + const files = Array.isArray(assets) ? assets : [assets]; + const newImages = files.map((asset: any) => ({ + uri: asset.uri, + mimeType: asset.mimeType || 'image/jpeg', + })); + + setComplaintImages(prev => [...prev, ...newImages]); + }, multiple: true, }); - const handleSubmit = () => { + const handleRemoveImage = (image: { uri: string; mimeType: string }) => { + setComplaintImages(prev => prev.filter(img => img.uri !== image.uri)); + }; + + const handleSubmit = async () => { if (!complaintBody.trim()) { Alert.alert('Error', 'Please enter complaint details'); return; } - raiseComplaintMutation.mutate( - { - complaintBody: complaintBody.trim(), - images: complaintImages, - }, - { - onSuccess: () => { - Alert.alert('Success', 'Complaint raised successfully'); - setComplaintBody(''); - setComplaintImages([]); - onClose(); - }, - onError: (error: any) => { - Alert.alert('Error', error.message || 'Failed to raise complaint'); - }, + try { + let imageKeys: string[] = []; + + // Upload images if provided + if (complaintImages.length > 0) { + // Fetch blobs from URIs + const imagesWithBlobs = await Promise.all( + complaintImages.map(async (img) => { + const response = await fetch(img.uri); + const blob = await response.blob(); + return { blob, mimeType: img.mimeType }; + }) + ); + + const result = await upload({ + images: imagesWithBlobs, + contextString: 'complaint', + }); + imageKeys = result.keys; } - ); + + // Submit complaint + await raiseComplaintMutation.mutateAsync({ + orderId, + complaintBody: complaintBody.trim(), + imageKeys, + }); + + Alert.alert('Success', 'Complaint raised successfully'); + setComplaintBody(''); + setComplaintImages([]); + onClose(); + } catch (error: any) { + Alert.alert('Error', error.message || 'Failed to raise complaint'); + } }; if (!open) return null; @@ -109,14 +111,15 @@ export default function ComplaintForm({ open, onClose, orderId }: ComplaintFormP images={complaintImages} onAddImage={pickComplaintImage} onRemoveImage={(uri) => setComplaintImages(prev => prev.filter(img => img.uri !== uri))} + allowMultiple={true} /> - {raiseComplaintMutation.isPending ? ( + {isUploading || raiseComplaintMutation.isPending ? ( ) : ( Submit Complaint @@ -125,4 +128,4 @@ export default function ComplaintForm({ open, onClose, orderId }: ComplaintFormP ); -} \ No newline at end of file +} diff --git a/apps/user-ui/src/hooks/useUploadToObjectStorage.ts b/apps/user-ui/src/hooks/useUploadToObjectStorage.ts index 2975caf..5cef774 100644 --- a/apps/user-ui/src/hooks/useUploadToObjectStorage.ts +++ b/apps/user-ui/src/hooks/useUploadToObjectStorage.ts @@ -2,7 +2,7 @@ import { useState } from 'react'; import { trpc } from '../trpc-client'; // import { trpc } from '../src/trpc-client'; -type ContextString = 'review' | 'product_info' | 'notification' | 'store' | 'profile'; +type ContextString = 'review' | 'product_info' | 'notification' | 'store' | 'profile' | 'complaint'; interface UploadInput { blob: Blob;