From ad570d529c763fb5d29132c744942ccbee60bc2b Mon Sep 17 00:00:00 2001 From: akabdulhanif Date: Thu, 15 Jan 2026 07:30:33 +0000 Subject: [PATCH 1/9] feat(ui): add Delete actions for catalog/group/control and fix button event forwarding --- src/views/catalog/CatalogControl.vue | 10 ++++++++++ src/views/catalog/CatalogGroup.vue | 10 ++++++++++ src/views/catalog/CatalogView.vue | 1 - 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/views/catalog/CatalogControl.vue b/src/views/catalog/CatalogControl.vue index c46a359e..2ae4f9e6 100644 --- a/src/views/catalog/CatalogControl.vue +++ b/src/views/catalog/CatalogControl.vue @@ -26,11 +26,14 @@ > Edit >>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) @click.stop="deleteControl()" >Delete @@ -154,10 +157,14 @@ const guidance = ref(getPart('guidance')); const router = useRouter(); const toast = useToast(); const { confirmDeleteDialog } = useDeleteConfirmationDialog(); +<<<<<<< HEAD const emit = defineEmits<{ (e: 'deleted', id: string): void; (e: 'updated', id: string): void; }>(); +======= +const emit = defineEmits<{ (e: 'deleted', id: string): void }>(); +>>>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) const { execute: del } = useDataApi( '/api/oscal/catalogs', {}, @@ -215,10 +222,13 @@ async function deleteControl() { ); } +<<<<<<< HEAD function onUpdated(updated: Control) { emit('updated', updated.id); } +======= +>>>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) function onChildDeleted(id: string) { const idx = controls.value?.findIndex((c) => c.id === id) ?? -1; if (idx >= 0 && controls.value) { diff --git a/src/views/catalog/CatalogGroup.vue b/src/views/catalog/CatalogGroup.vue index f457189b..db3444b2 100644 --- a/src/views/catalog/CatalogGroup.vue +++ b/src/views/catalog/CatalogGroup.vue @@ -14,6 +14,7 @@ Edit @@ -34,6 +35,8 @@ > >>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) @click.stop="deleteGroup()" >Delete @@ -121,10 +124,14 @@ const props = defineProps<{ catalog: Catalog; group: Group; }>(); +<<<<<<< HEAD const emit = defineEmits<{ (e: 'deleted', id: string): void; (e: 'updated', id: string): void; }>(); +======= +const emit = defineEmits<{ (e: 'deleted', id: string): void }>(); +>>>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) const toast = useToast(); const { confirmDeleteDialog } = useDeleteConfirmationDialog(); const { execute: del } = useDataApi( @@ -203,8 +210,11 @@ async function deleteGroup() { { itemName: props.group.id, itemType: 'group' }, ); } +<<<<<<< HEAD function onUpdated(updated: Group) { emit('updated', updated.id); } +======= +>>>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) diff --git a/src/views/catalog/CatalogView.vue b/src/views/catalog/CatalogView.vue index 3b369fe1..6a48087b 100644 --- a/src/views/catalog/CatalogView.vue +++ b/src/views/catalog/CatalogView.vue @@ -138,7 +138,6 @@ async function deleteCatalog(uuid: string, title: string) { function deleteCurrentCatalog() { deleteCatalog(catalogId.value, catalog.value?.metadata?.title || ''); } - function reloadLists() { groupExecute(`/api/oscal/catalogs/${catalogId.value}/groups`); catalogExecute(`/api/oscal/catalogs/${catalogId.value}/controls`); From c759ae20893cf8f2c870dfefadad958e74b6cc5a Mon Sep 17 00:00:00 2001 From: akabdulhanif Date: Thu, 15 Jan 2026 10:16:33 +0000 Subject: [PATCH 2/9] ci: enable PR comments using pull_request_target with write permissions --- .github/workflows/pull-request.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 40f80e71..7fa74127 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -5,6 +5,12 @@ on: branches: - main pull_request: {} + pull_request_target: {} + +permissions: + contents: read + issues: write + pull-requests: write jobs: docker-build: @@ -82,6 +88,21 @@ jobs: echo "---" echo "โœ… Linting completed automatically by CI." } >> "$GITHUB_STEP_SUMMARY" + - name: Comment on PR + uses: marocchino/sticky-pull-request-comment@v2 + if: ${{ github.event_name == 'pull_request_target' }} + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + message: | + ## ๐Ÿงน ESLint Report + + | Status | Count | + |--------|-------| + | โŒ Errors | **${{ steps.count-errors.outputs.errors }}** | + | โš ๏ธ Warnings | **${{ steps.count-errors.outputs.warnings }}** | + + --- + โœ… *Linting completed automatically by CI.* - name: Run tests using the `build` image run: | From 8f34c0163b28db5eec97e8d6cdd0650cec36566f Mon Sep 17 00:00:00 2001 From: akabdulhanif Date: Fri, 16 Jan 2026 11:14:10 +0000 Subject: [PATCH 3/9] ci: remove pull_request_target; switch ESLint report to step summary --- .github/workflows/pull-request.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 7fa74127..6797f95c 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -5,12 +5,6 @@ on: branches: - main pull_request: {} - pull_request_target: {} - -permissions: - contents: read - issues: write - pull-requests: write jobs: docker-build: @@ -88,6 +82,7 @@ jobs: echo "---" echo "โœ… Linting completed automatically by CI." } >> "$GITHUB_STEP_SUMMARY" +<<<<<<< HEAD - name: Comment on PR uses: marocchino/sticky-pull-request-comment@v2 if: ${{ github.event_name == 'pull_request_target' }} @@ -103,6 +98,8 @@ jobs: --- โœ… *Linting completed automatically by CI.* +======= +>>>>>>> 5fc96e6 (ci: remove pull_request_target; switch ESLint report to step summary) - name: Run tests using the `build` image run: | From 35d1a950fa377e747a8b2f5bab47207fbc8746d8 Mon Sep 17 00:00:00 2001 From: akabdulhanif Date: Tue, 27 Jan 2026 15:58:52 +0000 Subject: [PATCH 4/9] ci(ui): resolve merge markers; remove pull_request_target; use ESLint step summary only --- .github/workflows/pull-request.yml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 6797f95c..40f80e71 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -82,24 +82,6 @@ jobs: echo "---" echo "โœ… Linting completed automatically by CI." } >> "$GITHUB_STEP_SUMMARY" -<<<<<<< HEAD - - name: Comment on PR - uses: marocchino/sticky-pull-request-comment@v2 - if: ${{ github.event_name == 'pull_request_target' }} - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - message: | - ## ๐Ÿงน ESLint Report - - | Status | Count | - |--------|-------| - | โŒ Errors | **${{ steps.count-errors.outputs.errors }}** | - | โš ๏ธ Warnings | **${{ steps.count-errors.outputs.warnings }}** | - - --- - โœ… *Linting completed automatically by CI.* -======= ->>>>>>> 5fc96e6 (ci: remove pull_request_target; switch ESLint report to step summary) - name: Run tests using the `build` image run: | From 1763f71d6690347c6cfa0a7f4e0b79c593c0e317 Mon Sep 17 00:00:00 2001 From: akabdulhanif Date: Tue, 27 Jan 2026 16:04:32 +0000 Subject: [PATCH 5/9] fix(ui): correct template closing tags in CatalogGroup and CatalogControl to resolve Vite compile error --- src/views/catalog/CatalogControl.vue | 51 +++++++++++++++++++++------- src/views/catalog/CatalogGroup.vue | 10 ------ 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/views/catalog/CatalogControl.vue b/src/views/catalog/CatalogControl.vue index 2ae4f9e6..8da77188 100644 --- a/src/views/catalog/CatalogControl.vue +++ b/src/views/catalog/CatalogControl.vue @@ -26,14 +26,11 @@ > Edit >>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) @click.stop="deleteControl()" >Delete @@ -45,10 +42,22 @@
Add Statement - Edit Statement + Add Objective - Add Guidance @@ -103,6 +112,27 @@ :parent-control="props.control" v-model="showControlForm" /> + + + (getPart('guidance')); const router = useRouter(); const toast = useToast(); const { confirmDeleteDialog } = useDeleteConfirmationDialog(); -<<<<<<< HEAD const emit = defineEmits<{ (e: 'deleted', id: string): void; (e: 'updated', id: string): void; }>(); -======= -const emit = defineEmits<{ (e: 'deleted', id: string): void }>(); ->>>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) const { execute: del } = useDataApi( '/api/oscal/catalogs', {}, @@ -186,6 +213,9 @@ function getPart(type: string) { const showControlForm = ref(false); const showEdit = ref(false); +const showEditStatement = ref(false); +const showEditObjective = ref(false); +const showEditGuidance = ref(false); function controlCreated(control: Control) { controls.value?.push(control); @@ -222,13 +252,10 @@ async function deleteControl() { ); } -<<<<<<< HEAD function onUpdated(updated: Control) { emit('updated', updated.id); } -======= ->>>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) function onChildDeleted(id: string) { const idx = controls.value?.findIndex((c) => c.id === id) ?? -1; if (idx >= 0 && controls.value) { diff --git a/src/views/catalog/CatalogGroup.vue b/src/views/catalog/CatalogGroup.vue index db3444b2..f457189b 100644 --- a/src/views/catalog/CatalogGroup.vue +++ b/src/views/catalog/CatalogGroup.vue @@ -14,7 +14,6 @@
Edit @@ -35,8 +34,6 @@ > >>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) @click.stop="deleteGroup()" >Delete @@ -124,14 +121,10 @@ const props = defineProps<{ catalog: Catalog; group: Group; }>(); -<<<<<<< HEAD const emit = defineEmits<{ (e: 'deleted', id: string): void; (e: 'updated', id: string): void; }>(); -======= -const emit = defineEmits<{ (e: 'deleted', id: string): void }>(); ->>>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) const toast = useToast(); const { confirmDeleteDialog } = useDeleteConfirmationDialog(); const { execute: del } = useDataApi( @@ -210,11 +203,8 @@ async function deleteGroup() { { itemName: props.group.id, itemType: 'group' }, ); } -<<<<<<< HEAD function onUpdated(updated: Group) { emit('updated', updated.id); } -======= ->>>>>>> 1a10cc4 (feat(ui): add Delete actions for catalog/group/control and fix button event forwarding) From 35fb63908869df5fad8159d6254b895f04faed6a Mon Sep 17 00:00:00 2001 From: akabdulhanif Date: Thu, 29 Jan 2026 17:48:28 +0000 Subject: [PATCH 6/9] feat(ui): add ProfileBuildPropsView for prop-based builder --- src/views/profile/ProfileBuildPropsView.vue | 240 ++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 src/views/profile/ProfileBuildPropsView.vue diff --git a/src/views/profile/ProfileBuildPropsView.vue b/src/views/profile/ProfileBuildPropsView.vue new file mode 100644 index 00000000..845fb71f --- /dev/null +++ b/src/views/profile/ProfileBuildPropsView.vue @@ -0,0 +1,240 @@ + + + From 26a454d4f0e9df68705f4f90b6020f07891cc814 Mon Sep 17 00:00:00 2001 From: akabdulhanif Date: Fri, 30 Jan 2026 07:06:23 +0000 Subject: [PATCH 7/9] feat(ui): add catalog selector and UUID validation in props builder --- src/views/profile/ProfileBuildPropsView.vue | 26 +++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/views/profile/ProfileBuildPropsView.vue b/src/views/profile/ProfileBuildPropsView.vue index 845fb71f..86636fd4 100644 --- a/src/views/profile/ProfileBuildPropsView.vue +++ b/src/views/profile/ProfileBuildPropsView.vue @@ -26,6 +26,25 @@ Invalid UUID format

+
+ + +

+ No catalogs found. Import or create a catalog first. +

+