Repository: aziontech/azion-console-kit
Pull request #2392: [UXE-7133] feat: load and patch in custom pages
Author: login: peterpaulodev
Labels: name: enhancement
description: New feature or request
Created: 2025-04-29T19:26:44Z | Merged: 2025-04-30T18:12:02Z

## Pull Request

### What is the new behavior introduced by this PR?
* Update custom pages services & UI validation
* Adds TTL input to E2E tests and exposes new load/edit services  
* Normalizes page code in creation and adjusts deletion response code  
* Fixes drawer/dialog function naming and improves form validations (TTL/URI)
* Adds Cypress e2e tests for new feats

### Does this PR introduce breaking changes?

- [x] No
- [ ] Yes

### Does this PR introduce UI changes? Add a video or screenshots here.
no

### Does it have a link on Figma?
no

<hr />

### Checklist

#### Make sure your pull request fits the checklist below (when applicable):

- [x] The issue title follows the format: [ISSUE_CODE] TYPE: TITLE
- [x] Commits are tagged with the right word (feat, test, refactor, etc)
- [x] Application responsiveness was tested to different screen sizes
- [x] Code is formatted and linted
- [x] Tags are added to the PR

#### These changes were tested on the following browsers:

- [x] Chrome
- [ ] Edge
- [ ] Firefox
- [ ] Safari
- [ ] Brave



