# ivyforms/0.7/frontend/src/views/admin/App.vue

The Innovative Form Builder – IvyForms, version 0.7. 45 lines.

- Page: https://pluginprobe.com/plugins/ivyforms/0.7/code/frontend/src/views/admin/App.vue
- Raw: https://pluginprobe.com/plugins/ivyforms/0.7/raw/frontend/src/views/admin/App.vue
- Modified: 2025-12-25T16:20:26+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/ivyforms/0.7/code/frontend/src/views/admin/App.vue#L10-L20`.

```vue
<template>
  <div>
    <component
      :is="BannerComponent"
      v-for="(BannerComponent, index) in bannerComponents"
      :key="index"
    />
    <RouterView />
    <IvyChangelogModal />
    <ProUpgradeDialog />
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue'
import type { Component } from 'vue'
import IvyChangelogModal from '@/views/_components/changelog/IvyChangelogModal.vue'
import ProUpgradeDialog from '@/views/_components/dialog/ProUpgradeDialog.vue'

// Allow Pro to inject banner components via hook
const bannerComponents = ref<Component[]>([])

onMounted(() => {
  // Apply filter initially
  if (window.IvyForms?.hooks?.applyFilters) {
    bannerComponents.value = window.IvyForms.hooks.applyFilters(
      'ivyforms/app/banner_components',
      [],
    )
  }

  // Listen for banner refresh events (e.g., when Pro plugin registers banners after mount)
  const refreshBanners = () => {
    if (window.IvyForms?.hooks?.applyFilters) {
      bannerComponents.value = window.IvyForms.hooks.applyFilters(
        'ivyforms/app/banner_components',
        [],
      )
    }
  }

  window.addEventListener('ivyforms:refresh_banners', refreshBanners)
})
</script>

```
