File: D:/web/matomo.vdk/plugins/TagManager/vue/src/ImportVersion/ImportVersion.vue
<!--
Matomo - free/libre analytics platform
@link https://matomo.org
@license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
-->
<template>
<div class="tagManagerImportVersion">
<ContentBlock :content-title="translate('TagManager_ImportVersion')">
<p>{{ translate('TagManager_VersionImportInfo') }}</p>
<ActivityIndicator
:loading="isUpdating"
:loading-message="translate('TagManager_UpdatingData')"
/>
<div>
<Field
uicontrol="text"
v-model="backupName"
name="backupName"
:placeholder="' '"
:title="backupNameTitle"
:inline-help="translate('TagManager_BackupVersionNameHelp')"
/>
</div>
<div>
<Field
uicontrol="textarea"
v-model="importContent"
name="importContent"
:placeholder="' '"
:full-width="true"
:title="translate('TagManager_VersionImportContentTitle')"
/>
</div>
<SaveButton
class="importVersion"
:disabled="!importContent"
@confirm="importVersion(backupName, importContent)"
:value="translate('TagManager_VersionImportOverwriteContent')"
>
</SaveButton>
</ContentBlock>
<div
class="ui-confirm"
id="confirmImportContainerVersion"
ref="confirmImportContainerVersion"
>
<h2>{{ translate('TagManager_ConfirmImportContainerVersion') }} </h2>
<input
role="yes"
type="button"
:value="translate('General_Yes')"
/>
<input
role="no"
type="button"
:value="translate('General_No')"
/>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import {
Matomo,
translate,
AjaxHelper,
ContentBlock,
ActivityIndicator,
NotificationsStore,
NotificationType,
} from 'CoreHome';
import { Field, SaveButton } from 'CorePluginsAdmin';
const NOTIFICATION_ID = 'importContainerVersion';
interface ContainerImportInput {
tags?: unknown;
triggers?: unknown;
variables?: unknown;
idcontainer?: unknown;
context?: unknown;
}
interface ImportVersionState {
isUpdating: boolean;
backupName: string;
importContent: string,
}
export default defineComponent({
props: {
idContainer: {
type: String,
required: true,
},
},
components: {
ContentBlock,
ActivityIndicator,
Field,
SaveButton,
},
data(): ImportVersionState {
return {
isUpdating: false,
backupName: '',
importContent: '',
};
},
methods: {
showNotification(message: string, context: NotificationType['context'],
type: null|NotificationType['type'] = null) {
const instanceId = NotificationsStore.show({
message,
context,
type: type !== null ? type : 'toast',
id: NOTIFICATION_ID,
});
setTimeout(() => {
NotificationsStore.scrollToNotification(instanceId);
}, 200);
},
importVersion(backupName: string, version: string) {
if (!version) {
return;
}
let parsed: ContainerImportInput;
try {
parsed = JSON.parse(version);
} catch (e) {
this.showNotification(translate('TagManager_ErrorInvalidContainerImportFormat'), 'error');
return;
}
if ('tags' in parsed
&& 'triggers' in parsed
&& 'variables' in parsed
&& 'idcontainer' in parsed
&& 'context' in parsed
) {
Matomo.helper.modalConfirm(
this.$refs.confirmImportContainerVersion as HTMLElement,
{
yes: () => {
this.isUpdating = true;
const post = {
exportedContainerVersion: version,
};
AjaxHelper.post(
{
method: 'TagManager.importContainerVersion',
idContainer: this.idContainer,
backupName: this.backupName,
},
post,
{
createErrorNotification: false,
},
).then(() => {
this.showNotification(translate('TagManager_VersionImportSuccess'), 'success');
this.isUpdating = false;
window.location.reload();
}).catch((e) => {
this.showNotification(e.message, 'error', 'transient');
this.isUpdating = false;
});
},
},
);
} else {
this.showNotification(translate('TagManager_ErrorContainerVersionImportIncomplete'), 'error');
}
},
},
computed: {
backupNameTitle() {
return `${translate('TagManager_BackupVersionName')} (${translate('General_Recommended')})`;
},
},
});
</script>