Diff:
diff --git a/cypress/e2e/custom-pages/create-custom-page.cy.js b/cypress/e2e/custom-pages/create-custom-page.cy.js
index afe20d360b..e2b0fced19 100644
--- a/cypress/e2e/custom-pages/create-custom-page.cy.js
+++ b/cypress/e2e/custom-pages/create-custom-page.cy.js
@@ -11,10 +11,12 @@ describe('Custom Pages spec', { tags: ['@dev5'] }, () => {
   })
 
   it('Create a Custom Page', function () {
-    cy.get(selectors.customPages.createButton).click();
-    cy.get(selectors.customPages.nameInput).type(customPageName);
-    cy.get(selectors.customPages.isActiveSwitch).click();
+    cy.get(selectors.customPages.createButton).click()
+    cy.get(selectors.customPages.nameInput).type(customPageName)
+    cy.get(selectors.customPages.isActiveSwitch).click()
+    cy.get(selectors.customPages.ttlDefaultPage).type('1.000')
 
+    // Assert
     cy.get(selectors.form.actionsSubmitButton).click()
     cy.verifyToast('success', 'Custom Page successfully created')
 
diff --git a/cypress/e2e/custom-pages/edit-custom-page.cy.js b/cypress/e2e/custom-pages/edit-custom-page.cy.js
new file mode 100644
index 0000000000..ed23318ba1
--- /dev/null
+++ b/cypress/e2e/custom-pages/edit-custom-page.cy.js
@@ -0,0 +1,33 @@
+import selectors from '../../support/selectors'
+import generateUniqueName from '../../support/utils'
+
+let customPageName = ''
+
+describe('Custom Pages spec', { tags: ['@dev6'] }, () => {
+  beforeEach(() => {
+    cy.login()
+    customPageName = generateUniqueName('Custom Page')
+    cy.openProduct('Custom Pages')
+  })
+
+  it('should edit a custom page', () => {
+    cy.get(selectors.customPages.createButton).click()
+    cy.get(selectors.customPages.nameInput).type(customPageName)
+    cy.get(selectors.customPages.isActiveSwitch).click()
+    cy.get(selectors.customPages.ttlDefaultPage).type('2')
+
+    // Assert
+    cy.get(selectors.form.actionsSubmitButton).click()
+    cy.verifyToast('success', 'Custom Page successfully created')
+
+    cy.get(selectors.list.searchInput).type(`${customPageName}{enter}`)
+    cy.get(selectors.customPages.list.columnName('name')).should('have.text', customPageName)
+    cy.get(selectors.customPages.list.columnName('name')).click()
+    cy.get(selectors.customPages.nameInput).type(`${customPageName}-edit`)
+    cy.get(selectors.customPages.ttlDefaultPage).type('3')
+
+    // Assert
+    cy.get(selectors.form.actionsSubmitButton).click()
+    cy.verifyToast('success', 'Your Custom Page has been updated!')
+  })
+})
diff --git a/cypress/support/selectors/product-selectors/custom-pages.js b/cypress/support/selectors/product-selectors/custom-pages.js
index aa5fa2a735..99dc6f948b 100644
--- a/cypress/support/selectors/product-selectors/custom-pages.js
+++ b/cypress/support/selectors/product-selectors/custom-pages.js
@@ -4,5 +4,6 @@ export default {
   isActiveSwitch: '[data-testid="custom-page__isActive-field__switch"] > .p-inputswitch-slider',
   list: {
     columnName: (columnName) => `[data-testid="list-table-block__column__${columnName}__row"]`
-  }
+  },
+  ttlDefaultPage: '[data-testid="custom-page-form__page__0__ttl__input"] > .p-inputtext'
 }
diff --git a/src/helpers/azion-documentation-catalog.js b/src/helpers/azion-documentation-catalog.js
index 0be90c6605..ccf2cf6816 100644
--- a/src/helpers/azion-documentation-catalog.js
+++ b/src/helpers/azion-documentation-catalog.js
@@ -29,7 +29,7 @@ export const documentationCatalog = {
   waf: () => openSearchResult('waf'),
   wafAllowed: () => openSearchResult('Allowed Rules'),
   wafTuning: () => openSearchResult('Tune'),
-  customPages: () => openSearchResult('Error Responses'),
+  customPages: () => openSearchResult('Error Responses')
 }
 
 export const documentationGuideProducts = {
diff --git a/src/router/routes/custom-pages-routes/index.js b/src/router/routes/custom-pages-routes/index.js
index f90fa02117..f970f6a57a 100644
--- a/src/router/routes/custom-pages-routes/index.js
+++ b/src/router/routes/custom-pages-routes/index.js
@@ -14,6 +14,8 @@ export const customPagesRoutes = {
         listCustomPagesService: CustomPagesServiceV4.listCustomPagesService,
         deleteCustomPagesService: CustomPagesServiceV4.deleteCustomPagesService,
         createCustomPagesService: CustomPagesServiceV4.createCustomPagesService,
+        loadCustomPagesService: CustomPagesServiceV4.loadCustomPagesService,
+        editCustomPagesService: CustomPagesServiceV4.editCustomPagesService,
         documentationService: Helpers.documentationCatalog.customPages
       },
       meta: {
diff --git a/src/services/custom-pages-services/v4/create-custom-pages-services.js b/src/services/custom-pages-services/v4/create-custom-pages-services.js
index 3d15ef63ff..6eb9c35169 100644
--- a/src/services/custom-pages-services/v4/create-custom-pages-services.js
+++ b/src/services/custom-pages-services/v4/create-custom-pages-services.js
@@ -21,7 +21,7 @@ const nullable = (value) => {
 const adapt = (payload) => {
   const pages = payload.pages.map((page) => {
     return {
-      code: page.code === 'Default' ? 'default' : page.code,
+      code: page.code.toLowerCase(),
       ttl: page.ttl,
       uri: nullable(page.uri),
       custom_status_code: nullable(page.customStatusCode)
diff --git a/src/services/custom-pages-services/v4/delete-custom-pages-service.js b/src/services/custom-pages-services/v4/delete-custom-pages-service.js
index 29b2633490..8849d6985a 100644
--- a/src/services/custom-pages-services/v4/delete-custom-pages-service.js
+++ b/src/services/custom-pages-services/v4/delete-custom-pages-service.js
@@ -14,11 +14,11 @@ export const deleteCustomPagesService = async (id) => {
 
 const parseHttpResponse = (httpResponse) => {
   switch (httpResponse.statusCode) {
-    case 200:
+    case 202:
       return 'Custom Page successfully deleted!'
     case 500:
       throw new Errors.InternalServerError().message
     default:
       throw new Error(extractApiError(httpResponse)).message
   }
-}
\ No newline at end of file
+}
diff --git a/src/services/custom-pages-services/v4/edit-custom-pages-services.js b/src/services/custom-pages-services/v4/edit-custom-pages-services.js
new file mode 100644
index 0000000000..4d5b43eaac
--- /dev/null
+++ b/src/services/custom-pages-services/v4/edit-custom-pages-services.js
@@ -0,0 +1,50 @@
+import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter'
+import * as Errors from '@/services/axios/errors'
+import { extractApiError } from '@/helpers/extract-api-error'
+import { makeCustomPagesBaseUrl } from './make-custom-pages-base-url'
+
+export const editCustomPagesService = async (payload) => {
+  const parsedPayload = adapt(payload)
+  let httpResponse = await AxiosHttpClientAdapter.request({
+    url: `${makeCustomPagesBaseUrl()}/${payload.id}`,
+    method: 'PATCH',
+    body: parsedPayload
+  })
+
+  return parseHttpResponse(httpResponse)
+}
+
+const parseHttpResponse = (httpResponse) => {
+  switch (httpResponse.statusCode) {
+    case 202:
+      return 'Your Custom Page has been updated!'
+    case 500:
+      throw new Errors.InternalServerError().message
+    default:
+      throw new Error(extractApiError(httpResponse)).message
+  }
+}
+
+const nullable = (value) => {
+  return value ? value : null
+}
+
+const adapt = (payload) => {
+  const pages = payload.pages.map((page) => {
+    return {
+      code: page.code === 'Default' ? 'default' : page.code,
+      ttl: page.ttl,
+      uri: nullable(page.uri),
+      custom_status_code: nullable(page.customStatusCode)
+    }
+  })
+  return {
+    name: payload.name,
+    active: payload.isActive,
+    default: payload.isDefault,
+    connector_custom_pages: {
+      edge_connector: nullable(payload.edgeConnectorId),
+      pages // code, ttl, uri, custom_status_code
+    }
+  }
+}
diff --git a/src/services/custom-pages-services/v4/index.js b/src/services/custom-pages-services/v4/index.js
index 41e7ddae14..84730b662d 100644
--- a/src/services/custom-pages-services/v4/index.js
+++ b/src/services/custom-pages-services/v4/index.js
@@ -1,5 +1,13 @@
 import { listCustomPagesService } from './list-custom-pages-service'
 import { deleteCustomPagesService } from './delete-custom-pages-service'
 import { createCustomPagesService } from './create-custom-pages-services'
+import { loadCustomPagesService } from './load-custom-pages-services'
+import { editCustomPagesService } from './edit-custom-pages-services'
 
-export { listCustomPagesService, deleteCustomPagesService, createCustomPagesService }
+export {
+  listCustomPagesService,
+  deleteCustomPagesService,
+  createCustomPagesService,
+  loadCustomPagesService,
+  editCustomPagesService
+}
diff --git a/src/services/custom-pages-services/v4/load-custom-pages-services.js b/src/services/custom-pages-services/v4/load-custom-pages-services.js
new file mode 100644
index 0000000000..bfe7102ba8
--- /dev/null
+++ b/src/services/custom-pages-services/v4/load-custom-pages-services.js
@@ -0,0 +1,47 @@
+import { AxiosHttpClientAdapter, parseHttpResponse } from '@/services/axios/AxiosHttpClientAdapter'
+import { makeCustomPagesBaseUrl } from './make-custom-pages-base-url'
+import { capitalizeFirstLetter } from '@/helpers'
+import { extractApiError } from '@/helpers/extract-api-error'
+
+export const loadCustomPagesService = async ({ id }) => {
+  let httpResponse = await AxiosHttpClientAdapter.request({
+    url: `${makeCustomPagesBaseUrl()}/${id}`,
+    method: 'GET'
+  })
+  httpResponse = adapt(httpResponse)
+
+  return parseHttpResponse(httpResponse)
+}
+
+const adapt = (httpResponse) => {
+  if (httpResponse.statusCode !== 200) {
+    throw new Error(extractApiError({ body: httpResponse.body })).message
+  }
+  const customPage = httpResponse.body?.data
+
+  const pages = customPage.connector_custom_pages.pages.map((page) => {
+    return {
+      code: capitalizeFirstLetter(page.code),
+      ttl: page.ttl,
+      uri: page.uri,
+      customStatusCode: page.custom_status_code
+    }
+  })
+
+  const parsedCustomPage = {
+    id: customPage.id,
+    name: customPage.name,
+    lastEditor: customPage.last_editor,
+    lastModified: customPage.last_modified,
+    isActive: customPage.active,
+    isDefault: customPage.default,
+    productVersion: customPage.product_version,
+    edgeConnectorId: customPage.connector_custom_pages.edge_connector,
+    pages // code, ttl, uri, custom_status_code
+  }
+
+  return {
+    body: parsedCustomPage,
+    statusCode: httpResponse.statusCode
+  }
+}
diff --git a/src/services/digital-certificates-services/v4/delete-digital-certificates-service.js b/src/services/digital-certificates-services/v4/delete-digital-certificates-service.js
index f4b83b8cdb..9efc9df80f 100644
--- a/src/services/digital-certificates-services/v4/delete-digital-certificates-service.js
+++ b/src/services/digital-certificates-services/v4/delete-digital-certificates-service.js
@@ -3,7 +3,6 @@ import { makeDigitalCertificatesBaseUrl } from './make-digital-certificates-base
 import * as Errors from '@/services/axios/errors'
 import { extractApiError } from '@/helpers/extract-api-error'
 
-
 export const deleteDigitalCertificatesService = async (id) => {
   let httpResponse = await AxiosHttpClientAdapter.request({
     url: `${makeDigitalCertificatesBaseUrl()}/${id}`,
diff --git a/src/templates/create-drawer-block/index.vue b/src/templates/create-drawer-block/index.vue
index 8ad4faa4fb..b6dd6bdba6 100644
--- a/src/templates/create-drawer-block/index.vue
+++ b/src/templates/create-drawer-block/index.vue
@@ -66,10 +66,10 @@
     set: (value) => {
       if (formHasChanges.value) {
         formDrawerHasUpdated.value = !formDrawerHasUpdated.value
-        changeVisisbleDrawer(!value, false)
+        changeVisibleDrawer(!value, false)
         return
       }
-      changeVisisbleDrawer(value, true)
+      changeVisibleDrawer(value, true)
     }
   })
 
@@ -78,7 +78,7 @@
     return blockViewRedirection.value && isDirty.value
   })
 
-  const changeVisisbleDrawer = (isVisible, isResetForm) => {
+  const changeVisibleDrawer = (isVisible, isResetForm) => {
     emit('update:visible', isVisible)
     if (isResetForm) resetForm()
   }
@@ -133,7 +133,7 @@
   }
 
   provide('drawerUnsaved', {
-    changeVisisbleDrawer,
+    changeVisibleDrawer,
     formDrawerHasUpdated
   })
 </script>
diff --git a/src/templates/dialog-unsaved-block/index.vue b/src/templates/dialog-unsaved-block/index.vue
index c13ddd9bdd..35bac008cc 100644
--- a/src/templates/dialog-unsaved-block/index.vue
+++ b/src/templates/dialog-unsaved-block/index.vue
@@ -42,12 +42,12 @@
     visibleOnSaved = unsavedStatus.visibleOnSaved
   }
 
-  let changeVisisbleDrawer, formDrawerHasUpdated
+  let changeVisibleDrawer, formDrawerHasUpdated
 
   if (props.isDrawer) {
     const unsavedStatus = inject('drawerUnsaved')
 
-    changeVisisbleDrawer = unsavedStatus.changeVisisbleDrawer
+    changeVisibleDrawer = unsavedStatus.changeVisibleDrawer
     formDrawerHasUpdated = unsavedStatus.formDrawerHasUpdated
   }
 
@@ -71,7 +71,7 @@
     } else if (props.isDrawer) {
       const toKeepDisplayingDrawer = false
       const resetForm = true
-      changeVisisbleDrawer(toKeepDisplayingDrawer, resetForm)
+      changeVisibleDrawer(toKeepDisplayingDrawer, resetForm)
       openDialogUnsaved(false)
     } else {
       unsavedDisabled.value = true
diff --git a/src/templates/edit-drawer-block/index.vue b/src/templates/edit-drawer-block/index.vue
index 2372ed7580..70d5865188 100644
--- a/src/templates/edit-drawer-block/index.vue
+++ b/src/templates/edit-drawer-block/index.vue
@@ -74,10 +74,10 @@
     set: (value) => {
       if (formHasChanges.value) {
         formDrawerHasUpdated.value = !formDrawerHasUpdated.value
-        changeVisisbleDrawer(!value, false)
+        changeVisibleDrawer(!value, false)
         return
       }
-      changeVisisbleDrawer(value, true)
+      changeVisibleDrawer(value, true)
     }
   })
 
@@ -86,7 +86,7 @@
     return blockViewRedirection.value && isDirty.value
   })
 
-  const changeVisisbleDrawer = (isVisible, isResetForm) => {
+  const changeVisibleDrawer = (isVisible, isResetForm) => {
     emit('update:visible', isVisible)
     if (isResetForm) resetForm()
   }
@@ -160,7 +160,7 @@
   })
 
   provide('drawerUnsaved', {
-    changeVisisbleDrawer,
+    changeVisibleDrawer,
     formDrawerHasUpdated
   })
 </script>
diff --git a/src/views/CustomPages/Drawer/index.vue b/src/views/CustomPages/Drawer/index.vue
index b1d31127c2..fb587bd4cf 100644
--- a/src/views/CustomPages/Drawer/index.vue
+++ b/src/views/CustomPages/Drawer/index.vue
@@ -40,18 +40,25 @@
     pages: []
   })
 
