Modulo Generic
Il modulo Generic è la base per realizzare un modulo completamente personalizzato.
Per attivare una sezione con modulo Generic vanno configurati i settaggi nella relativa sezione dati specificando l'eventuale classe di implementazione dei metodi e il controllo personalizzato per la parte di UI.
Il campo Settings definisce una serie di parametri di configurazione per gestire form e altre strutture presenti nel modulo.
Posso impostare una classe personalizzata ereditando da Module o da ModuleGeneric per gestire, ad esempio, le notifiche della sezione:
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using DataWeb.Error;
using System.Threading;
namespace DataWeb.Structure.Modules
{
public class ModuleAppErrorList(Section section, NavigationContext navigationContext, IServiceProvider serviceProvider) : Module(section, navigationContext, serviceProvider)
{
private readonly IAppErrorService appErrorService = serviceProvider.GetService<IAppErrorService>();
public override async Task<long> GetSectionNotificationCountAsync(CancellationToken cancellationToken = default)
{
return await appErrorService.GetErrorsCountAsync(cancellationToken);
}
}
}
Nell'esempio proposto la classe non è necessaria mentre è impostato il componente Vue.js definisce la parte UI:
import Vue from "vue";
import Component from "vue-class-component";
import { Watch } from "vue-property-decorator";
import Localizer from "@DataWeb/Scripts/Common/Localizer";
@Component({ name: "ModuleAppSettingList" })
export default class ModuleAppSettingList extends Vue {
public localizer: any = Localizer;
public isDataLoading: boolean = false;
public isCacheClearing: boolean = false;
public formContext: any = null;
get navigationContext(): any {
return this.$store.getters["navigationStore/navigationContext"]
}
get itemIdMaster(): any {
return this.$store.getters["itemStore/itemIdMaster"];
}
get settingsControls(): any {
return this.$store.getters["moduleAppSettingListStore/settingsControls"];
}
@Watch("navigationContext") onPropertyChanged(value: any, oldValue: any) {
this.getData();
}
public created() {
this.formContext = { navigationContext: this.navigationContext, nav: this.navigationContext.nav };
this.getData();
}
public async getData() {
this.isDataLoading = true;
await this.$store.dispatch("moduleAppSettingListStore/getData", { nav: this.navigationContext.nav });
this.isDataLoading = false;
}
public async saveSettings() {
let controlValues = [];
this.$store.commit("itemStore/setValidationState", null);
for (let control of this.settingsControls) {
if (control.isDataField) {
controlValues.push({ name: control.name, value: control.value });
}
}
try {
let response = await this.$store.dispatch("moduleAppSettingListStore/saveSettings", { nav: this.navigationContext.nav, controlValues: controlValues });
if (response) {
await this.$store.dispatch("toastStore/onAddToast", { message: this.localizer.get("DataWeb.Setting.SettingApp_AppSettings_Saved"), type: "Success" });
this.getData();
}
} catch (error) {
if (error.response.status === 400) {
this.$store.commit("itemStore/setValidationState", error.response.data);
}
}
}
public async clearCache() {
this.isCacheClearing = true;
let response = await this.$store.dispatch("moduleAppSettingListStore/clearCache", { nav: this.navigationContext.nav });
if (response) {
await this.$store.dispatch("toastStore/onAddToast", { message: this.localizer.get("DataWeb.Setting.SettingApp_Cache_Cleared"), type: "Success" });
}
this.isCacheClearing = false;
}
public getModuleData() {
return { isCompleted: true, nav: this.navigationContext.nav };
}
};
<script lang="ts" src="./ModuleAppSettingList"></script>
<template>
<div v-if="!isDataLoading">
<div class="dw-module-list">
<div class="dw-setting">
<div class="item">
<div class="content">
<div class="dw-heading dw-pdg" data-pdgb="15">
<span class="label">{ localizer.get("DataWeb.Setting.SettingApp_Cache") }</span>
</div>
<div class="abstract">{ localizer.get("DataWeb.Setting.SettingApp_Cache_Description") }</div>
<div class="controls">
<div class="form-item">
<template v-if="!isCacheClearing">
<div class="dw-cta">
<button @click="clearCache()" data-background="gray" data-color="red" class="button">{ localizer.get("DataWeb.Setting.SettingApp_Cache_Clear") }</button>
</div>
</template>
<template v-else>
<div class="dw-cta" data-cta="multi">
<button class="button" data-background="gray" data-disabled>{ localizer.get("DataWeb.Setting.SettingApp_Cache_Clear") }</button>
</div>
<span class="loader small"><span class="icon"></span></span>
</template>
</div>
</div>
</div>
</div>
<div class="item" data-type="form">
<div class="dw-module-form">
<div class="dw-form">
<dw-form :controls="settingsControls" :store="'formStore'" :context="formContext"></dw-form>
</div>
</div>
<div class="content">
<div class="dw-cta">
<button @click="saveSettings()" class="button">{ localizer.get("DataWeb.Setting.SettingApp_AppSettings_Save") }</button>
</div>
</div>
</div>
</div>
</div>
</div>
</template>