diff --git a/src/_store/system.module.js b/src/_store/system.module.js index b50137f..48637f8 100644 --- a/src/_store/system.module.js +++ b/src/_store/system.module.js @@ -7,14 +7,30 @@ const state = { paymentsEnabled: false, sageLauncher: false }, - messages: {}, + error: null, + messages: { + durationToMillis: function(count, units) { + return parseInt(count) * parseInt(state.messages['time_duration_'+units+'_factor']); + }, + millisToDuration: function (ms) { + const durations = state.timeDurationOptionsReversed; + for (let i=0; i= durationMillis && ((ms % durationMillis) === 0 || i === durations.length-1)) { + return {count: parseInt(ms) / durationMillis, units: durations[i]}; + } + } + return {count: parseInt(ms), units: ''}; + } + }, countries: [], locales: [], timezones: [], detectedTimezone: null, detectedLocale: null, accountDeletionOptions: [], - error: null + timeDurationOptions: [], + timeDurationOptionsReversed: [] }; const actions = { @@ -153,6 +169,10 @@ const mutations = { if (messages.field_label_policy_account_deletion_options) { state.accountDeletionOptions = messages.field_label_policy_account_deletion_options.split(','); } + if (messages.time_duration_options) { + state.timeDurationOptions = messages.time_duration_options.split(','); + state.timeDurationOptionsReversed = state.timeDurationOptions.slice().reverse(); + } }, loadMessagesFailure(state, error) { state.error = error; @@ -166,7 +186,7 @@ const mutations = { }, detectTimezoneRequest(state) {}, detectTimezoneSuccess(state, detectedTimezone) { - console.log('detectTimezoneSuccess: detectedTimezone='+JSON.stringify(detectedTimezone)); + // console.log('detectTimezoneSuccess: detectedTimezone='+JSON.stringify(detectedTimezone)); state.detectedTimezone = detectedTimezone; }, detectTimezoneFailure(state, error) { diff --git a/src/_store/users.module.js b/src/_store/users.module.js index 962183f..ce5dd92 100644 --- a/src/_store/users.module.js +++ b/src/_store/users.module.js @@ -4,7 +4,8 @@ import { account } from '../_store/account.module'; const state = { all: {}, user: null, - policy: {} + policy: {}, + policyStatus: {} }; const actions = { @@ -121,12 +122,14 @@ const mutations = { }, updatePolicyByUuidRequest(state) { - state.user = { loading: true }; + state.policyStatus = { updating: true }; }, updatePolicyByUuidSuccess(state, policy) { + state.policyStatus = {}; state.policy = policy; }, updatePolicyByUuidFailure(state, error) { + state.policyStatus = {}; state.policy = { error }; }, diff --git a/src/account/profile/PolicyPage.vue b/src/account/profile/PolicyPage.vue index 94a8282..1f0c60b 100644 --- a/src/account/profile/PolicyPage.vue +++ b/src/account/profile/PolicyPage.vue @@ -2,14 +2,44 @@

{{messages.form_label_title_account_policy}}

+
- {{messages['account_deletion_description_'+policy.deletionPolicy]}} -
{{ errors.first('deletionPolicy') }}
+
{{ errors.first('deletionPolicy') }}
+ +
+
+ + + +
{{ errors.first('accountOperationTimeout') }}
+ {{messages.field_label_policy_account_operation_timeout_description}} +
+ +
+
+ + + +
{{ errors.first('nodeOperationTimeout') }}
+ {{messages.field_label_policy_node_operation_timeout_description}} +
+ +
+
+ + +
+
@@ -19,20 +49,54 @@ export default { data() { - return {submitted: false} + return { + submitted: false, + deletionPolicy: '', + accountOperationTimeout: '', + accountOperationTimeoutUnits: '', + nodeOperationTimeout: '', + nodeOperationTimeoutUnits: '' + } }, computed: { ...mapState('account', { - currentUser: state => state.user, - status: state => state.status + currentUser: state => state.user }), - ...mapState('system', ['messages', 'accountDeletionOptions']), - ...mapState('users', ['policy']) + ...mapState('system', ['messages', 'accountDeletionOptions', 'timeDurationOptions', 'timeDurationOptionsReversed']), + ...mapState('users', ['policy', 'policyStatus']) }, methods: { ...mapActions('users', ['getPolicyByUuid', 'updatePolicyByUuid', 'addPolicyContactByUuid', 'removePolicyContactByTypeAndInfo']), handleSubmit(e) { - console.log('submitting with deletionPolicy='+this.policy.deletionPolicy); + this.submitted = true; + this.updatePolicyByUuid({ + uuid: this.currentUser.uuid, + policy: { + deletionPolicy: this.deletionPolicy, + accountOperationTimeout: this.messages.durationToMillis(this.accountOperationTimeout, this.accountOperationTimeoutUnits), + nodeOperationTimeout: this.messages.durationToMillis(this.nodeOperationTimeout, this.nodeOperationTimeoutUnits) + }, + messages: this.messages, + errors: this.errors + }); + } + }, + watch: { + policy (p) { + // console.log('watch.policy: received: '+JSON.stringify(p)); + if (typeof p.deletionPolicy !== 'undefined' && p.deletionPolicy !== null) { + this.deletionPolicy = p.deletionPolicy; + } + if (typeof p.accountOperationTimeout !== 'undefined' && p.accountOperationTimeout !== null) { + const parts = this.messages.millisToDuration(p.accountOperationTimeout); + this.accountOperationTimeout = parts.count; + this.accountOperationTimeoutUnits = parts.units; + } + if (typeof p.nodeOperationTimeout !== 'undefined' && p.nodeOperationTimeout !== null) { + const parts = this.messages.millisToDuration(p.nodeOperationTimeout); + this.nodeOperationTimeout = parts.count; + this.nodeOperationTimeoutUnits = parts.units; + } } }, created () {