+  const isUriValidRegex = /^\/[/a-zA-Z0-9\-_.~@:]*$/
+
   const validationSchema = yup.object({
     name: yup.string().required().label('Name'),
     isActive: yup.boolean().required().label('Active'),
     isDefault: yup.boolean().required().label('Default'),
-    edgeConnectorId: yup.string().nullable().required().label('Edge Connector'),
+    edgeConnectorId: yup.string().nullable().label('Edge Connector'),
     pages: yup
       .array()
       .of(
         yup.object().shape({
           code: yup.string().required().label('Code'),
-          ttl: yup.number().label('TTL'),
-          uri: yup.string().url().label('URI'),
+          ttl: yup.number().min(1).required().label('TTL'),
+          uri: yup
+            .string()
+            .transform((value) => (value === '' ? null : value))
+            .nullable()
+            .matches(isUriValidRegex, 'Invalid URI')
+            .label('URI'),
           custom_status_code: yup.number().label('Custom Status Code')
         })
       )
diff --git a/src/views/CustomPages/FormFields/FormFieldsCustomPages.vue b/src/views/CustomPages/FormFields/FormFieldsCustomPages.vue
index 5c552fcbd5..2843acb612 100644
--- a/src/views/CustomPages/FormFields/FormFieldsCustomPages.vue
+++ b/src/views/CustomPages/FormFields/FormFieldsCustomPages.vue
@@ -10,7 +10,7 @@
 
   import FieldSwitchBlock from '@/templates/form-fields-inputs/fieldSwitchBlock'
 
-  const props = defineProps({
+  defineProps({
     listEdgeConnectorsService: {
       type: Function,
       required: true
@@ -131,9 +131,9 @@
 
   const edgeConnectorsList = ref([])
 
-  const getEdgeConnectors = async () => {
-    edgeConnectorsList.value = await props.listEdgeConnectorsService()
-  }
+  // const getEdgeConnectors = async () => {
+  //   edgeConnectorsList.value = await props.listEdgeConnectorsService()
+  // }
 
   onMounted(async () => {
     // await getEdgeConnectors()
@@ -159,6 +159,7 @@
           label="Name"
           placeholder="Custom Page name"
           data-testid="custom-page-form__name"
+          required
           description="Name of the custom page."
           name="name"
           :value="name"
@@ -271,6 +272,7 @@
             <div class="flex flex-col w-full sm:max-w-xs gap-2">
               <FieldNumber
                 label="Custom Response TTL"
+                :data-testid="`custom-page-form__page__${index}__ttl`"
                 required
                 :value="pages[index].value.ttl"
                 :name="`pages[${index}].ttl`"
@@ -280,17 +282,23 @@
               />
             </div>
           </div>
-          <div class="flex flex-col sm:max-w-lg w-full gap-2">
+          <div
+            class="flex flex-col sm:max-w-lg w-full gap-2"
+            v-if="!isDefaultPage(index)"
+          >
             <FieldText
               label="Page Path (URI)"
-              placeholder="https://app.domain.com/"
+              placeholder="/example/path/another_path~file@name"
               :data-testid="`custom-page-form__page__${index}__path`"
               :name="`pages[${index}].uri`"
               :value="pages[index].value.uri"
               description="Select an origin to customize the error page path."
             />
           </div>
-          <div class="flex flex-col w-full sm:max-w-xs gap-2">
+          <div
+            class="flex flex-col w-full sm:max-w-xs gap-2"
+            v-if="!isDefaultPage(index)"
+          >
             <FieldNumber
               label="Response Custom Status Code"
               :data-testid="`custom-page-form__page__${index}__custom-status`"
diff --git a/src/views/CustomPages/ListView.vue b/src/views/CustomPages/ListView.vue
index a671c243c5..fe7ea8f67b 100644
--- a/src/views/CustomPages/ListView.vue
+++ b/src/views/CustomPages/ListView.vue
@@ -51,7 +51,7 @@
       label: 'Delete',
       title: 'edge application',
       icon: 'pi pi-trash',
-      service: props.deleteEdgeApplicationService
+      service: props.deleteCustomPagesService
     }
   ]
 


Reviews:
user: login: HerbertJulio
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-30T12:48:23Z
user: login: lucasmendes21
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-30T16:44:09Z

Review comments:
diff_hunk: @@ -0,0 +1,50 @@
+import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter'
+import * as Errors from '@/services/axios/errors'
+import { extractApiError } from '@/helpers/extract-api-error'
+import { makeCustomPagesBaseUrl } from './make-custom-pages-base-url'
+
+export const editCustomPagesService = async (payload) => {
+  const parsedPayload = adapt(payload)
+  let httpResponse = await AxiosHttpClientAdapter.request({
+    url: `${makeCustomPagesBaseUrl()}/${payload.id}`,
+    method: 'PATCH',
+    body: parsedPayload
+  })
+
+  return parseHttpResponse(httpResponse)
+}
+
+const parseHttpResponse = (httpResponse) => {
+  switch (httpResponse.statusCode) {
+    case 202:
+      return 'Your Custom Page has been updated!'
+    case 500:
+      throw new Errors.InternalServerError().message
+    default:
+      throw new Error(extractApiError(httpResponse)).message
+  }
+}
+
+const nullable = (value) => {
+  return value ? value : null
+}
+
+const adapt = (payload) => {
+  const pages = payload.pages.map((page) => {
+    return {
+      code: page.code === 'Default' ? 'default' : page.code,
+      ttl: page.ttl,
+      uri: nullable(page.uri),
+      custom_status_code: nullable(page.customStatusCode)
+    }
+  })
+  return {
+    name: payload.name,
+    active: payload.isActive,
+    default: payload.isDefault,
+    connector_custom_pages: {
+      edge_connector: nullable(payload.edgeConnectorId),
+      pages // code, ttl, uri, custom_status_code
path: src/services/custom-pages-services/v4/edit-custom-pages-services.js
user: login: lucasmendes21
body: remover esse comentario
created_at: 2025-04-30T16:41:15Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,47 @@
+import { AxiosHttpClientAdapter, parseHttpResponse } from '@/services/axios/AxiosHttpClientAdapter'
+import { makeCustomPagesBaseUrl } from './make-custom-pages-base-url'
+import { capitalizeFirstLetter } from '@/helpers'
+import { extractApiError } from '@/helpers/extract-api-error'
+
+export const loadCustomPagesService = async ({ id }) => {
+  let httpResponse = await AxiosHttpClientAdapter.request({
+    url: `${makeCustomPagesBaseUrl()}/${id}`,
+    method: 'GET'
+  })
+  httpResponse = adapt(httpResponse)
+
+  return parseHttpResponse(httpResponse)
+}
+
+const adapt = (httpResponse) => {
+  if (httpResponse.statusCode !== 200) {
+    throw new Error(extractApiError({ body: httpResponse.body })).message
+  }
+  const customPage = httpResponse.body?.data
+
+  const pages = customPage.connector_custom_pages.pages.map((page) => {
+    return {
+      code: capitalizeFirstLetter(page.code),
+      ttl: page.ttl,
+      uri: page.uri,
+      customStatusCode: page.custom_status_code
+    }
+  })
+
+  const parsedCustomPage = {
+    id: customPage.id,
+    name: customPage.name,
+    lastEditor: customPage.last_editor,
+    lastModified: customPage.last_modified,
+    isActive: customPage.active,
+    isDefault: customPage.default,
+    productVersion: customPage.product_version,
+    edgeConnectorId: customPage.connector_custom_pages.edge_connector,
+    pages // code, ttl, uri, custom_status_code
path: src/services/custom-pages-services/v4/load-custom-pages-services.js
user: login: lucasmendes21
body: remover comentario
created_at: 2025-04-30T16:42:19Z
author_association: CONTRIBUTOR
diff_hunk: @@ -66,10 +66,10 @@
     set: (value) => {
       if (formHasChanges.value) {
         formDrawerHasUpdated.value = !formDrawerHasUpdated.value
-        changeVisisbleDrawer(!value, false)
+        changeVisibleDrawer(!value, false)
path: src/templates/create-drawer-block/index.vue
user: login: lucasmendes21
body: poderia criar um variavel que indique quais são esses valores passados nessa função para fica melhor entendimento.
created_at: 2025-04-30T16:43:24Z
author_association: CONTRIBUTOR
diff_hunk: @@ -131,9 +131,9 @@
 
   const edgeConnectorsList = ref([])
 
-  const getEdgeConnectors = async () => {
-    edgeConnectorsList.value = await props.listEdgeConnectorsService()
-  }
+  // const getEdgeConnectors = async () => {
path: src/views/CustomPages/FormFields/FormFieldsCustomPages.vue
user: login: lucasmendes21
body: remover comentario.
created_at: 2025-04-30T16:43:57Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-29T19:26:59Z
body: 🔍 AI Code Reviewer is analyzing this PR… Please wait for the results!
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-29T19:27:01Z
body: ✅ AI Code Review completed! Check the comments for more details.
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-29T19:27:14Z
body: 🔍 AI Code Reviewer is analyzing this PR… Please wait for the results!
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-29T19:27:17Z
body: ✅ AI Code Review completed! Check the comments for more details.
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-29T19:36:53Z
body: 🔍 AI Code Reviewer is analyzing this PR… Please wait for the results!
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-29T19:36:56Z
body: ✅ AI Code Review completed! Check the comments for more details.
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-29T19:55:12Z
body: 🔍 AI Code Reviewer is analyzing this PR… Please wait for the results!
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-29T19:55:14Z
body: ✅ AI Code Review completed! Check the comments for more details.
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-29T20:08:21Z
body: 🔍 AI Code Reviewer is analyzing this PR… Please wait for the results!
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-29T20:08:23Z
body: ✅ AI Code Review completed! Check the comments for more details.
author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-04-29T20:22:01Z
body: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=azion-console-kit&pullRequest=2392) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [76.9% Coverage on New Code](https://sonarcloud.io/component_measures?id=azion-console-kit&pullRequest=2392&metric=new_coverage&view=list) (required ≥ 80%)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [4.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=azion-console-kit&pullRequest=2392&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=azion-console-kit&pullRequest=2392)


author_association: NONE