Repository: island-is/island.is
Pull request #18923: feat(my-pages-assets): Add link to finance mileage transactions
Author: login: thorkellmani
Created: 2025-05-02T11:24:51Z | Merged: 2025-05-02T15:25:32Z

## What

* Add a link button from assets to finance

## Why

* So the user sees his kilometer fee transaction history

## Checklist:

- [ ] I have performed a self-review of my own code
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] Formatting passes locally with my changes
- [ ] I have rebased against main before asking for a review


<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added a new finance mileage link and updated navigation paths related to vehicle mileage and finance transactions.
  - Introduced an additional action button for accessing finance-related mileage pages in the vehicle mileage section.

- **Style**
  - Updated all instances of LinkButton across various sections to use a "text" variant, improving visual consistency and button appearance.

- **Refactor**
  - Simplified and unified LinkButton component props handling for easier maintenance and enhanced flexibility.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/libs/portals/my-pages/assets/src/lib/messages.ts b/libs/portals/my-pages/assets/src/lib/messages.ts
index e8ec6fdca6c3..a39b67bc0765 100644
--- a/libs/portals/my-pages/assets/src/lib/messages.ts
+++ b/libs/portals/my-pages/assets/src/lib/messages.ts
@@ -958,6 +958,10 @@ export const vehicleMessage = defineMessages({
     id: 'sp.vehicles:bulk-post-mileage',
     defaultMessage: 'Magnskrá kílómetrastöðu',
   },
+  financeMileageLink: {
+    id: 'sp.vehicles:finance-mileage-link',
+    defaultMessage: 'Skoða kílómetragjaldshreyfingar',
+  },
   bulkPostMileageWithFile: {
     id: 'sp.vehicles:bulk-post-mileage-with-file',
     defaultMessage: 'Magnskrá með skjali',
diff --git a/libs/portals/my-pages/assets/src/lib/paths.ts b/libs/portals/my-pages/assets/src/lib/paths.ts
index ad90e22e8636..57d7592bff29 100644
--- a/libs/portals/my-pages/assets/src/lib/paths.ts
+++ b/libs/portals/my-pages/assets/src/lib/paths.ts
@@ -6,7 +6,10 @@ export enum AssetsPaths {
   AssetsMyVehicles = '/eignir/okutaeki/min-okutaeki',
   AssetsVehiclesDetail = '/eignir/okutaeki/min-okutaeki/:id',
   AssetsVehiclesDetailMileage = '/eignir/okutaeki/min-okutaeki/:id/kilometrastada',
+
+  // If updated, also update `LinkAssetsVehiclesBulkMileage` in the finance paths file (libs/portals/my-pages/finance/src/lib/paths.ts)
   AssetsVehiclesBulkMileage = '/eignir/okutaeki/skra-kilometrastodu',
+
   AssetsVehiclesBulkMileageUpload = '/eignir/okutaeki/skra-kilometrastodu/hlada-upp',
   AssetsVehiclesBulkMileageJobOverview = '/eignir/okutaeki/skra-kilometrastodu/runuverk',
   AssetsVehiclesBulkMileageJobDetail = '/eignir/okutaeki/skra-kilometrastodu/runuverk/:id',
@@ -22,4 +25,8 @@ export enum AssetsPaths {
   AssetsIntellectualPropertiesTrademark = '/eignir/hugverkarettindi/vorumerki/:id',
   AssetsIntellectualPropertiesPatent = '/eignir/hugverkarettindi/einkaleyfi/:id',
   AssetsIntellectualPropertiesDesign = '/eignir/hugverkarettindi/honnun/:id',
+
+  //LINKS
+  //If updated, also update `FinanceTransactionVehicleMileage` in the finance paths file (libs/portals/my-pages/finance/src/lib/paths.ts)
+  LinkFinanceTransactionVehicleMileage = '/fjarmal/faerslur/kilometragjald',
 }
diff --git a/libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileage.tsx b/libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileage.tsx
index f52d6bdb815c..897068167f0d 100644
--- a/libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileage.tsx
+++ b/libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileage.tsx
@@ -40,7 +40,7 @@ const VehicleBulkMileage = () => {
   const [search, setSearch] = useState<string>()
   const [displayFilters, setDisplayFilters] = useState<boolean>(false)
 
-  const [vehicleListQuery, { data, loading, error, called }] =
+  const [vehicleListQuery, { data, loading, error }] =
     useVehiclesListLazyQuery()
 
   useEffect(() => {
diff --git a/libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileageSubData.tsx b/libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileageSubData.tsx
index 13d1dac55d2d..03818d336ed4 100644
--- a/libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileageSubData.tsx
+++ b/libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileageSubData.tsx
@@ -4,8 +4,9 @@ import {
   SimpleBarChart,
   formatDate,
   numberFormat,
+  LinkButton,
 } from '@island.is/portals/my-pages/core'
-import { Box, Text, Button } from '@island.is/island-ui/core'
+import { Box, Text, Button, Inline } from '@island.is/island-ui/core'
 import { AssetsPaths } from '../../lib/paths'
 import { vehicleMessage } from '../../lib/messages'
 import { useLocale } from '@island.is/localization'
@@ -143,22 +144,32 @@ export const VehicleBulkMileageSubData = ({
         />
       ) : undefined}
       <Box marginTop={2}>
-        <LinkResolver
-          href={AssetsPaths.AssetsVehiclesDetailMileage.replace(
-            ':id',
-            vehicleId.toString(),
-          )}
-        >
-          <Button
-            colorScheme="white"
+        <Inline space={1}>
+          <LinkResolver
+            href={AssetsPaths.AssetsVehiclesDetailMileage.replace(
+              ':id',
+              vehicleId.toString(),
+            )}
+          >
+            <Button
+              icon="arrowForward"
+              iconType="outline"
+              size="small"
+              variant="utility"
+              colorScheme="white"
+            >
+              {formatMessage(vehicleMessage.viewRegistrationHistory)}
+            </Button>
+          </LinkResolver>
+          <LinkButton
+            key="finance"
+            to={AssetsPaths.LinkFinanceTransactionVehicleMileage}
+            text={formatMessage(vehicleMessage.financeMileageLink)}
             icon="arrowForward"
-            iconType="outline"
-            size="small"
             variant="utility"
-          >
-            {formatMessage(vehicleMessage.viewRegistrationHistory)}
-          </Button>
-        </LinkResolver>
+            colorScheme="white"
+          />
+        </Inline>
       </Box>
     </Box>
   )
diff --git a/libs/portals/my-pages/core/src/components/InfoLine/InfoLine.tsx b/libs/portals/my-pages/core/src/components/InfoLine/InfoLine.tsx
index e1eb69666b6a..0aac8db12d25 100644
--- a/libs/portals/my-pages/core/src/components/InfoLine/InfoLine.tsx
+++ b/libs/portals/my-pages/core/src/components/InfoLine/InfoLine.tsx
@@ -155,6 +155,7 @@ export const InfoLine = ({
                 {button.type === 'link' ? (
                   <LinkButton
                     to={button.to}
+                    variant="text"
                     text={
                       button.label
                         ? formatMessage(button.label)
diff --git a/libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx b/libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx
index 09de0c36f249..50c738542402 100644
--- a/libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx
+++ b/libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx
@@ -1,34 +1,24 @@
-import { Button, ButtonProps, Icon } from '@island.is/island-ui/core'
+import { Button, ButtonProps, ButtonTypes } from '@island.is/island-ui/core'
 import { isExternalLink } from '../../utils/isExternalLink'
 import LinkResolver from '../LinkResolver/LinkResolver'
 import * as styles from './LinkButton.css'
 
-interface SharedProps {
+interface Props {
   to: string
   text: string
+  icon?: ButtonProps['icon']
   size?: ButtonProps['size']
   disabled?: ButtonProps['disabled']
   skipOutboundTrack?: boolean
 }
 
-type Props = {
-  variant?: 'primary' | 'ghost' | 'utility' | 'text'
-  icon?: ButtonProps['icon']
-}
+type LinkButtonProps = Props & ButtonTypes
 
-type LinkButtonProps = SharedProps & Props
-
-export const LinkButton = ({
-  variant = 'text',
-  size,
-  to,
-  text,
-  icon,
-  disabled,
-  skipOutboundTrack,
-}: LinkButtonProps) => {
+export const LinkButton = (props: LinkButtonProps) => {
+  const { size, to, text, icon, disabled, skipOutboundTrack, ...rest } = props
   const isExternal = isExternalLink(to)
-  if (variant === 'text') {
+
+  if (rest.variant === 'text') {
     return disabled ? (
       <Button
         size={size ?? 'small'}
@@ -36,6 +26,7 @@ export const LinkButton = ({
         disabled
         icon={isExternal ? 'open' : undefined}
         iconType={isExternal ? 'outline' : undefined}
+        {...rest}
       >
         {text}
       </Button>
@@ -52,6 +43,7 @@ export const LinkButton = ({
           unfocusable
           icon={isExternal ? 'open' : icon ?? undefined}
           iconType={isExternal ? 'outline' : undefined}
+          {...rest}
         >
           {text}
         </Button>
@@ -60,13 +52,12 @@ export const LinkButton = ({
   }
   return disabled ? (
     <Button
-      colorScheme="default"
       icon={icon}
       iconType="outline"
       size={size ?? 'default'}
       disabled
-      variant={variant ?? 'utility'}
       unfocusable
+      {...rest}
     >
       {text}
     </Button>
@@ -77,14 +68,13 @@ export const LinkButton = ({
       href={to}
     >
       <Button
-        colorScheme="default"
         icon={icon}
         iconType="outline"
         size={size ?? 'default'}
         type="text"
         as="span"
-        variant={variant ?? 'utility'}
         unfocusable
+        {...rest}
       >
         {text}
       </Button>
diff --git a/libs/portals/my-pages/core/src/components/UserInfoLine/UserInfoLine.tsx b/libs/portals/my-pages/core/src/components/UserInfoLine/UserInfoLine.tsx
index daaae7799982..9f9fe4e4d1fb 100644
--- a/libs/portals/my-pages/core/src/components/UserInfoLine/UserInfoLine.tsx
+++ b/libs/portals/my-pages/core/src/components/UserInfoLine/UserInfoLine.tsx
@@ -163,6 +163,7 @@ export const UserInfoLine: FC<React.PropsWithChildren<Props>> = ({
             >
               <LinkButton
                 to={editLink.url}
+                variant="text"
                 icon={editLink.icon}
                 text={
                   editLink.title
diff --git a/libs/portals/my-pages/finance/src/lib/paths.ts b/libs/portals/my-pages/finance/src/lib/paths.ts
index 09a7a8516c41..39ec722479c2 100644
--- a/libs/portals/my-pages/finance/src/lib/paths.ts
+++ b/libs/portals/my-pages/finance/src/lib/paths.ts
@@ -3,7 +3,10 @@ export enum FinancePaths {
   FinanceStatus = '/fjarmal/stada',
   FinanceTransactions = '/fjarmal/faerslur',
   FinanceTransactionCategories = '/fjarmal/faerslur/flokkar',
+
+  // If updated, also update `LinkFinanceTransactionVehicleMileage` in the assets paths file (libs/portals/my-pages/assets/src/lib/paths.ts)
   FinanceTransactionVehicleMileage = '/fjarmal/faerslur/kilometragjald',
+
   FinanceTransactionPeriods = '/fjarmal/faerslur/timabil',
   FinanceEmployeeClaims = '/fjarmal/laungreidendakrofur',
   FinanceLocalTax = '/fjarmal/utsvar',
@@ -14,6 +17,10 @@ export enum FinancePaths {
   FinancePaymentsSchedule = '/fjarmal/greidslur/greidsluaetlanir',
   FinancePaymentsHousingBenefits = '/fjarmal/greidslur/husnaedisbaetur',
 
+  // LINKS
+  // If updated, also update `AssetsVehiclesBulkMileage` in the assets paths file (libs/portals/my-pages/assets/src/lib/paths.ts)
+  LinkAssetsVehiclesBulkMileage = '/eignir/okutaeki/skra-kilometrastodu',
+
   // Deprecated with redirects
   FinanceBills = '/fjarmal/greidslusedlar-og-greidslukvittanir',
   FinanceSchedule = '/fjarmal/greidsluaetlanir',
diff --git a/libs/portals/my-pages/finance/src/screens/FinanceTransactionsVehicleMileage/FinanceTransactionsVehicleMileage.tsx b/libs/portals/my-pages/finance/src/screens/FinanceTransactionsVehicleMileage/FinanceTransactionsVehicleMileage.tsx
index aad1601dceab..9576cccbbdec 100644
--- a/libs/portals/my-pages/finance/src/screens/FinanceTransactionsVehicleMileage/FinanceTransactionsVehicleMileage.tsx
+++ b/libs/portals/my-pages/finance/src/screens/FinanceTransactionsVehicleMileage/FinanceTransactionsVehicleMileage.tsx
@@ -20,7 +20,6 @@ import {
   LinkButton,
   m,
 } from '@island.is/portals/my-pages/core'
-import { AssetsPaths } from '@island.is/portals/my-pages/assets'
 import { m as messages } from '../../lib/messages'
 
 import format from 'date-fns/format'
@@ -38,6 +37,7 @@ import * as extraStyles from './FinanceTransactionsVehicleMileage.css'
 import { useFinanceSwapHook } from '../../utils/financeSwapHook'
 import { CustomerRecords } from '../../lib/types'
 import { useGetCustomerRecordsLazyQuery } from './FinanceTransactionsVehicleMileage.generated'
+import { FinancePaths } from '../../lib/paths'
 
 const VEHICLE_MILEAGE_CHARGE_TYPE = 'BM'
 
@@ -111,6 +111,7 @@ const FinanceTransactions = () => {
         <LinkButton
           to={formatMessage(messages.mileageFeeLink)}
           text={formatMessage(messages.mileageFeeLinkLabel)}
+          variant="text"
         />
       </Box>
       <DynamicWrapper>
@@ -214,7 +215,7 @@ const FinanceTransactions = () => {
                 </Filter>
 
                 <LinkButton
-                  to={AssetsPaths.AssetsVehiclesBulkMileage}
+                  to={FinancePaths.LinkAssetsVehiclesBulkMileage}
                   variant="utility"
                   icon="pencil"
                   size="medium"
diff --git a/libs/portals/my-pages/health/src/components/FootNote/helper.tsx b/libs/portals/my-pages/health/src/components/FootNote/helper.tsx
index 5bbc35da6173..ea249899f889 100644
--- a/libs/portals/my-pages/health/src/components/FootNote/helper.tsx
+++ b/libs/portals/my-pages/health/src/components/FootNote/helper.tsx
@@ -22,6 +22,7 @@ export const getFootNoteByType = (
             <LinkButton
               to={formatMessage(messages['physioDisclaimerLink'])}
               text={String(str ?? '')}
+              variant="text"
             />
           ),
         }),
@@ -35,6 +36,7 @@ export const getFootNoteByType = (
             <LinkButton
               to={formatMessage(messages['physioDisclaimerLink'])}
               text={String(str ?? '')}
+              variant="text"
             />
           ),
         }),
@@ -47,6 +49,7 @@ export const getFootNoteByType = (
             <LinkButton
               to={formatMessage(messages['physioDisclaimerLink'])}
               text={String(str ?? '')}
+              variant="text"
             />
           ),
         }),
@@ -63,6 +66,7 @@ export const getFootNoteByType = (
             <LinkButton
               to={formatMessage(messages['occupationalDisclaimerLink'])}
               text={String(str ?? '')}
+              variant="text"
             />
           ),
         }),
@@ -72,7 +76,7 @@ export const getFootNoteByType = (
         first: formatMessage(messages['physioDisclaimer1']),
         second: formatMessage(messages['physioDisclaimer2'], {
           link: (str: React.ReactNode) => (
-            <LinkButton to="" text={String(str ?? '')} />
+            <LinkButton to="" text={String(str ?? '')} variant="text" />
           ),
         }),
       }
diff --git a/libs/portals/my-pages/health/src/components/Table/HealthTable.tsx b/libs/portals/my-pages/health/src/components/Table/HealthTable.tsx
index 18d271fe11ec..dc14d4941ca5 100644
--- a/libs/portals/my-pages/health/src/components/Table/HealthTable.tsx
+++ b/libs/portals/my-pages/health/src/components/Table/HealthTable.tsx
@@ -35,7 +35,11 @@ export const HealthTable = ({
                 {row.map((item, ii) => (
                   <T.Data key={ii}>
                     {item.type === 'link' && item.url ? (
-                      <LinkButton to={item.url} text={item.value} />
+                      <LinkButton
+                        to={item.url}
+                        text={item.value}
+                        variant="text"
+                      />
                     ) : (
                       <Text variant="small" as="span">
                         {item.value}
diff --git a/libs/portals/my-pages/health/src/screens/AidsAndNutrition/Aids.tsx b/libs/portals/my-pages/health/src/screens/AidsAndNutrition/Aids.tsx
index 27c3b9c03568..f2225d171b95 100644
--- a/libs/portals/my-pages/health/src/screens/AidsAndNutrition/Aids.tsx
+++ b/libs/portals/my-pages/health/src/screens/AidsAndNutrition/Aids.tsx
@@ -123,6 +123,7 @@ const Aids = ({ data }: Props) => {
         <LinkButton
           to={formatMessage(messages['aidsDescriptionLink'])}
           text={formatMessage(messages.aidsDescriptionInfo)}
+          variant="text"
         />
       </Box>
     </Box>
diff --git a/libs/portals/my-pages/health/src/screens/AidsAndNutrition/Nutrition.tsx b/libs/portals/my-pages/health/src/screens/AidsAndNutrition/Nutrition.tsx
index de9d6c662524..cae76a4e0752 100644
--- a/libs/portals/my-pages/health/src/screens/AidsAndNutrition/Nutrition.tsx
+++ b/libs/portals/my-pages/health/src/screens/AidsAndNutrition/Nutrition.tsx
@@ -95,6 +95,7 @@ const Nutrition = ({ data }: Props) => {
         <LinkButton
           to={formatMessage(messages['nutritionDescriptionLink'])}
           text={formatMessage(messages.nutritionDescriptionInfo)}
+          variant="text"
         />
       </Box>
     </Box>
diff --git a/libs/portals/my-pages/health/src/screens/Payments/wrapper/PaymentsWrapper.tsx b/libs/portals/my-pages/health/src/screens/Payments/wrapper/PaymentsWrapper.tsx
index 2dafd27cb6fa..6fcc80d75e5b 100644
--- a/libs/portals/my-pages/health/src/screens/Payments/wrapper/PaymentsWrapper.tsx
+++ b/libs/portals/my-pages/health/src/screens/Payments/wrapper/PaymentsWrapper.tsx
@@ -40,6 +40,7 @@ export const PaymentsWrapper = ({ children, pathname }: Props) => {
         <LinkButton
           to={formatMessage(messages.readAboutPaymentParticipationSystemsLink)}
           text={formatMessage(messages.readAboutPaymentParticipationSystems)}
+          variant="text"
         />
       </Box>
     </IntroWrapper>
diff --git a/libs/portals/my-pages/health/src/screens/Therapies/components/TherapiesTabContent/TherapiesTabContent.tsx b/libs/portals/my-pages/health/src/screens/Therapies/components/TherapiesTabContent/TherapiesTabContent.tsx
index 84d668859a02..210eaef58cb3 100644
--- a/libs/portals/my-pages/health/src/screens/Therapies/components/TherapiesTabContent/TherapiesTabContent.tsx
+++ b/libs/portals/my-pages/health/src/screens/Therapies/components/TherapiesTabContent/TherapiesTabContent.tsx
@@ -136,7 +136,9 @@ export const TherapiesTabContent = ({
         <Divider />
       </Stack>
       <FootNote type={data?.[0]?.id.toString()} />
-      {link && linkText && <LinkButton to={link} text={linkText} />}
+      {link && linkText && (
+        <LinkButton to={link} text={linkText} variant="text" />
+      )}
     </Box>
   )
 }
diff --git a/libs/portals/my-pages/health/src/screens/Vaccinations/tables/SortedVaccinationsTable.tsx b/libs/portals/my-pages/health/src/screens/Vaccinations/tables/SortedVaccinationsTable.tsx
index 1bf14c4c47f0..1907cd1ead28 100644
--- a/libs/portals/my-pages/health/src/screens/Vaccinations/tables/SortedVaccinationsTable.tsx
+++ b/libs/portals/my-pages/health/src/screens/Vaccinations/tables/SortedVaccinationsTable.tsx
@@ -89,6 +89,7 @@ export const SortedVaccinationsTable = ({ data }: Props) => {
                             size="small"
                             to={vaccination.url ?? '/'}
                             text={vaccination.name ?? ''}
+                            variant="text"
                           />
                         ) : (
                           vaccination.name ?? ''
diff --git a/libs/portals/my-pages/licenses/src/utils/dataMapper.tsx b/libs/portals/my-pages/licenses/src/utils/dataMapper.tsx
index 68fa8733b56b..f718b29d0cce 100644
--- a/libs/portals/my-pages/licenses/src/utils/dataMapper.tsx
+++ b/libs/portals/my-pages/licenses/src/utils/dataMapper.tsx
@@ -532,6 +532,7 @@ export const getLicenseDetailHeading = (
                 <LinkButton
                   to={formatMessage(m.ehicDescriptionLink)}
                   text={str ?? ''}
+                  variant="text"
                 />
               ),
             })}
diff --git a/libs/portals/my-pages/social-insurance-maintenance/src/screens/PaymentPlan/PaymentPlan.tsx b/libs/portals/my-pages/social-insurance-maintenance/src/screens/PaymentPlan/PaymentPlan.tsx
index 5f2545392fa3..b21af7cdd75f 100644
--- a/libs/portals/my-pages/social-insurance-maintenance/src/screens/PaymentPlan/PaymentPlan.tsx
+++ b/libs/portals/my-pages/social-insurance-maintenance/src/screens/PaymentPlan/PaymentPlan.tsx
@@ -83,6 +83,7 @@ const PaymentPlan = () => {
                     <LinkButton
                       to={formatMessage(m.maintenanceFooterLinkUrl)}
                       text={str ?? ''}
+                      variant="text"
                     />
                   ),
                 })}


Reviews:
user: login: disaerna
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T13:54:54Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>♻️ Duplicate comments (1)</summary><blockquote>

<details>
<summary>libs/portals/my-pages/assets/src/lib/paths.ts (1)</summary><blockquote>

`26-27`: **Add cross-reference comments for linked paths.**

The new `LinkFinanceTransactionVehicleMileage` path creates a reference to a finance section, but lacks documentation of this cross-module dependency. When paths are referenced across different modules, it's helpful to document these relationships to prevent breaking changes.



Consider adding a comment to indicate that this path is referenced in other files and also add a corresponding comment in the finance paths file:

```diff
  //LINKS
- LinkFinanceTransactionVehicleMileage = '/fjarmal/faerslur/kilometragjald',
+ // Referenced in VehicleBulkMileageSubData.tsx
+ LinkFinanceTransactionVehicleMileage = '/fjarmal/faerslur/kilometragjald',
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 6c58f12bc851b9482a33897cd7af61df20474068 and cf27ef0636f2bc0a95536c9d9a13aac4b5709521.

</details>

<details>
<summary>📒 Files selected for processing (18)</summary>

* `libs/portals/my-pages/assets/src/lib/messages.ts` (1 hunks)
* `libs/portals/my-pages/assets/src/lib/paths.ts` (1 hunks)
* `libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileage.tsx` (1 hunks)
* `libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileageSubData.tsx` (2 hunks)
* `libs/portals/my-pages/core/src/components/InfoLine/InfoLine.tsx` (1 hunks)
* `libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx` (3 hunks)
* `libs/portals/my-pages/core/src/components/UserInfoLine/UserInfoLine.tsx` (1 hunks)
* `libs/portals/my-pages/finance/src/lib/paths.ts` (1 hunks)
* `libs/portals/my-pages/finance/src/screens/FinanceTransactionsVehicleMileage/FinanceTransactionsVehicleMileage.tsx` (3 hunks)
* `libs/portals/my-pages/health/src/components/FootNote/helper.tsx` (5 hunks)
* `libs/portals/my-pages/health/src/components/Table/HealthTable.tsx` (1 hunks)
* `libs/portals/my-pages/health/src/screens/AidsAndNutrition/Aids.tsx` (1 hunks)
* `libs/portals/my-pages/health/src/screens/AidsAndNutrition/Nutrition.tsx` (1 hunks)
* `libs/portals/my-pages/health/src/screens/Payments/wrapper/PaymentsWrapper.tsx` (1 hunks)
* `libs/portals/my-pages/health/src/screens/Therapies/components/TherapiesTabContent/TherapiesTabContent.tsx` (1 hunks)
* `libs/portals/my-pages/health/src/screens/Vaccinations/tables/SortedVaccinationsTable.tsx` (1 hunks)
* `libs/portals/my-pages/licenses/src/utils/dataMapper.tsx` (1 hunks)
* `libs/portals/my-pages/social-insurance-maintenance/src/screens/PaymentPlan/PaymentPlan.tsx` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>📓 Path-based instructions (1)</summary>

<details>
<summary>`libs/**/*`: "Confirm that the code adheres to the following:
- Reusability of components and hooks across different NextJS apps.
- TypeScript usage for defining props and exportin...</summary>

> `libs/**/*`: "Confirm that the code adheres to the following:
> - Reusability of components and hooks across different NextJS apps.
> - TypeScript usage for defining props and exporting types.
> - Effective tree-shaking and bundling practices."
> 

- `libs/portals/my-pages/licenses/src/utils/dataMapper.tsx`
- `libs/portals/my-pages/health/src/screens/Payments/wrapper/PaymentsWrapper.tsx`
- `libs/portals/my-pages/health/src/screens/Vaccinations/tables/SortedVaccinationsTable.tsx`
- `libs/portals/my-pages/health/src/screens/AidsAndNutrition/Aids.tsx`
- `libs/portals/my-pages/social-insurance-maintenance/src/screens/PaymentPlan/PaymentPlan.tsx`
- `libs/portals/my-pages/core/src/components/UserInfoLine/UserInfoLine.tsx`
- `libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileage.tsx`
- `libs/portals/my-pages/health/src/screens/AidsAndNutrition/Nutrition.tsx`
- `libs/portals/my-pages/health/src/screens/Therapies/components/TherapiesTabContent/TherapiesTabContent.tsx`
- `libs/portals/my-pages/core/src/components/InfoLine/InfoLine.tsx`
- `libs/portals/my-pages/health/src/components/FootNote/helper.tsx`
- `libs/portals/my-pages/health/src/components/Table/HealthTable.tsx`
- `libs/portals/my-pages/finance/src/lib/paths.ts`
- `libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileageSubData.tsx`
- `libs/portals/my-pages/assets/src/lib/paths.ts`
- `libs/portals/my-pages/finance/src/screens/FinanceTransactionsVehicleMileage/FinanceTransactionsVehicleMileage.tsx`
- `libs/portals/my-pages/assets/src/lib/messages.ts`
- `libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx`

</details>

</details><details>
<summary>🧬 Code Graph Analysis (3)</summary>

<details>
<summary>libs/portals/my-pages/health/src/screens/Therapies/components/TherapiesTabContent/TherapiesTabContent.tsx (1)</summary><blockquote>

<details>
<summary>libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx (1)</summary>

* `LinkButton` (17-84)

</details>

</blockquote></details>
<details>
<summary>libs/portals/my-pages/health/src/components/FootNote/helper.tsx (1)</summary><blockquote>

<details>
<summary>libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx (1)</summary>

* `LinkButton` (17-84)

</details>

</blockquote></details>
<details>
<summary>libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileageSubData.tsx (1)</summary><blockquote>

<details>
<summary>libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx (1)</summary>

* `LinkButton` (17-84)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (5)</summary>

* GitHub Check: linting (portals-my-pages-assets,portals-my-pages-education,service-portal,system-e2e,portals-my-...
* GitHub Check: build (service-portal)
* GitHub Check: tests (portals-my-pages-applications,portals-my-pages-assets,portals-my-pages-consent,portals-my-...
* GitHub Check: tests (service-portal)
* GitHub Check: tests (my-pages-air-discount)

</details>

<details>
<summary>🔇 Additional comments (25)</summary><blockquote>

<details>
<summary>libs/portals/my-pages/health/src/screens/Payments/wrapper/PaymentsWrapper.tsx (1)</summary>

`42-43`: **Good standardization of LinkButton variant.**

Adding the explicit `variant="text"` property aligns this component with the standardized approach to LinkButton styling across the portal.

</details>
<details>
<summary>libs/portals/my-pages/social-insurance-maintenance/src/screens/PaymentPlan/PaymentPlan.tsx (1)</summary>

`85-86`: **Good standardization of LinkButton variant.**

Adding the explicit `variant="text"` property ensures consistent styling of link buttons throughout the application.

</details>
<details>
<summary>libs/portals/my-pages/health/src/screens/AidsAndNutrition/Aids.tsx (1)</summary>

`125-126`: **Good standardization of LinkButton variant.**

The addition of `variant="text"` property to the LinkButton component ensures consistent styling across the application and aligns with the broader component standardization effort.

</details>
<details>
<summary>libs/portals/my-pages/licenses/src/utils/dataMapper.tsx (1)</summary>

`534-535`: **Good standardization of LinkButton variant.**

Adding the explicit `variant="text"` property ensures consistent styling of link buttons throughout the application, particularly in this case for the European Health Insurance Card (EHIC) information link.

</details>
<details>
<summary>libs/portals/my-pages/core/src/components/UserInfoLine/UserInfoLine.tsx (1)</summary>

`164-174`: **Standardizing button styling with explicit variant property**

Adding the `variant="text"` prop to the LinkButton component ensures consistent styling across the application, aligning with the standardization effort visible across multiple components.

</details>
<details>
<summary>libs/portals/my-pages/health/src/screens/AidsAndNutrition/Nutrition.tsx (1)</summary>

`95-99`: **Consistent UI styling with explicit variant property**

The addition of the `variant="text"` property ensures the LinkButton component maintains consistent styling with other LinkButton instances throughout the application.

</details>
<details>
<summary>libs/portals/my-pages/health/src/screens/Vaccinations/tables/SortedVaccinationsTable.tsx (1)</summary>

`86-93`: **Ensuring UI consistency for nested table link buttons**

Adding the `variant="text"` property to this LinkButton within the nested table ensures consistent styling with other LinkButton instances throughout the application, improving visual coherence across components.

</details>
<details>
<summary>libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileage.tsx (1)</summary>

`43-44`: **Good cleanup - removed unused variable**

Removing the unused `called` property from the destructured hook result is a good practice that improves code cleanliness without affecting functionality.

</details>
<details>
<summary>libs/portals/my-pages/core/src/components/InfoLine/InfoLine.tsx (1)</summary>

`158-158`: **Great addition of explicit variant prop.**

Adding the `variant="text"` prop to the LinkButton component ensures consistent styling across the application and makes the component's appearance more predictable.

</details>
<details>
<summary>libs/portals/my-pages/health/src/components/Table/HealthTable.tsx (1)</summary>

`38-42`: **Good standardization of LinkButton styling.**

Adding the `variant="text"` prop here aligns with the consistent pattern being implemented across multiple components, ensuring visual consistency throughout the application.

</details>
<details>
<summary>libs/portals/my-pages/finance/src/lib/paths.ts (1)</summary>

`17-18`: **Well-structured addition of new path for cross-module navigation.**

Adding the `LinkAssetsVehiclesBulkMileage` path with a clear comment separator for links is a good approach. This facilitates the new feature allowing users to navigate from assets to finance sections.

</details>
<details>
<summary>libs/portals/my-pages/health/src/screens/Therapies/components/TherapiesTabContent/TherapiesTabContent.tsx (1)</summary>

`139-141`: **Improved code formatting and consistent button styling.**

The changes here improve both readability and consistency by:
1. Adding parentheses around the conditional rendering
2. Adding the `variant="text"` prop to standardize link button appearance

</details>
<details>
<summary>libs/portals/my-pages/health/src/components/FootNote/helper.tsx (1)</summary>

`25-25`: **Consistent application of `variant="text"` to the LinkButton components.**

The addition of `variant="text"` to all LinkButton instances ensures a consistent visual styling across the application. This matches the refactored LinkButton component that now handles variant styling properly.



Also applies to: 39-39, 52-52, 69-69, 79-79

</details>
<details>
<summary>libs/portals/my-pages/finance/src/screens/FinanceTransactionsVehicleMileage/FinanceTransactionsVehicleMileage.tsx (3)</summary>

`40-40`: **Import of FinancePaths replaces AssetsPaths.**

The change properly updates the dependency to use the local paths from the finance module instead of importing from assets module. This improves modularity by keeping dependencies local when possible.

---

`114-114`: **Consistent styling with `variant="text"` added to LinkButton.**

Adding the `variant="text"` property ensures consistent styling with other LinkButton instances throughout the application, aligning with the refactored LinkButton component.

---

`217-219`: **Updated path reference to use the FinancePaths enum.**

The path reference has been correctly updated to use the FinancePaths enum rather than the AssetsPaths enum, maintaining proper encapsulation between modules.

</details>
<details>
<summary>libs/portals/my-pages/assets/src/lib/messages.ts (1)</summary>

`961-964`: **New message added for finance mileage link.**

This addition correctly defines a new localized message for the finance mileage link that will be displayed in the UI. The message follows the established pattern of the file.

</details>
<details>
<summary>libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileageSubData.tsx (2)</summary>

`7-7`: **Added necessary imports for new UI components.**

The imports for `LinkButton` and `Inline` are correctly added to support the new UI layout with horizontally arranged buttons.



Also applies to: 9-9

---

`147-173`: **Improved button layout with added link to finance mileage transactions.**

The UI has been enhanced with a horizontal button layout using the `Inline` component. The changes include:

1. A properly styled button for viewing registration history with consistent icon and styling
2. A new link to finance mileage transactions using the newly defined path and localized message

This implementation successfully adds the requested feature to link from the assets section to the finance section for viewing kilometer fee transaction history.


The code correctly uses TypeScript for prop definitions and ensures reusability of components across different NextJS apps in line with the coding guidelines.

</details>
<details>
<summary>libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx (6)</summary>

`1-1`: **Good addition of ButtonTypes import.**

Nice update to include ButtonTypes in your import, which aligns with the interface refactoring and improves type safety.

---

`6-13`: **Well-structured props interface with improved type safety.**

The consolidation of previously separate interfaces into a single `Props` interface with the addition of the optional `icon` property improves clarity and maintainability. Good use of TypeScript's type system by referencing ButtonProps for type consistency.

---

`15-15`: **Good type composition.**

Nice simplification of the component props type by combining the Props interface with ButtonTypes from the UI library. This approach provides better type safety and makes the component more extensible.

---

`17-19`: **Clean props handling with rest parameter pattern.**

The updated parameter handling improves the component's flexibility by extracting specific props and collecting the rest, allowing for better prop forwarding.

---

`21-52`: **Proper variant handling and prop forwarding for text variant.**

The component correctly checks for text variant and forwards all remaining props to the Button component, enhancing reusability across different contexts.

---

`54-83`: **Clean prop forwarding in default button rendering.**

The addition of the rest spread operator ensures all additional props are properly passed to the underlying Button component, improving flexibility while maintaining the core button behavior.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T14:26:09Z
user: login: thorkellmani
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-02T14:29:57Z
user: login: coderabbitai[bot]
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T14:38:51Z

Review comments:
diff_hunk: @@ -22,4 +22,7 @@ export enum AssetsPaths {
   AssetsIntellectualPropertiesTrademark = '/eignir/hugverkarettindi/vorumerki/:id',
   AssetsIntellectualPropertiesPatent = '/eignir/hugverkarettindi/einkaleyfi/:id',
   AssetsIntellectualPropertiesDesign = '/eignir/hugverkarettindi/honnun/:id',
+
+  //LINKS
+  LinkFinanceTransactionVehicleMileage = '/fjarmal/faerslur/kilometragjald',
path: libs/portals/my-pages/assets/src/lib/paths.ts
user: login: disaerna
body: Mætti bæta við commenti bæði í þetta skjal og finance paths skjalið hjá linkunum sem er verið að vísa í (s.s setja komment hjá þessum link undir fjármál og svo öfugt) þar sem segir að það sé verið að vísa í hann annarstaðar, þannig ef hann breytist þá er séns að viðkomandi viti af því 🥳 
created_at: 2025-05-02T13:45:22Z
author_association: CONTRIBUTOR
diff_hunk: @@ -52,21 +43,22 @@ export const LinkButton = ({
           unfocusable
           icon={isExternal ? 'open' : icon ?? undefined}
           iconType={isExternal ? 'outline' : undefined}
+          {...rest}
         >
           {text}
         </Button>
       </LinkResolver>
     )
   }
+  console.log(props.variant)
path: libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Remove debugging console.log statement.**

The console.log statement appears to be debugging code and should be removed before merging to production.

```diff
-  console.log(props.variant)
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion

`````

</details>

<!-- suggestion_end -->

<details>
<summary>🤖 Prompt for AI Agents (early access)</summary>

```
In libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx at line 53, remove the console.log statement that outputs props.variant, as it is a debugging statement and should not be present in production code.
```

</details>

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-05-02T14:26:08Z
author_association: CONTRIBUTOR
diff_hunk: @@ -22,4 +22,7 @@ export enum AssetsPaths {
   AssetsIntellectualPropertiesTrademark = '/eignir/hugverkarettindi/vorumerki/:id',
   AssetsIntellectualPropertiesPatent = '/eignir/hugverkarettindi/einkaleyfi/:id',
   AssetsIntellectualPropertiesDesign = '/eignir/hugverkarettindi/honnun/:id',
+
+  //LINKS
+  LinkFinanceTransactionVehicleMileage = '/fjarmal/faerslur/kilometragjald',
path: libs/portals/my-pages/assets/src/lib/paths.ts
user: login: thorkellmani
body: Dönn
created_at: 2025-05-02T14:29:57Z
author_association: MEMBER

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-05-02T11:24:58Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- This is an auto-generated comment: rate limited by coderabbit.ai -->

> [!WARNING]
> ## Rate limit exceeded
> 
> @thorkellmani has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait **10 minutes and 45 seconds** before requesting another review.
> 
> <details>
> <summary>⌛ How to resolve this issue?</summary>
> 
> After the wait time has elapsed, a review can be triggered using the `@coderabbitai review` command as a PR comment. Alternatively, push new commits to this PR.
> 
> We recommend that you space out your commits to avoid hitting the rate limit.
> 
> </details>
> 
> 
> <details>
> <summary>🚦 How do rate limits work?</summary>
> 
> CodeRabbit enforces hourly rate limits for each developer per organization.
> 
> Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.
> 
> Please see our [FAQ](https://docs.coderabbit.ai/faq) for further information.
> 
> </details>
> 
> <details>
> <summary>📥 Commits</summary>
> 
> Reviewing files that changed from the base of the PR and between cf27ef0636f2bc0a95536c9d9a13aac4b5709521 and 6300b52044aa4d9e566778956a04b54a3e4f3c41.
> 
> </details>
> 
> <details>
> <summary>📒 Files selected for processing (3)</summary>
> 
> * `libs/portals/my-pages/assets/src/lib/paths.ts` (2 hunks)
> * `libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx` (4 hunks)
> * `libs/portals/my-pages/finance/src/lib/paths.ts` (2 hunks)
> 
> </details>

<!-- end of auto-generated comment: rate limited by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough

This set of changes primarily updates the visual and structural behavior of the `LinkButton` component across multiple modules by introducing or explicitly specifying a `variant="text"` prop, affecting its appearance throughout the application. The `LinkButton` component itself is refactored to unify its props interface, support an optional icon, and forward all additional props to the underlying button. New navigation paths are added to enums in both the assets and finance libraries to support new mileage-related routes. Several UI components are updated to use these new paths and messages, and some button layouts are enhanced for improved clarity and consistency.

## Changes

| File(s) | Change Summary |
|---------|---------------|
| `libs/portals/my-pages/assets/src/lib/messages.ts` | Added `financeMileageLink` message entry to `vehicleMessage` collection. |
| `libs/portals/my-pages/assets/src/lib/paths.ts` | Added `LinkFinanceTransactionVehicleMileage` enum member to `AssetsPaths`. |
| `libs/portals/my-pages/finance/src/lib/paths.ts` | Added `LinkAssetsVehiclesBulkMileage` enum member to `FinancePaths`. |
| `libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileage.tsx` | Removed unused `called` property from `useVehiclesListLazyQuery` result. |
| `libs/portals/my-pages/assets/src/screens/VehicleBulkMileage/VehicleBulkMileageSubData.tsx` | Redesigned button layout; added finance mileage link button; updated imports and styling. |
| `libs/portals/my-pages/finance/src/screens/FinanceTransactionsVehicleMileage/FinanceTransactionsVehicleMileage.tsx` | Switched from `AssetsPaths` to `FinancePaths` for navigation; added `variant="text"` to a `LinkButton`. |
| `libs/portals/my-pages/core/src/components/LinkButton/LinkButton.tsx` | Refactored props interface, added optional `icon`, unified prop handling, forwarded extra props, removed hardcoded variant/colorScheme, added debug log. |
| `libs/portals/my-pages/core/src/components/InfoLine/InfoLine.tsx`<br>`libs/portals/my-pages/core/src/components/UserInfoLine/UserInfoLine.tsx`<br>`libs/portals/my-pages/health/src/components/FootNote/helper.tsx`<br>`libs/portals/my-pages/health/src/components/Table/HealthTable.tsx`<br>`libs/portals/my-pages/health/src/screens/AidsAndNutrition/Aids.tsx`<br>`libs/portals/my-pages/health/src/screens/AidsAndNutrition/Nutrition.tsx`<br>`libs/portals/my-pages/health/src/screens/Payments/wrapper/PaymentsWrapper.tsx`<br>`libs/portals/my-pages/health/src/screens/Therapies/components/TherapiesTabContent/TherapiesTabContent.tsx`<br>`libs/portals/my-pages/health/src/screens/Vaccinations/tables/SortedVaccinationsTable.tsx`<br>`libs/portals/my-pages/licenses/src/utils/dataMapper.tsx`<br>`libs/portals/my-pages/social-insurance-maintenance/src/screens/PaymentPlan/PaymentPlan.tsx` | Added or updated `variant="text"` prop to `LinkButton` components to standardize appearance. |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant User
    participant VehicleBulkMileageSubData
    participant LinkButton
    participant LinkResolver

    User->>VehicleBulkMileageSubData: Views vehicle mileage data
    VehicleBulkMileageSubData->>LinkResolver: Renders button to detailed mileage page
    VehicleBulkMileageSubData->>LinkButton: Renders button to finance mileage page
    User->>LinkButton: Clicks finance mileage link
    LinkButton->>FinanceTransactionsVehicleMileage: Navigates to finance mileage transactions
```

```mermaid
sequenceDiagram
    participant Component
    participant LinkButton

    Component->>LinkButton: Render with variant="text" prop
    LinkButton->>Button: Forward props and render with text variant
```

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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= -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=island-is/island.is&utm_content=18923):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: CONTRIBUTOR
user: login: nx-cloud[bot]
created_at: 2025-05-02T11:28:29Z
body: 
View your [CI Pipeline Execution ↗](https://cloud.nx.app/cipes/6814d79148cd964236cff8cb?utm_source=pull-request&utm_medium=comment) for commit 6300b52044aa4d9e566778956a04b54a3e4f3c41.

| Command | Status | Duration | Result |
|---------|--------|----------:|--------|
| `nx run-many --projects portals-my-pages-applica...` | ✅ Succeeded | 56s | [View ↗](https://cloud.nx.app/runs/JgPSeMGdLx?utm_source=pull-request&utm_medium=comment) |
| `nx run-many --target=build --projects=service-p...` | ✅ Succeeded | 1m 12s | [View ↗](https://cloud.nx.app/runs/n7aM0UAvfK?utm_source=pull-request&utm_medium=comment) |
| `nx run-many -t lint --output-style=static --pro...` | ✅ Succeeded | 3s | [View ↗](https://cloud.nx.app/runs/XbZEZUiofm?utm_source=pull-request&utm_medium=comment) |
| `nx run-many --projects my-pages-air-discount --...` | ✅ Succeeded | 5s | [View ↗](https://cloud.nx.app/runs/lKRLzrBQGl?utm_source=pull-request&utm_medium=comment) |
| `nx run-many --projects service-portal --target ...` | ✅ Succeeded | 5s | [View ↗](https://cloud.nx.app/runs/Rhut8ztj3E?utm_source=pull-request&utm_medium=comment) |
| `nx run-many --target=build --projects=system-e2...` | ✅ Succeeded | 6s | [View ↗](https://cloud.nx.app/runs/IRbtkJDHUH?utm_source=pull-request&utm_medium=comment) |
| `nx run-many --target=codegen/frontend-client --...` | ✅ Succeeded | 13s | [View ↗](https://cloud.nx.app/runs/4Wt2FvzRFP?utm_source=pull-request&utm_medium=comment) |
| `nx run-many --target=codegen/backend-schema --a...` | ✅ Succeeded | 5s | [View ↗](https://cloud.nx.app/runs/bLDmbSBebn?utm_source=pull-request&utm_medium=comment) |
| `Additional runs (2)` | ✅ Succeeded | ... | [View ↗](https://cloud.nx.app/cipes/6814d79148cd964236cff8cb?utm_source=pull-request&utm_medium=comment) |

---

☁️ [Nx Cloud](https://cloud.nx.app?utm_source=pull-request&utm_medium=comment) last updated this comment at `2025-05-02 14:39:31` UTC

<!-- NX_CLOUD_APP_COMMENT_END -->
author_association: NONE