11import { acceptHMRUpdate , defineStore } from "pinia" ;
2- import { computed , ComputedRef , reactive , UnwrapNestedRefs } from "vue" ;
2+ import { computed , reactive , ref } from "vue" ;
33import { useServiceControlStore } from "./ServiceControlStore" ;
44import LicenseInfo , { LicenseStatus } from "@/resources/LicenseInfo" ;
55import { LicenseWarningLevel } from "@/composables/LicenseStatus" ;
66import { useGetDayDiffFromToday } from "@/composables/formatter" ;
77
8- interface License extends LicenseInfo {
9- licenseEdition : ComputedRef < string > ;
10- formattedExpirationDate : ComputedRef < string > ;
11- formattedUpgradeProtectionExpiration : ComputedRef < string > ;
12- formattedInstanceName : ComputedRef < string > ;
13- }
14-
15- class emptyLicense implements License {
16- edition = "" ;
17- expiration_date = "" ;
18- upgrade_protection_expiration = "" ;
19- license_type = "" ;
20- instance_name = "" ;
21- trial_license = true ;
22- registered_to = "" ;
23- status = "" ;
24- license_status = LicenseStatus . Unavailable ;
25- license_extension_url = "" ;
26- licenseEdition = computed ( ( ) => {
27- return `${ this . license_type } ${ this . edition ? `, ${ this . edition } ` : "" } ` ;
28- } ) ;
29- formattedInstanceName = computed ( ( ) => {
30- return this . instance_name || "Upgrade ServiceControl to v3.4.0+ to see more information about this license" ;
31- } ) ;
32- formattedExpirationDate = computed ( ( ) => {
33- return this . expiration_date ? new Date ( this . expiration_date . replace ( "Z" , "" ) ) . toLocaleDateString ( ) : "" ;
34- } ) ;
35- formattedUpgradeProtectionExpiration = computed ( ( ) => {
36- return this . upgrade_protection_expiration ? new Date ( this . upgrade_protection_expiration . replace ( "Z" , "" ) ) . toLocaleDateString ( ) : "" ;
37- } ) ;
38- }
39-
408export const useLicenseStore = defineStore ( "LicenseStore" , ( ) => {
419 const serviceControlStore = useServiceControlStore ( ) ;
4210
43- const license = reactive < License > ( new emptyLicense ( ) ) ;
11+ const license = reactive < LicenseInfo > ( {
12+ edition : "" ,
13+ expiration_date : "" ,
14+ upgrade_protection_expiration : "" ,
15+ license_type : "" ,
16+ instance_name : "" ,
17+ trial_license : true ,
18+ registered_to : "" ,
19+ status : "" ,
20+ license_status : LicenseStatus . Unavailable ,
21+ license_extension_url : "" ,
22+ } ) ;
23+
4424 const licenseStatus = reactive ( {
4525 isSubscriptionLicense : false ,
4626 isUpgradeProtectionLicense : false ,
@@ -59,37 +39,61 @@ export const useLicenseStore = defineStore("LicenseStore", () => {
5939 licenseExtensionUrl : "" ,
6040 } ) ;
6141
42+ const loading = ref ( false ) ;
43+
44+ // Computed properties for license formatting
45+ const licenseEdition = computed ( ( ) => {
46+ return `${ license . license_type } ${ license . edition ? `, ${ license . edition } ` : "" } ` ;
47+ } ) ;
48+
49+ const formattedInstanceName = computed ( ( ) => {
50+ return license . instance_name || "Upgrade ServiceControl to v3.4.0+ to see more information about this license" ;
51+ } ) ;
52+
53+ const formattedExpirationDate = computed ( ( ) => {
54+ return license . expiration_date ? new Date ( license . expiration_date . replace ( "Z" , "" ) ) . toLocaleDateString ( ) : "" ;
55+ } ) ;
56+
57+ const formattedUpgradeProtectionExpiration = computed ( ( ) => {
58+ return license . upgrade_protection_expiration ? new Date ( license . upgrade_protection_expiration . replace ( "Z" , "" ) ) . toLocaleDateString ( ) : "" ;
59+ } ) ;
60+
6261 async function refresh ( ) {
63- const lic = await getLicense ( ) ;
64- if ( lic === null ) {
65- return ;
62+ loading . value = true ;
63+ try {
64+ const lic = await getLicense ( ) ;
65+ if ( lic === null ) {
66+ return ;
67+ }
68+ license . license_type = lic . license_type ;
69+ license . expiration_date = lic . expiration_date ;
70+ license . trial_license = lic . trial_license ;
71+ license . edition = lic . edition ;
72+ license . license_status = lic . license_status ;
73+ license . instance_name = lic . instance_name ;
74+ license . registered_to = lic . registered_to ;
75+ license . status = lic . status ;
76+ license . license_extension_url = lic . license_extension_url ?? "https://particular.net/extend-your-trial?p=servicepulse" ;
77+ license . upgrade_protection_expiration = lic . upgrade_protection_expiration ;
78+
79+ licenseStatus . isSubscriptionLicense = isSubscriptionLicense ( ) ;
80+ licenseStatus . isUpgradeProtectionLicense = isUpgradeProtectionLicense ( ) ;
81+ licenseStatus . isTrialLicense = license . trial_license ;
82+ licenseStatus . isPlatformExpired = license . license_status === LicenseStatus . InvalidDueToExpiredSubscription ;
83+ licenseStatus . isPlatformTrialExpiring = license . license_status === LicenseStatus . ValidWithExpiringTrial ;
84+ licenseStatus . isPlatformTrialExpired = license . license_status === LicenseStatus . InvalidDueToExpiredTrial ;
85+ licenseStatus . isInvalidDueToUpgradeProtectionExpired = license . license_status === LicenseStatus . InvalidDueToExpiredUpgradeProtection ;
86+ licenseStatus . isValidWithExpiredUpgradeProtection = license . license_status === LicenseStatus . ValidWithExpiredUpgradeProtection ;
87+ licenseStatus . isValidWithExpiringUpgradeProtection = license . license_status === LicenseStatus . ValidWithExpiringUpgradeProtection ;
88+ licenseStatus . upgradeDaysLeft = getUpgradeDaysLeft ( ) ;
89+ licenseStatus . subscriptionDaysLeft = getSubscriptionDaysLeft ( ) ;
90+ licenseStatus . trialDaysLeft = getTrialDaysLeft ( ) ;
91+ licenseStatus . warningLevel = getLicenseWarningLevel ( ) ;
92+ licenseStatus . isExpired = licenseStatus . isPlatformExpired || licenseStatus . isPlatformTrialExpired || licenseStatus . isInvalidDueToUpgradeProtectionExpired ;
93+ licenseStatus . licenseExtensionUrl = license . license_extension_url ;
94+ } finally {
95+ loading . value = false ;
6696 }
67- license . license_type = lic . license_type ;
68- license . expiration_date = lic . expiration_date ;
69- license . trial_license = lic . trial_license ;
70- license . edition = lic . edition ;
71- license . license_status = lic . license_status ;
72- license . instance_name = lic . instance_name ;
73- license . registered_to = lic . registered_to ;
74- license . status = lic . status ;
75- license . license_extension_url = lic . license_extension_url ?? "https://particular.net/extend-your-trial?p=servicepulse" ;
76- license . upgrade_protection_expiration = lic . upgrade_protection_expiration ;
77-
78- licenseStatus . isSubscriptionLicense = isSubscriptionLicense ( license ) ;
79- licenseStatus . isUpgradeProtectionLicense = isUpgradeProtectionLicense ( license ) ;
80- licenseStatus . isTrialLicense = license . trial_license ;
81- licenseStatus . isPlatformExpired = license . license_status === LicenseStatus . InvalidDueToExpiredSubscription ;
82- licenseStatus . isPlatformTrialExpiring = license . license_status === LicenseStatus . ValidWithExpiringTrial ;
83- licenseStatus . isPlatformTrialExpired = license . license_status === LicenseStatus . InvalidDueToExpiredTrial ;
84- licenseStatus . isInvalidDueToUpgradeProtectionExpired = license . license_status === LicenseStatus . InvalidDueToExpiredUpgradeProtection ;
85- licenseStatus . isValidWithExpiredUpgradeProtection = license . license_status === LicenseStatus . ValidWithExpiredUpgradeProtection ;
86- licenseStatus . isValidWithExpiringUpgradeProtection = license . license_status === LicenseStatus . ValidWithExpiringUpgradeProtection ;
87- licenseStatus . upgradeDaysLeft = getUpgradeDaysLeft ( license ) ;
88- licenseStatus . subscriptionDaysLeft = getSubscriptionDaysLeft ( license ) ;
89- licenseStatus . trialDaysLeft = getTrialDaysLeft ( license ) ;
90- licenseStatus . warningLevel = getLicenseWarningLevel ( license . license_status ) ;
91- licenseStatus . isExpired = licenseStatus . isPlatformExpired || licenseStatus . isPlatformTrialExpired || licenseStatus . isInvalidDueToUpgradeProtectionExpired ;
92- licenseStatus . licenseExtensionUrl = license . license_extension_url ;
9397 }
9498
9599 async function getLicense ( ) {
@@ -102,67 +106,76 @@ export const useLicenseStore = defineStore("LicenseStore", () => {
102106 }
103107 }
104108
105- return { refresh, license, licenseStatus } ;
106- } ) ;
109+ function getLicenseWarningLevel ( ) {
110+ switch ( license . license_status ) {
111+ case LicenseStatus . InvalidDueToExpiredTrial :
112+ case LicenseStatus . InvalidDueToExpiredSubscription :
113+ case LicenseStatus . InvalidDueToExpiredUpgradeProtection :
114+ return LicenseWarningLevel . Danger ;
115+ case LicenseStatus . ValidWithExpiringUpgradeProtection :
116+ case LicenseStatus . ValidWithExpiringTrial :
117+ case LicenseStatus . ValidWithExpiredUpgradeProtection :
118+ case LicenseStatus . ValidWithExpiringSubscription :
119+ return LicenseWarningLevel . Warning ;
120+ default :
121+ return LicenseWarningLevel . None ;
122+ }
123+ }
107124
108- function getLicenseWarningLevel ( licenseStatus : LicenseStatus ) {
109- switch ( licenseStatus ) {
110- case LicenseStatus . InvalidDueToExpiredTrial :
111- case LicenseStatus . InvalidDueToExpiredSubscription :
112- case LicenseStatus . InvalidDueToExpiredUpgradeProtection :
113- return LicenseWarningLevel . Danger ;
114- case LicenseStatus . ValidWithExpiringUpgradeProtection :
115- case LicenseStatus . ValidWithExpiringTrial :
116- case LicenseStatus . ValidWithExpiredUpgradeProtection :
117- case LicenseStatus . ValidWithExpiringSubscription :
118- return LicenseWarningLevel . Warning ;
119- default :
120- return LicenseWarningLevel . None ;
125+ function isUpgradeProtectionLicense ( ) {
126+ return license . upgrade_protection_expiration !== undefined && license . upgrade_protection_expiration !== "" ;
121127 }
122- }
123128
124- function isUpgradeProtectionLicense ( license : UnwrapNestedRefs < License > ) {
125- return license . upgrade_protection_expiration !== undefined && license . upgrade_protection_expiration !== "" ;
126- }
129+ function isSubscriptionLicense ( ) {
130+ return license . expiration_date !== undefined && license . expiration_date !== "" && ! license . trial_license ;
131+ }
127132
128- function isSubscriptionLicense ( license : UnwrapNestedRefs < License > ) {
129- return license . expiration_date !== undefined && license . expiration_date !== "" && ! license . trial_license ;
130- }
133+ function getSubscriptionDaysLeft ( ) {
134+ if ( license . license_status === LicenseStatus . InvalidDueToExpiredSubscription ) return " - expired" ;
131135
132- function getSubscriptionDaysLeft ( license : UnwrapNestedRefs < License > ) {
133- if ( license . license_status === LicenseStatus . InvalidDueToExpiredSubscription ) return " - expired" ;
136+ const isExpiring = license . license_status === LicenseStatus . ValidWithExpiringSubscription ;
137+ return getExpiringText ( isExpiring , license . expiration_date ) ;
138+ }
134139
135- const isExpiring = license . license_status === LicenseStatus . ValidWithExpiringSubscription ;
136- return getExpiringText ( isExpiring , license . expiration_date ) ;
137- }
140+ function getTrialDaysLeft ( ) {
141+ if ( license . license_status === LicenseStatus . InvalidDueToExpiredTrial ) return " - expired" ;
138142
139- function getTrialDaysLeft ( license : UnwrapNestedRefs < License > ) {
140- if ( license . license_status === LicenseStatus . InvalidDueToExpiredTrial ) return " - expired" ;
143+ const isExpiring = license . license_status === LicenseStatus . ValidWithExpiringTrial ;
144+ return getExpiringText ( isExpiring , license . expiration_date ) ;
145+ }
141146
142- const isExpiring = license . license_status === LicenseStatus . ValidWithExpiringTrial ;
143- return getExpiringText ( isExpiring , license . expiration_date ) ;
144- }
147+ function getExpiringText ( isExpiring : boolean , expirationDate : string ) {
148+ const expiringIn = useGetDayDiffFromToday ( expirationDate ) ;
149+ if ( isNaN ( expiringIn ) ) return "" ;
150+ if ( ! isExpiring ) return ` - ${ expiringIn } days left` ;
151+ if ( expiringIn === 0 ) return " - expiring today" ;
152+ if ( expiringIn === 1 ) return " - expiring tomorrow" ;
153+ return ` - expiring in ${ expiringIn } days` ;
154+ }
145155
146- function getExpiringText ( isExpiring : boolean , expirationDate : string ) {
147- const expiringIn = useGetDayDiffFromToday ( expirationDate ) ;
148- if ( isNaN ( expiringIn ) ) return "" ;
149- if ( ! isExpiring ) return ` - ${ expiringIn } days left` ;
150- if ( expiringIn === 0 ) return " - expiring today" ;
151- if ( expiringIn === 1 ) return " - expiring tomorrow" ;
152- return ` - expiring in ${ expiringIn } days` ;
153- }
156+ function getUpgradeDaysLeft ( ) {
157+ if ( license . license_status === LicenseStatus . InvalidDueToExpiredUpgradeProtection ) return " - expired" ;
154158
155- function getUpgradeDaysLeft ( license : UnwrapNestedRefs < License > ) {
156- if ( license . license_status === LicenseStatus . InvalidDueToExpiredUpgradeProtection ) return " - expired" ;
159+ const expiringIn = useGetDayDiffFromToday ( license . upgrade_protection_expiration ) ;
160+ //TODO: can this be unified with the function above? Text is currently similar but not identical.
161+ if ( isNaN ( expiringIn ) ) return "" ;
162+ if ( expiringIn <= 0 ) return " - expired" ;
163+ if ( expiringIn === 0 ) return " - expiring today" ;
164+ if ( expiringIn === 1 ) return " - 1 day left" ;
165+ return " - " + expiringIn + " days left" ;
166+ }
157167
158- const expiringIn = useGetDayDiffFromToday ( license . upgrade_protection_expiration ) ;
159- //TODO: can this be unified with the function above? Text is currently similar but not identical.
160- if ( isNaN ( expiringIn ) ) return "" ;
161- if ( expiringIn <= 0 ) return " - expired" ;
162- if ( expiringIn === 0 ) return " - expiring today" ;
163- if ( expiringIn === 1 ) return " - 1 day left" ;
164- return " - " + expiringIn + " days left" ;
165- }
168+ return {
169+ refresh,
170+ license,
171+ licenseStatus,
172+ loading,
173+ licenseEdition,
174+ formattedInstanceName,
175+ formattedExpirationDate,
176+ formattedUpgradeProtectionExpiration,
177+ } ;
178+ } ) ;
166179
167180if ( import . meta. hot ) {
168181 import . meta. hot . accept ( acceptHMRUpdate ( useLicenseStore , import . meta. hot ) ) ;
0 commit comments