1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-23 14:57:46 +01:00

feat: Aggiunto aggiornamento ed eliminazione di un record

This commit is contained in:
Maicol Battistini 2021-10-12 13:04:36 +02:00
parent 2d3eed6cd0
commit fd7164606c
No known key found for this signature in database
GPG Key ID: 4FDB0F87CDB1D34A
2 changed files with 125 additions and 33 deletions

View File

@ -108,6 +108,20 @@ export default class RecordsPage extends Page {
}
}
async onupdate(vnode) {
const rows = $('.mdc-data-table__row[data-model-id]');
if (rows.length > 0) {
rows.on(
'click',
(event: PointerEvent) => {
this.updateRecord($(event.target)
.parent('tr')
.data('model-id'));
}
);
}
}
tableColumns(): Children {
return collect(this.columns)
.map(
@ -143,17 +157,52 @@ export default class RecordsPage extends Page {
}
return (
<TableRow key={index}>
<TableRow key={index} data-model-id={row.id} style="cursor: pointer">
{cells.map((cell: string, index_) => <TableCell key={index_}>{cell}</TableCell>)}
</TableRow>
);
});
}
async updateRecord(id: number) {
// noinspection JSUnresolvedFunction
const instance: Model = (await this.model.find(id)).getData();
const dialog = $('mwc-dialog#add-record-dialog');
// eslint-disable-next-line sonarjs/no-duplicate-string
dialog.find('text-field, text-area')
.each((index, field: TextField | TextArea) => {
field.value = instance[field.id];
});
dialog.find('mwc-button#delete-button')
.show()
.on('click', () => {
const confirmDialog = $('mwc-dialog#confirm-delete-record-dialog');
confirmDialog.find('mwc-button#confirm-button')
.on('click', async () => {
await instance.delete();
this.rows = this.rows.filter(row => row.id !== instance.id);
m.redraw();
confirmDialog.get(0)
.close();
dialog.get(0)
.close();
await showSnackbar(this.__('Record eliminato!'), 4000);
});
confirmDialog.get(0)
.show();
});
dialog.get(0)
.show();
}
recordDialog() {
return (
<mwc-dialog id="add-record-dialog" heading={this.__('Aggiungi nuovo record')}>
<form method="PUT">
<text-field id="id" name="id" style="display: none;" data-default-value=""/>
{(() => {
const sections = collect(this.sections);
@ -169,7 +218,8 @@ export default class RecordsPage extends Page {
return fields.map((field, fieldIndex) => (
<Cell key={fieldIndex} columnspan={12 / (section.columns ?? 3)}>
<text-field {...field} id={field.id ?? fieldIndex}
name={field.name ?? field.id ?? fieldIndex}/>
name={field.name ?? field.id ?? fieldIndex}
data-default-value={field.value ?? ''}/>
</Cell>))
.toArray();
})()}
@ -190,6 +240,20 @@ export default class RecordsPage extends Page {
<mwc-button slot="secondaryAction" dialogAction="cancel">
{this.__('Annulla')}
</mwc-button>
<mwc-button id="delete-button" slot="secondaryAction" label={this.__('Elimina')}
style="--mdc-theme-primary: var(--mdc-theme-error, red); float: left; display: none;">
<Mdi icon="delete-outline" slot="icon"/>
</mwc-button>
</mwc-dialog>
);
}
deleteRecordDialog(): Children {
return (
<mwc-dialog id="confirm-delete-record-dialog">
<p>{this.__('Sei sicuro di voler eliminare questo record?')}</p>
<mwc-button id="confirm-button" slot="primaryAction" label={this.__('Sì')}/>
<mwc-button slot="secondaryAction" dialogAction="discard" label={this.__('No')}/>
</mwc-dialog>
);
}
@ -213,6 +277,7 @@ export default class RecordsPage extends Page {
<Mdi icon="plus" slot="icon"/>
</mwc-fab>
{this.recordDialog()}
{this.deleteRecordDialog()}
{this.dialogs}
</>
);
@ -222,10 +287,22 @@ export default class RecordsPage extends Page {
super.oncreate(vnode);
const fab: Cash = $('mwc-fab#add-record');
fab.on('click', () => {
const dialog: Cash = fab.next('mwc-dialog#add-record-dialog');
const form: Cash = dialog.find('form');
fab.on('click', () => {
form.find('text-field, text-area')
.each((index, field) => {
field.value = $(field)
.data('default-value');
});
dialog.find('mwc-button#delete-button')
.hide();
dialog.get(0)
.show();
});
dialog.find('mwc-button[type="submit"]')
.on('click', () => {
form.trigger('submit');
@ -247,17 +324,29 @@ export default class RecordsPage extends Page {
if (response.getModelId()) {
dialog.get(0)
.close();
this.rows.push(response.getModel());
const id = form.find('text-field#id')
.val();
const model = response.getModel();
if (id !== '') {
let index = 0;
for (const row of this.rows) {
if (row.id === model.id) {
this.rows[index] = model;
break;
}
index += 1;
}
} else {
this.rows.push(model);
}
m.redraw();
await showSnackbar(this.__('Record creato'), 4000);
await showSnackbar(this.__('Record salvato'), 4000);
}
} else {
await showSnackbar(this.__('Campi non validi. Controlla i dati inseriti'));
}
});
dialog.get(0)
.show();
});
}
}

View File

@ -4,6 +4,9 @@ import {
} from 'coloquent';
import {snakeCase} from 'lodash-es';
/**
* @property {number} id
*/
export default class Model extends BaseModel {
/**
* Just an alias to the get() method