Added new app settings shortcuts findable by spotlight - Application, Login & Registration, Appearance, Adsense, Homepage, Environment, Server

This commit is contained in:
Čarodej
2022-04-05 08:05:32 +02:00
parent d386f70be8
commit 9f783fcd95
5 changed files with 154 additions and 95 deletions

View File

@@ -1,6 +1,7 @@
## Version 2.0.14 ## Version 2.0.14
#### Release date: 5. April 2022 #### Release date: 5. April 2022
- Added option to set default max team members for new user registrations - Added option to set default max team members for new user registrations
- Added new app settings shortcuts findable by spotlight - Application, Login & Registration, Appearance, Adsense, Homepage, Environment, Server
## Version 2.0.13 ## Version 2.0.13
#### Release date: 4. April 2022 #### Release date: 4. April 2022

View File

@@ -849,7 +849,7 @@ return [
'add_member' => 'Add Member', 'add_member' => 'Add Member',
'go_to_dashboard' => 'Go To Dashboard', 'go_to_dashboard' => 'Go To Dashboard',
'go_to_settings' => 'Go To Settings', 'go_to_settings' => 'Go To Settings',
'go_to_payments' => 'Go To Payments', 'go_to_payments' => 'Payments / Settings',
'go_to_pages' => 'Go To Pages', 'go_to_pages' => 'Go To Pages',
'go_to_languages' => 'Go To Languages', 'go_to_languages' => 'Go To Languages',
'show_all_plans' => 'Show all Plans', 'show_all_plans' => 'Show all Plans',
@@ -929,5 +929,14 @@ return [
'upload_request_default_folder' => 'Upload Request from :timestamp', 'upload_request_default_folder' => 'Upload Request from :timestamp',
'copy_direct_download_link' => 'Copy Direct Download Link', 'copy_direct_download_link' => 'Copy Direct Download Link',
'direct_link_copied' => 'Your direct download link was copied', 'direct_link_copied' => 'Your direct download link was copied',
'application_settings' => 'Application / Settings',
'login_registration_settings' => 'Login & Registration / Settings',
'appearance_settings' => 'Appearance / Settings',
'adsense_settings' => 'Adsense / Settings',
'homepage_settings' => 'Homepage / Settings',
'environment_settings' => 'Environment / Settings',
'server_settings' => 'Server / Settings',
'user_features' => 'User Features',
'upload_settings' => 'Upload Settings',
], ],
]; ];

View File

