@dile/crud 0.7.3 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,7 @@ import '@dile/ui/components/select/select.js';
5
5
  import '@dile/ui/components/modal/modal.js';
6
6
  import '@dile/ui/components/modal/modal-help.js';
7
7
  import '../../item-delete/crud-item-delete.js';
8
+ import '../../item-restore/crud-item-restore.js';
8
9
  import '../../list/crud-list.js';
9
10
  import '../../ui/crud-sort-form.js';
10
11
  import '../../ui/crud-page-size.js';
@@ -106,6 +107,9 @@ export class DileCrud extends DileI18nMixin(DileCrudMixin(LitElement)) {
106
107
  get deleteElement() {
107
108
  return this.shadowRoot.getElementById('eldelete');
108
109
  }
110
+ get restoreElement() {
111
+ return this.shadowRoot.getElementById('elrestore');
112
+ }
109
113
  get filtersElement() {
110
114
  return this.shadowRoot.getElementById('elfilters');
111
115
  }
@@ -143,6 +147,13 @@ export class DileCrud extends DileI18nMixin(DileCrudMixin(LitElement)) {
143
147
  language="${this.language}"
144
148
  ></dile-crud-item-delete>
145
149
 
150
+ <dile-crud-item-restore
151
+ id="elrestore"
152
+ endpoint="${this.config.endpoint}"
153
+ @restore-success=${this.restoreSuccess}
154
+ language="${this.language}"
155
+ ></dile-crud-item-restore>
156
+
146
157
  ${this.insertTemplate}
147
158
  ${this.updateTemplate}
148
159
  `;
@@ -186,6 +197,7 @@ export class DileCrud extends DileI18nMixin(DileCrudMixin(LitElement)) {
186
197
  .config=${this.config}
187
198
  @crud-item-edit=${this.updateRequest}
188
199
  @crud-item-delete=${this.itemDeleteRequest}
200
+ @crud-item-restore=${this.itemRestoreRequest}
189
201
  @insert-requested=${this.openInsert}
190
202
  .actionIds=${this.actionIds}
191
203
  belongsTo=${this.belongsTo}
@@ -371,6 +383,10 @@ export class DileCrud extends DileI18nMixin(DileCrudMixin(LitElement)) {
371
383
  this.deleteElement.delete(e.detail.itemId)
372
384
  }
373
385
 
386
+ itemRestoreRequest(e) {
387
+ this.restoreElement.restore(e.detail.itemId)
388
+ }
389
+
374
390
  // SUCCESS HANDLERS
375
391
  modalInsertSuccess() {
376
392
  this.modalInsert.close();
@@ -381,6 +397,10 @@ export class DileCrud extends DileI18nMixin(DileCrudMixin(LitElement)) {
381
397
  this.refresh();
382
398
  }
383
399
 
400
+ restoreSuccess() {
401
+ this.refresh();
402
+ }
403
+
384
404
  refresh() {
385
405
  this.listElement.refresh();
386
406
  }
@@ -1,2 +1,2 @@
1
- import { DileCrudItemDelete } from "./src/DileCrudItemDelete";
1
+ import { DileCrudItemDelete } from "./src/DileCrudItemDelete.js";
2
2
  customElements.define('dile-crud-item-delete', DileCrudItemDelete);
@@ -1 +1 @@
1
- export { DileCrudItemDelete } from "./src/DileCrudItemDelete";
1
+ export { DileCrudItemDelete } from "./src/DileCrudItemDelete.js";
@@ -4,6 +4,8 @@ import { ResponseApiAdapter } from '../../../lib/ResponseApiAdapter.js';
4
4
  import { DileI18nMixin } from '../../../lib/DileI18nMixin.js';
5
5
  import '../../ajax/ajax.js';
6
6
 
7
+ const OPERATION_ITEM_MISSING_ERROR = 'Please provide the element id to delete';
8
+
7
9
  export class DileCrudItemDelete extends DileI18nMixin(LitElement) {
8
10
  static styles = [
9
11
  css`
@@ -36,12 +38,17 @@ export class DileCrudItemDelete extends DileI18nMixin(LitElement) {
36
38
  confirmMessage: { type: String },
37
39
  cancelLabel: { type: String },
38
40
  acceptLabel: { type: String },
41
+ method: { type: String },
39
42
  };
40
43
  }
41
44
 
42
45
  constructor() {
43
46
  super();
47
+ this.successEventName = 'delete-success';
48
+ this.errorEventName = 'delete-error';
44
49
  this.responseAdapter = new ResponseApiAdapter();
50
+ this.method = 'delete';
51
+ this.ITEM_TO_DELETE_
45
52
  }
46
53
 
47
54
  firstUpdated() {
@@ -53,8 +60,8 @@ export class DileCrudItemDelete extends DileI18nMixin(LitElement) {
53
60
  return html`
54
61
  <dile-ajax
55
62
  id="ajaxdelete"
56
- method="delete"
57
- url="${this.endpoint}/${this.relatedId}"
63
+ method="${this.method}"
64
+ url="${this.computeUrl(this.endpoint, this.relatedId)}"
58
65
  @ajax-success="${this.doSuccessDelete}"
59
66
  @ajax-error="${this.doErrorDelete}"
60
67
  ></dile-ajax>
@@ -69,12 +76,16 @@ export class DileCrudItemDelete extends DileI18nMixin(LitElement) {
69
76
  `;
70
77
  }
71
78
 
79
+ computeUrl(endpoint, relatedId) {
80
+ return `${endpoint}/${relatedId}`
81
+ }
82
+
72
83
  delete(itemId) {
73
84
  if(itemId != "" && itemId != undefined) {
74
85
  this.relatedId = itemId;
75
86
  this.elconfirm.open();
76
87
  } else {
77
- throw new Error('Please provide the element id to delete');
88
+ throw new Error(OPERATION_ITEM_MISSING_ERROR);
78
89
  }
79
90
  }
80
91
 
@@ -84,7 +95,7 @@ export class DileCrudItemDelete extends DileI18nMixin(LitElement) {
84
95
 
85
96
  doSuccessDelete(e) {
86
97
  let msg = this.computeResponseMessage(e.detail);
87
- this.dispatchEvent(new CustomEvent('delete-success', {
98
+ this.dispatchEvent(new CustomEvent(this.successEventName, {
88
99
  bubbles: true,
89
100
  composed: true,
90
101
  detail: {
@@ -96,7 +107,7 @@ export class DileCrudItemDelete extends DileI18nMixin(LitElement) {
96
107
 
97
108
  doErrorDelete(e) {
98
109
  let msg = this.computeResponseMessage(e.detail);
99
- this.dispatchEvent(new CustomEvent('delete-error', {
110
+ this.dispatchEvent(new CustomEvent(this.errorEventName, {
100
111
  bubbles: true,
101
112
  composed: true,
102
113
  detail: {
@@ -0,0 +1,2 @@
1
+ import { DileCrudItemRestore} from "./src/DileCrudItemRestore.js";
2
+ customElements.define('dile-crud-item-restore', DileCrudItemRestore);
@@ -0,0 +1 @@
1
+ export { DileCrudItemDelete } from "./src/DileCrudItemDelete.js";
@@ -0,0 +1,49 @@
1
+ import { css } from "lit";
2
+ import { DileCrudItemDelete } from "../../item-delete/src/DileCrudItemDelete.js";
3
+
4
+ const OPERATION_ITEM_MISSING_ERROR = 'Please provide the element id to restore';
5
+
6
+ export class DileCrudItemRestore extends DileCrudItemDelete {
7
+ static styles = [
8
+ super.styles,
9
+ css`
10
+ :host {
11
+ --dile-confirm-accept-button-color: var(--neutral-icon-color, #337aad);
12
+ }
13
+ `
14
+ ];
15
+
16
+ static get properties() {
17
+ return {
18
+ urlSufix: { type: String }
19
+ };
20
+ }
21
+
22
+ constructor() {
23
+ super();
24
+ this.successEventName = 'restore-success';
25
+ this.errorEventName = 'restore-error';
26
+ this.method = 'post';
27
+ this.urlSufix = 'restore';
28
+ }
29
+
30
+ computeUrl(endpoint, relatedId) {
31
+ return `${endpoint}/${relatedId}/${this.urlSufix}`
32
+ }
33
+
34
+ restore(itemId) {
35
+ this.delete(itemId);
36
+ }
37
+
38
+ cancelLabelComputed(label, translations) {
39
+ return label ? label : translations?.cancel_label ? translations.cancel_label : 'Cancel';
40
+ }
41
+
42
+ acceptLabelComputed(label, translations) {
43
+ return label ? label : translations?.accept_label ? translations.accept_label : 'Accept';
44
+ }
45
+
46
+ confirmMessageComputed(message, translations) {
47
+ return message ? message : translations?.restore_confirm_message ? translations.restore_confirm_message : 'Are you sure?';
48
+ }
49
+ }
@@ -201,8 +201,9 @@ export class DileCrudList extends DileI18nMixin(DileLoading(LitElement)) {
201
201
  <dile-crud-list-item
202
202
  itemId="${this.computeItemId(element)}"
203
203
  .actionIds="${this.actionIds}"
204
- ?disableEdit="${this.config?.customization?.disableEdit}"
205
- ?disableDelete="${this.config?.customization?.disableDelete}"
204
+ ?disableEdit=${this.config?.customization?.disableEdit}
205
+ ?disableDelete=${this.config?.customization?.disableDelete}
206
+ ?disableRestore=${this.config?.customization?.disableRestore}
206
207
  ?hideCheckboxSelection="${this.config?.customization?.hideCheckboxSelection}"
207
208
  @item-checkbox-changed=${this.onItemsCheckboxChanged}
208
209
  ?isDeleted=${element.deleted_at}
@@ -1,7 +1,7 @@
1
1
  import { LitElement, html, css } from 'lit';
2
2
  import '@dile/ui/components/checkbox/checkbox';
3
3
  import '@dile/ui/components/icon/icon';
4
- import { deleteIcon, editIcon } from '@dile/icons';
4
+ import { deleteIcon, editIcon, restoreFromTrashIcon } from '@dile/icons';
5
5
 
6
6
  export class DileCrudListItem extends LitElement {
7
7
  static styles = [
@@ -66,6 +66,7 @@ export class DileCrudListItem extends LitElement {
66
66
  this.actionIds = [];
67
67
  this.disableEdit = false;
68
68
  this.disableDelete = false;
69
+ this.disableRestore = false;
69
70
  this.hideCheckboxSelection = false;
70
71
 
71
72
  }
@@ -81,7 +82,7 @@ export class DileCrudListItem extends LitElement {
81
82
  </main>
82
83
  <div class="actions">
83
84
  ${this.isDeleted
84
- ? ''
85
+ ? this.restoreActionsTemplate
85
86
  : this.regularActionsTemplate
86
87
  }
87
88
  </div>
@@ -102,9 +103,17 @@ export class DileCrudListItem extends LitElement {
102
103
  `
103
104
  }
104
105
 
106
+ get restoreActionsTemplate() {
107
+ return html`
108
+ ${this.disableRestore
109
+ ? ''
110
+ : html`<dile-icon .icon="${restoreFromTrashIcon}" @click=${this.restoreClick}></dile-icon>`
111
+ }
112
+ `
113
+ }
114
+
105
115
  includes(actionIds, itemId) {
106
116
  const stringIds = actionIds.map(String);
107
- // console.log(stringIds, String(itemId));
108
117
  return stringIds.includes(String(itemId));
109
118
  }
110
119
 
@@ -138,4 +147,14 @@ export class DileCrudListItem extends LitElement {
138
147
  }
139
148
  }));
140
149
  }
150
+
151
+ restoreClick() {
152
+ this.dispatchEvent(new CustomEvent('crud-item-restore', {
153
+ bubbles: true,
154
+ composed: true,
155
+ detail: {
156
+ itemId: this.itemId
157
+ }
158
+ }));
159
+ }
141
160
  }
@@ -24,6 +24,7 @@ export const defaultConfig = {
24
24
  disableInsert: false,
25
25
  disableEdit: false,
26
26
  disableDelete: false,
27
+ disableRestore: false,
27
28
  disablePagination: true,
28
29
  disableSort: true,
29
30
  disableFilter: true,
package/lib/i18n/en.js CHANGED
@@ -32,6 +32,7 @@ export const translations = {
32
32
  run_action_label: "Run action",
33
33
  loading: "Loading...",
34
34
  delete_confirm_message: "Are you sure you want to delete this item?",
35
+ restore_confirm_message: "Are you sure you want to restore this item?",
35
36
  delete_confirm_message_plural: "Are you sure you want to delete those items?",
36
37
  items_total: "items in total",
37
38
  showing_page_size: (pageSize) => `Showing ${pageSize} items per page.`,
package/lib/i18n/es.js CHANGED
@@ -32,6 +32,7 @@ export const translations = {
32
32
  run_action_label: "Realizar acción",
33
33
  loading: "Cargando...",
34
34
  delete_confirm_message: "¿Estás seguro que quieres borrar este ítem?",
35
+ restore_confirm_message: "¿Estás seguro que quieres restaurar este ítem?",
35
36
  delete_confirm_message_plural: "¿Seguro que quieres borrar estos elementos?",
36
37
  items_total: "Elementos en total",
37
38
  showing_page_size: (pageSize) => `Mostrando ${pageSize} elementos por página.`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dile/crud",
3
- "version": "0.7.3",
3
+ "version": "0.7.4",
4
4
  "description": "Components to create a generic crud system based on Web Components and Lit",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -24,12 +24,12 @@
24
24
  },
25
25
  "homepage": "https://dile-components.com/",
26
26
  "dependencies": {
27
- "@dile/ui": "^2.8.0",
27
+ "@dile/ui": "^2.8.1",
28
28
  "axios": "^1.8.4",
29
29
  "lit": "^2.7.0 || ^3.0.0"
30
30
  },
31
31
  "publishConfig": {
32
32
  "access": "public"
33
33
  },
34
- "gitHead": "7abd2a48c8093bb54b939b0b2ca1762ed0d55693"
34
+ "gitHead": "eae8a7897e7baf3b5b3a9f4ab8a9f94e85e94ec5"
35
35
  }