diff --git a/dashboard/src/components/AppInstallDialog.vue b/dashboard/src/components/AppInstallDialog.vue index f8ba14dc5..8128b3052 100644 --- a/dashboard/src/components/AppInstallDialog.vue +++ b/dashboard/src/components/AppInstallDialog.vue @@ -6,7 +6,6 @@ import { Button, Dialog, SingleSelect, FormGroup, TextInput, InputGroup } from ' import { prettyDate, prettyBinarySize, isValidDomain } from '@cloudron/pankow/utils'; import AccessControl from './AccessControl.vue'; import PortBindings from './PortBindings.vue'; -import DomainsModel from '../models/DomainsModel.js'; import AppsModel from '../models/AppsModel.js'; import DashboardModel from '../models/DashboardModel.js'; import { PROXY_APP_ID, ACL_OPTIONS } from '../constants.js'; @@ -16,7 +15,6 @@ const STEP = Object.freeze({ INSTALL: Symbol('install'), }); -const domainsModel = DomainsModel.create(); const appsModel = AppsModel.create(); const dashboardModel = DashboardModel.create(); @@ -167,7 +165,7 @@ function onScreenshotNext() { } defineExpose({ - open: async function(a, appCountExceeded) { + open: async function(a, appCountExceeded, domainList) { busy.value = false; step.value = STEP.DETAILS; app.value = a; @@ -179,10 +177,7 @@ defineExpose({ domainProvider.value = ''; upstreamUri.value = ''; - const [error, result] = await domainsModel.list(); - if (error) return console.error(error); - - domains.value = result; + domains.value = domainList; // preselect with dashboard domain domain.value = (domains.value.find(d => d.domain === dashboardDomain.value) || domains.value[0]).domain; diff --git a/dashboard/src/views/AppstoreView.vue b/dashboard/src/views/AppstoreView.vue index 34a571fc5..daf5255e1 100644 --- a/dashboard/src/views/AppstoreView.vue +++ b/dashboard/src/views/AppstoreView.vue @@ -9,15 +9,18 @@ import { ref, computed, useTemplateRef, onActivated, onDeactivated, inject, watc import { TextInput, ProgressBar, InputDialog, SingleSelect } from '@cloudron/pankow'; import AppsModel from '../models/AppsModel.js'; import AppstoreModel from '../models/AppstoreModel.js'; +import DomainsModel from '../models/DomainsModel.js'; import AppInstallDialog from '../components/AppInstallDialog.vue'; import AppStoreItem from '../components/AppStoreItem.vue'; const appsModel = AppsModel.create(); const appstoreModel = AppstoreModel.create(); +const domainsModel = DomainsModel.create(); const ready = ref(false); const apps = ref([]); const search = ref(''); +const domains = ref([]); // clear category on search watch(search, (newValue) => { @@ -151,7 +154,7 @@ async function onHashChange() { const app = await getApp(appId, version); if (app) { - appInstallDialog.value.open(app, installedApps.value.length >= features.value.appMaxCount); + appInstallDialog.value.open(app, installedApps.value.length >= features.value.appMaxCount, domains.value); } else { inputDialog.value.info({ title: t('appstore.appNotFoundDialog.title'), @@ -178,11 +181,20 @@ function setItemWidth() { else itemWidth.value = Number((width-gap*4)/4).toFixed() + 'px'; } +async function getDomains() { + const [error, result] = await domainsModel.list(); + if (error) return console.error(error); + + domains.value = result; +} + onActivated(async () => { setItemWidth(); await getAppList(); ready.value = true; + + await getDomains(); await getInstalledApps(); // only deals with #/appstore/ hashes