@@ -1,6 +1,6 @@
{ {
"/js/main.js": "/js/main.js", "/js/main.js": "/js/main.js",
"/chunks/request.js": "/chunks/request.js?id=e7060a440fcd8d12", "/chunks/request.js": "/chunks/request.js?id=fb2de02956f152b5",
"/chunks/request-upload.js": "/chunks/request-upload.js?id=5b03d20350ef4737", "/chunks/request-upload.js": "/chunks/request-upload.js?id=5b03d20350ef4737",
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=19a0784e59d768ec", "/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=19a0784e59d768ec",
"/chunks/status-check.js": "/chunks/status-check.js?id=87d72b50e83864bb", "/chunks/status-check.js": "/chunks/status-check.js?id=87d72b50e83864bb",
@@ -9,13 +9,13 @@
"/chunks/environment.js": "/chunks/environment.js?id=ab5382f4452a258a", "/chunks/environment.js": "/chunks/environment.js?id=ab5382f4452a258a",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=15938ff1ad2d6ed2", "/chunks/app-setup.js": "/chunks/app-setup.js?id=15938ff1ad2d6ed2",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=916450217130f3b8", "/chunks/admin-account.js": "/chunks/admin-account.js?id=916450217130f3b8",
"/chunks/shared.js": "/chunks/shared.js?id=d988ff3a8c3443dd", "/chunks/shared.js": "/chunks/shared.js?id=ac88d110f7427ebf",
"/chunks/shared/browser.js": "/chunks/shared/browser.js?id=d718abdaf5edb271", "/chunks/shared/browser.js": "/chunks/shared/browser.js?id=d718abdaf5edb271",
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=1487950970833eda", "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=1487950970833eda",
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=672e931a9fb0b672", "/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=672e931a9fb0b672",
"/chunks/not-found.js": "/chunks/not-found.js?id=9f6ce23ce5d969f1", "/chunks/not-found.js": "/chunks/not-found.js?id=9f6ce23ce5d969f1",
"/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=f564565faa09d6d6", "/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=f564565faa09d6d6",
"/chunks/admin.js": "/chunks/admin.js?id=88646f72ae64fc9c", "/chunks/admin.js": "/chunks/admin.js?id=8032540fddb832c5",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=fd1d266e493a79a8", "/chunks/dashboard.js": "/chunks/dashboard.js?id=fd1d266e493a79a8",
"/chunks/invoices.js": "/chunks/invoices.js?id=1416cbf6d1a593ac", "/chunks/invoices.js": "/chunks/invoices.js?id=1416cbf6d1a593ac",
"/chunks/subscriptions.js": "/chunks/subscriptions.js?id=5bf6704f5b599f36", "/chunks/subscriptions.js": "/chunks/subscriptions.js?id=5bf6704f5b599f36",
@@ -43,7 +43,7 @@
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=a694a01f3641712c", "/chunks/app-appearance.js": "/chunks/app-appearance.js?id=a694a01f3641712c",
"/chunks/app-index.js": "/chunks/app-index.js?id=efdbfa062749ca00", "/chunks/app-index.js": "/chunks/app-index.js?id=efdbfa062749ca00",
"/chunks/app-environment.js": "/chunks/app-environment.js?id=e73ab59f2d81adb0", "/chunks/app-environment.js": "/chunks/app-environment.js?id=e73ab59f2d81adb0",
"/chunks/app-others.js": "/chunks/app-others.js?id=4593855ee48a3b94", "/chunks/app-others.js": "/chunks/app-others.js?id=abb8d96cd7c3a576",
"/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=1cfffc99465b9a7a", "/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=1cfffc99465b9a7a",
"/chunks/app-adsense.js": "/chunks/app-adsense.js?id=a5dc9e715f8561bd", "/chunks/app-adsense.js": "/chunks/app-adsense.js?id=a5dc9e715f8561bd",
"/chunks/app-server.js": "/chunks/app-server.js?id=2554ff5c24994949", "/chunks/app-server.js": "/chunks/app-server.js?id=2554ff5c24994949",
@@ -57,12 +57,12 @@
"/chunks/sign-up.js": "/chunks/sign-up.js?id=bb92bad614e60d45", "/chunks/sign-up.js": "/chunks/sign-up.js?id=bb92bad614e60d45",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=50a1bc5e4ed86ec9", "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=50a1bc5e4ed86ec9",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=f652de052dba55c1", "/chunks/create-new-password.js": "/chunks/create-new-password.js?id=f652de052dba55c1",
"/chunks/settings.js": "/chunks/settings.js?id=ec9eeb1e963303db", "/chunks/settings.js": "/chunks/settings.js?id=71119613323ea819",
"/chunks/profile.js": "/chunks/profile.js?id=0eca231475e267ab", "/chunks/profile.js": "/chunks/profile.js?id=0eca231475e267ab",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=11d4331650cac280", "/chunks/settings-password.js": "/chunks/settings-password.js?id=11d4331650cac280",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=994b669a56fd417b", "/chunks/settings-storage.js": "/chunks/settings-storage.js?id=994b669a56fd417b",
"/chunks/billing.js": "/chunks/billing.js?id=40e758c87bcf6e89", "/chunks/billing.js": "/chunks/billing.js?id=40e758c87bcf6e89",
"/chunks/platform.js": "/chunks/platform.js?id=a4e3656f8b9c5eed", "/chunks/platform.js": "/chunks/platform.js?id=490c3586a4dca9fb",
"/chunks/files.js": "/chunks/files.js?id=133be06adc673d83", "/chunks/files.js": "/chunks/files.js?id=133be06adc673d83",
"/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=9d3391857f9c3503", "/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=9d3391857f9c3503",
"/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=53d2c6a72b895d68", "/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=53d2c6a72b895d68",

View File

@@ -95,7 +95,7 @@
}" }"
> >
<settings-icon <settings-icon
v-if="['AppOthers', 'Profile', 'Password'].includes(result.action.value)" v-if="['AppOthers', 'Profile', 'Password', 'AppServer', 'AppAppearance', 'AppIndex', 'AppEnvironment', 'AppOthers', 'AppSignInUp', 'AppAdsense'].includes(result.action.value)"
size="18" size="18"
class="vue-feather text-theme" class="vue-feather text-theme"
/> />
@@ -432,6 +432,55 @@ export default {
value: 'Invoices', value: 'Invoices',
}, },
}, },
{
title: this.$t('application_settings'),
action: {
type: 'route',
value: 'AppOthers',
},
},
{
title: this.$t('login_registration_settings'),
action: {
type: 'route',
value: 'AppSignInUp',
},
},
{
title: this.$t('appearance_settings'),
action: {
type: 'route',
value: 'AppAppearance',
},
},
{
title: this.$t('adsense_settings'),
action: {
type: 'route',
value: 'AppAdsense',
},
},
{
title: this.$t('homepage_settings'),
action: {
type: 'route',
value: 'AppIndex',
},
},
{
title: this.$t('environment_settings'),
action: {
type: 'route',
value: 'AppEnvironment',
},
},
{
title: this.$t('server_settings'),
action: {
type: 'route',
value: 'AppServer',
},
},
] ]
let fileLocations = [ let fileLocations = [

View File

@@ -3,51 +3,51 @@
<div v-if="app" class="card shadow-card"> <div v-if="app" class="card shadow-card">
<FormLabel> <FormLabel>
{{ $t('Upload Settings') }} {{ $t('upload_settings') }}
</FormLabel> </FormLabel>
<AppInputText <AppInputText
:title="$t('admin_settings.others.upload_limit')"
:description="$t('admin_settings.others.upload_limit_help')" :description="$t('admin_settings.others.upload_limit_help')"
:title="$t('admin_settings.others.upload_limit')"
> >
<input <input
@input="$updateText('/admin/settings', 'upload_limit', app.uploadLimit, true)"
v-model="app.uploadLimit" v-model="app.uploadLimit"
:placeholder="$t('admin_settings.others.upload_limit_plac')" :placeholder="$t('admin_settings.others.upload_limit_plac')"
type="number" class="focus-border-theme input-dark"
min="0" min="0"
step="1" step="1"
class="focus-border-theme input-dark" type="number"
@input="$updateText('/admin/settings', 'upload_limit', app.uploadLimit, true)"
/> />
</AppInputText> </AppInputText>
<AppInputText <AppInputText
:title="$t('File Chunk Size (in MB)')"
:description="$t('When you upload file on the server, your file will be sliced into many chunks in this size. Small size of the chunk can prevent many limits you can suffer from your server or provider. Default value is 64MB if is not set.')" :description="$t('When you upload file on the server, your file will be sliced into many chunks in this size. Small size of the chunk can prevent many limits you can suffer from your server or provider. Default value is 64MB if is not set.')"
:title="$t('File Chunk Size (in MB)')"
> >
<input <input
@input="$updateText('/admin/settings', 'chunk_size', app.chunkSize, true)"
v-model="app.chunkSize" v-model="app.chunkSize"
:placeholder="$t('Type the chunk size in MB')" :placeholder="$t('Type the chunk size in MB')"
type="number" class="focus-border-theme input-dark"
min="0" min="0"
step="1" step="1"
class="focus-border-theme input-dark" type="number"
@input="$updateText('/admin/settings', 'chunk_size', app.chunkSize, true)"
/> />
</AppInputText> </AppInputText>
<AppInputText <AppInputText
:title="$t('admin_settings.others.mimetypes_blacklist')"
:description="$t('admin_settings.others.mimetypes_blacklist_help')" :description="$t('admin_settings.others.mimetypes_blacklist_help')"
:is-last="true" :is-last="true"
:title="$t('admin_settings.others.mimetypes_blacklist')"
> >
<textarea <textarea
rows="2"
@input="$updateText('/admin/settings', 'mimetypes_blacklist', app.mimetypesBlacklist, true)"
v-model="app.mimetypesBlacklist" v-model="app.mimetypesBlacklist"
:placeholder="$t('admin_settings.others.mimetypes_blacklist_plac')" :placeholder="$t('admin_settings.others.mimetypes_blacklist_plac')"
type="text"
class="focus-border-theme input-dark" class="focus-border-theme input-dark"
rows="2"
type="text"
@input="$updateText('/admin/settings', 'mimetypes_blacklist', app.mimetypesBlacklist, true)"
/> />
</AppInputText> </AppInputText>
</div> </div>
@@ -55,45 +55,45 @@
<!--Store & Upload--> <!--Store & Upload-->
<div v-if="app" class="card shadow-card"> <div v-if="app" class="card shadow-card">
<FormLabel> <FormLabel>
{{ $t('User Features') }} {{ $t('user_features') }}
</FormLabel> </FormLabel>
<!--Available only when is not metered billing--> <!--Available only when is not metered billing-->
<div v-if="config.subscriptionType !== 'metered'"> <div v-if="config.subscriptionType !== 'metered'">
<AppInputSwitch <AppInputSwitch
:title="$t('admin_settings.others.storage_limit')"
:description="$t('admin_settings.others.storage_limit_help')" :description="$t('admin_settings.others.storage_limit_help')"
:title="$t('admin_settings.others.storage_limit')"
> >
<SwitchInput <SwitchInput
@input="$updateText('/admin/settings', 'storage_limitation', app.storageLimitation)"
v-model="app.storageLimitation" v-model="app.storageLimitation"
:state="app.storageLimitation" :state="app.storageLimitation"
class="switch" class="switch"
@input="$updateText('/admin/settings', 'storage_limitation', app.storageLimitation)"
/> />
</AppInputSwitch> </AppInputSwitch>
<AppInputText v-if="app.storageLimitation" :title="$t('admin_settings.others.default_storage')"> <AppInputText v-if="app.storageLimitation" :title="$t('admin_settings.others.default_storage')">
<input <input
@input="$updateText('/admin/settings', 'default_max_storage_amount', app.defaultStorage)"
v-model="app.defaultStorage" v-model="app.defaultStorage"
min="1"
max="999999999"
:placeholder="$t('admin_settings.others.default_storage_plac')" :placeholder="$t('admin_settings.others.default_storage_plac')"
type="number"
class="focus-border-theme input-dark" class="focus-border-theme input-dark"
max="999999999"
min="1"
type="number"
@input="$updateText('/admin/settings', 'default_max_storage_amount', app.defaultStorage)"
/> />
</AppInputText> </AppInputText>
</div> </div>
<AppInputText :title="$t('max_team_members')" :description="$t('zero_for_unlimited_members')" :is-last="true"> <AppInputText :description="$t('zero_for_unlimited_members')" :is-last="true" :title="$t('max_team_members')">
<input <input
@input="$updateText('/admin/settings', 'default_max_team_member', app.teamsDefaultMembers)"
v-model="app.teamsDefaultMembers" v-model="app.teamsDefaultMembers"
min="1"
max="999999999"
:placeholder="$t('admin_settings.others.default_storage_plac')" :placeholder="$t('admin_settings.others.default_storage_plac')"
type="number"
class="focus-border-theme input-dark" class="focus-border-theme input-dark"
max="999999999"
min="1"
type="number"
@input="$updateText('/admin/settings', 'default_max_team_member', app.teamsDefaultMembers)"
/> />
</AppInputText> </AppInputText>
</div> </div>
@@ -105,61 +105,61 @@
</FormLabel> </FormLabel>
<AppInputSwitch <AppInputSwitch
:title="$t('allow_recaptcha')"
:description="$t('allow_recaptcha_note')" :description="$t('allow_recaptcha_note')"
:is-last="!recaptcha.allowedService" :is-last="!recaptcha.allowedService"
:title="$t('allow_recaptcha')"
> >
<SwitchInput <SwitchInput
@input="$updateText('/admin/settings', 'allowed_recaptcha', recaptcha.allowedService)"
v-model="recaptcha.allowedService" v-model="recaptcha.allowedService"
class="switch"
:state="recaptcha.allowedService" :state="recaptcha.allowedService"
class="switch"
@input="$updateText('/admin/settings', 'allowed_recaptcha', recaptcha.allowedService)"
/> />
</AppInputSwitch> </AppInputSwitch>
<div <div
v-if="config.isRecaptchaConfigured && recaptcha.allowedService" v-if="config.isRecaptchaConfigured && recaptcha.allowedService"
@click="recaptcha.isVisibleCredentialsForm = !recaptcha.isVisibleCredentialsForm"
class="flex cursor-pointer items-center"
:class="{ 'mb-4': recaptcha.isVisibleCredentialsForm }" :class="{ 'mb-4': recaptcha.isVisibleCredentialsForm }"
class="flex cursor-pointer items-center"
@click="recaptcha.isVisibleCredentialsForm = !recaptcha.isVisibleCredentialsForm"
> >
<edit2-icon size="12" class="vue-feather text-theme mr-2" /> <edit2-icon class="vue-feather text-theme mr-2" size="12" />
<b class="text-xs">{{ $t('update_your_credentials') }}</b> <b class="text-xs">{{ $t('update_your_credentials') }}</b>
</div> </div>
<!--Set up recaptcha credentials--> <!--Set up recaptcha credentials-->
<ValidationObserver <ValidationObserver
v-if="(!config.isRecaptchaConfigured || recaptcha.isVisibleCredentialsForm) && recaptcha.allowedService" v-if="(!config.isRecaptchaConfigured || recaptcha.isVisibleCredentialsForm) && recaptcha.allowedService"
@submit.prevent="storeCredentials('recaptcha')"
ref="credentialsForm" ref="credentialsForm"
v-slot="{ invalid }" v-slot="{ invalid }"
tag="form"
class="rounded-xl p-5 shadow-lg" class="rounded-xl p-5 shadow-lg"
tag="form"
@submit.prevent="storeCredentials('recaptcha')"
> >
<FormLabel v-if="!config.isRecaptchaConfigured" icon="shield"> <FormLabel v-if="!config.isRecaptchaConfigured" icon="shield">
{{ $t('configure_your_credentials') }} {{ $t('configure_your_credentials') }}
</FormLabel> </FormLabel>
<ValidationProvider tag="div" mode="passive" name="Site Key" rules="required" v-slot="{ errors }"> <ValidationProvider v-slot="{ errors }" mode="passive" name="Site Key" rules="required" tag="div">
<AppInputText :title="$t('Site Key')" :error="errors[0]"> <AppInputText :error="errors[0]" :title="$t('Site Key')">
<input <input
v-model="recaptcha.credentials.client_id" v-model="recaptcha.credentials.client_id"
:placeholder="$t('Paste your Site Key here')"
type="text"
:class="{ '!border-rose-600': errors[0] }" :class="{ '!border-rose-600': errors[0] }"
:placeholder="$t('Paste your Site Key here')"
class="focus-border-theme input-dark" class="focus-border-theme input-dark"
type="text"
/> />
</AppInputText> </AppInputText>
</ValidationProvider> </ValidationProvider>
<ValidationProvider tag="div" mode="passive" name="Secret key" rules="required" v-slot="{ errors }"> <ValidationProvider v-slot="{ errors }" mode="passive" name="Secret key" rules="required" tag="div">
<AppInputText :title="$t('Secret Key')" :error="errors[0]"> <AppInputText :error="errors[0]" :title="$t('Secret Key')">
<input <input
v-model="recaptcha.credentials.client_secret" v-model="recaptcha.credentials.client_secret"
:placeholder="$t('Paste your Secret key here')"
type="text"
:class="{ '!border-rose-600': errors[0] }" :class="{ '!border-rose-600': errors[0] }"
:placeholder="$t('Paste your Secret key here')"
class="focus-border-theme input-dark" class="focus-border-theme input-dark"
type="text"
/> />
</AppInputText> </AppInputText>
</ValidationProvider> </ValidationProvider>
@@ -168,8 +168,8 @@
:disabled="isLoading" :disabled="isLoading"
:loading="isLoading" :loading="isLoading"
button-style="theme" button-style="theme"
type="submit"
class="w-full" class="w-full"
type="submit"
> >
{{ $t('store_credentials') }} {{ $t('store_credentials') }}
</ButtonBase> </ButtonBase>
@@ -183,15 +183,15 @@
</FormLabel> </FormLabel>
<AppInputButton <AppInputButton
:title="$t('cache')"
:description="$t('cache_note')" :description="$t('cache_note')"
:title="$t('cache')"
> >
<ButtonBase <ButtonBase
@click.native="flushCache"
:loading="isFlushingCache"
:disabled="isFlushingCache" :disabled="isFlushingCache"
class="w-full sm:w-auto" :loading="isFlushingCache"
button-style="theme" button-style="theme"
class="w-full sm:w-auto"
@click.native="flushCache"
> >
{{ $t('clear_cache') }} {{ $t('clear_cache') }}
</ButtonBase> </ButtonBase>
@@ -199,21 +199,21 @@
<AppInputText :title="$t('admin_settings.others.contact_email')"> <AppInputText :title="$t('admin_settings.others.contact_email')">
<input <input
class="focus-border-theme input-dark"
@input="$updateText('/admin/settings', 'contact_email', app.contactMail)"
v-model="app.contactMail" v-model="app.contactMail"
:placeholder="$t('admin_settings.others.contact_email_plac')" :placeholder="$t('admin_settings.others.contact_email_plac')"
class="focus-border-theme input-dark"
type="email" type="email"
@input="$updateText('/admin/settings', 'contact_email', app.contactMail)"
/> />
</AppInputText> </AppInputText>
<AppInputText :title="$t('admin_settings.others.google_analytics')" :is-last="true"> <AppInputText :is-last="true" :title="$t('admin_settings.others.google_analytics')">
<input <input
@input="$updateText('/admin/settings', 'google_analytics', app.googleAnalytics, true)"
v-model="app.googleAnalytics" v-model="app.googleAnalytics"
:placeholder="$t('admin_settings.others.google_analytics_plac')" :placeholder="$t('admin_settings.others.google_analytics_plac')"
type="text"
class="focus-border-theme input-dark" class="focus-border-theme input-dark"
type="text"
@input="$updateText('/admin/settings', 'google_analytics', app.googleAnalytics, true)"
/> />
</AppInputText> </AppInputText>
</div> </div>
@@ -226,17 +226,17 @@
<ValidationObserver <ValidationObserver
ref="upgradeLicense" ref="upgradeLicense"
@submit.prevent="upgradeLicense"
v-slot="{ invalid }" v-slot="{ invalid }"
tag="form"
class="mt-6" class="mt-6"
tag="form"
@submit.prevent="upgradeLicense"
> >
<ValidationProvider <ValidationProvider
tag="div"
v-slot="{ errors }" v-slot="{ errors }"
mode="passive" mode="passive"
name="Purchase Code" name="Purchase Code"
rules="required" rules="required"
tag="div"
> >
<AppInputText <AppInputText
:error="errors[0]" :error="errors[0]"
@@ -245,12 +245,12 @@
<div class="space-y-4 sm:flex sm:space-x-4 sm:space-y-0"> <div class="space-y-4 sm:flex sm:space-x-4 sm:space-y-0">
<input <input
v-model="purchaseCode" v-model="purchaseCode"
:placeholder="$t('Paste your Purchase code here...')"
type="text"
class="focus-border-theme input-dark"
:class="{ '!border-rose-600': errors[0] }" :class="{ '!border-rose-600': errors[0] }"
:placeholder="$t('Paste your Purchase code here...')"
class="focus-border-theme input-dark"
type="text"
/> />
<ButtonBase type="submit" button-style="theme" :loading="isLoadingUpgradingButton" class="w-full sm:w-auto"> <ButtonBase :loading="isLoadingUpgradingButton" button-style="theme" class="w-full sm:w-auto" type="submit">
{{ $t('Upgrade') }} {{ $t('Upgrade') }}
</ButtonBase> </ButtonBase>
</div> </div>
@@ -265,12 +265,12 @@
{{ $t('subscription') }} {{ $t('subscription') }}
</FormLabel> </FormLabel>
<AppInputText :title="$t('subscription_type')" :description="$t('subscription_type_note')" :is-last="true"> <AppInputText :description="$t('subscription_type_note')" :is-last="true" :title="$t('subscription_type')">
<SelectInput <SelectInput
@change="subscriptionTypeChange"
:default="app.subscriptionType" :default="app.subscriptionType"
:options="subscriptionTypes" :options="subscriptionTypes"
:placeholder="$t('select_subscription_type')" :placeholder="$t('select_subscription_type')"
@change="subscriptionTypeChange"
/> />
</AppInputText> </AppInputText>
</div> </div>
@@ -338,36 +338,36 @@ export default {
if (!isValid) return if (!isValid) return
axios.post('/api/admin/upgrade-license', { axios.post('/api/admin/upgrade-license', {
purchaseCode: this.purchaseCode purchaseCode: this.purchaseCode
})
.then((response) => {
this.$store.dispatch('getLanguageTranslations', this.config.locale)
this.$store.commit('REPLACE_CONFIG_VALUE', {
key: 'isSaaS',
value: true,
}) })
.then((response) => {
this.$store.dispatch('getLanguageTranslations', this.config.locale)
events.$emit('toaster', { this.$store.commit('REPLACE_CONFIG_VALUE', {
type: 'success', key: 'isSaaS',
message: this.$t('Your license was successfully upgraded'), value: true,
})
events.$emit('toaster', {
type: 'success',
message: this.$t('Your license was successfully upgraded'),
})
})
.catch((error) => {
if (error.response.status === 400) {
events.$emit('alert:open', {
title: this.$t('Purchase code is invalid or is not Extended License'),
})
} else {
events.$emit('alert:open', {
title: this.$t('popup_error.title'),
message: this.$t('popup_error.message'),
})
}
})
.finally(() => {
this.isLoadingUpgradingButton = false
}) })
})
.catch((error) => {
if (error.response.status === 400) {
events.$emit('alert:open', {
title: this.$t('Purchase code is invalid or is not Extended License'),
})
} else {
events.$emit('alert:open', {
title: this.$t('popup_error.title'),
message: this.$t('popup_error.message'),
})
}
})
.finally(() => {
this.isLoadingUpgradingButton = false
})
}, },
subscriptionTypeChange(type) { subscriptionTypeChange(type) {
events.$emit('confirm:open', { events.$emit('confirm:open', {