@iamproperty/components 4.0.0 → 4.0.1
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.
- package/assets/css/components/actionbar-global.css +1 -1
- package/assets/css/components/actionbar-global.css.map +1 -1
- package/assets/css/components/actionbar.css +1 -1
- package/assets/css/components/actionbar.css.map +1 -1
- package/assets/css/components/admin-panel.css +1 -1
- package/assets/css/components/admin-panel.css.map +1 -1
- package/assets/css/components/card-global.css +1 -1
- package/assets/css/components/card-global.css.map +1 -1
- package/assets/css/components/card.css +1 -1
- package/assets/css/components/card.css.map +1 -1
- package/assets/css/components/charts.css.map +1 -1
- package/assets/css/components/collapsible-side.css.map +1 -1
- package/assets/css/components/dialog.css +1 -1
- package/assets/css/components/dialog.css.map +1 -1
- package/assets/css/components/fileupload.css.map +1 -1
- package/assets/css/components/forms.css +1 -1
- package/assets/css/components/forms.css.map +1 -1
- package/assets/css/components/header.css.map +1 -1
- package/assets/css/components/lists.css.map +1 -1
- package/assets/css/components/nav-global.css +1 -1
- package/assets/css/components/nav-global.css.map +1 -1
- package/assets/css/components/nav.css.map +1 -1
- package/assets/css/components/nav.old.css.map +1 -1
- package/assets/css/components/notification.css.map +1 -1
- package/assets/css/components/pagination.css.map +1 -1
- package/assets/css/components/property-searchbar.css.map +1 -1
- package/assets/css/components/table.css +1 -1
- package/assets/css/components/table.css.map +1 -1
- package/assets/css/core.min.css +1 -1
- package/assets/css/core.min.css.map +1 -1
- package/assets/css/style.min.css +1 -1
- package/assets/css/style.min.css.map +1 -1
- package/assets/js/components/accordion/accordion.component.min.js +1 -1
- package/assets/js/components/actionbar/actionbar.component.js +45 -0
- package/assets/js/components/actionbar/actionbar.component.min.js +4 -4
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js +3 -3
- package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
- package/assets/js/components/card/card.component.js +9 -1
- package/assets/js/components/card/card.component.min.js +7 -5
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
- package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
- package/assets/js/components/header/header.component.min.js +1 -1
- package/assets/js/components/nav/nav.component.min.js +1 -1
- package/assets/js/components/notification/notification.component.min.js +1 -1
- package/assets/js/components/pagination/pagination.component.min.js +1 -1
- package/assets/js/components/table/table.component.js +3 -0
- package/assets/js/components/table/table.component.min.js +10 -10
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +1 -1
- package/assets/js/dynamic.min.js +4 -4
- package/assets/js/dynamic.min.js.map +1 -1
- package/assets/js/modules/applied-filters.js +6 -7
- package/assets/js/modules/dialogs.js +32 -4
- package/assets/js/modules/table.js +68 -13
- package/assets/js/scripts.bundle.js +18 -16
- package/assets/js/scripts.bundle.js.map +1 -1
- package/assets/js/scripts.bundle.min.js +2 -2
- package/assets/js/scripts.bundle.min.js.map +1 -1
- package/assets/sass/_corefiles.scss +0 -1
- package/assets/sass/_func.scss +1 -0
- package/assets/sass/_functions/mixins.scss +22 -0
- package/assets/sass/components/actionbar-global.scss +69 -7
- package/assets/sass/components/actionbar.scss +20 -8
- package/assets/sass/components/admin-panel.scss +47 -2
- package/assets/sass/components/card-global.scss +53 -1
- package/assets/sass/components/card.scss +14 -12
- package/assets/sass/components/charts.scss +1 -1
- package/assets/sass/components/collapsible-side.scss +1 -1
- package/assets/sass/components/dialog.scss +62 -61
- package/assets/sass/components/fileupload.scss +1 -1
- package/assets/sass/components/forms.scss +112 -102
- package/assets/sass/components/nav-global.scss +15 -9
- package/assets/sass/components/nav.scss +9 -10
- package/assets/sass/components/notification.scss +1 -1
- package/assets/sass/components/table.scss +85 -4
- package/assets/sass/core.scss +1 -0
- package/assets/sass/error.scss +2 -1
- package/assets/sass/foundations/root.scss +3 -3
- package/assets/sass/main.scss +4 -3
- package/assets/ts/components/actionbar/actionbar.component.ts +67 -2
- package/assets/ts/components/card/card.component.ts +12 -2
- package/assets/ts/components/table/table.component.ts +4 -0
- package/assets/ts/modules/applied-filters.ts +8 -10
- package/assets/ts/modules/dialogs.ts +42 -5
- package/assets/ts/modules/table.ts +82 -13
- package/dist/components.es.js +914 -838
- package/dist/components.umd.js +47 -45
- package/package.json +1 -1
|
@@ -23,6 +23,18 @@ const extendDialogs = (body) => {
|
|
|
23
23
|
// Open the modal!
|
|
24
24
|
dialog.showModal();
|
|
25
25
|
dialog.focus();
|
|
26
|
+
let firstWidth = dialog.offsetWidth;
|
|
27
|
+
dialog.setAttribute('style', `max-width: ${firstWidth}px;`);
|
|
28
|
+
// When the modal is opened we want to make sure any duplicate checkboxes are matching the originals
|
|
29
|
+
Array.from(dialog.querySelectorAll('[data-duplicate]')).forEach((element, index) => {
|
|
30
|
+
const id = element.getAttribute('data-duplicate');
|
|
31
|
+
const originalInput = document.getElementById(id);
|
|
32
|
+
if (element.checked != originalInput.checked) {
|
|
33
|
+
element.checked = originalInput.checked;
|
|
34
|
+
let changeEvent = new Event('change');
|
|
35
|
+
element.dispatchEvent(changeEvent);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
26
38
|
window.dataLayer = window.dataLayer || [];
|
|
27
39
|
window.dataLayer.push({
|
|
28
40
|
"event": "openModal",
|
|
@@ -180,6 +192,7 @@ export const createDialog = (dialog) => {
|
|
|
180
192
|
export const createMultiFormDialog = (dialog) => {
|
|
181
193
|
let buttons = "";
|
|
182
194
|
let fieldsets = Array.from(dialog.querySelectorAll('fieldset[data-title]'));
|
|
195
|
+
let form = dialog.querySelector('form');
|
|
183
196
|
fieldsets.forEach((fieldset, index) => {
|
|
184
197
|
buttons += `<button data-title="${fieldset.getAttribute('data-title')}" type="button" class="${index == 0 ? "active" : ""}" tabindex="-1">${fieldset.getAttribute('data-title')}</button>`;
|
|
185
198
|
const btnWrapper = document.createElement("div");
|
|
@@ -189,8 +202,16 @@ export const createMultiFormDialog = (dialog) => {
|
|
|
189
202
|
btnWrapper.innerHTML += `<button data-title="${fieldsets[index - 1].getAttribute('data-title')}" class="btn btn-secondary mb-0" data-previous type="button">Previous</button>`;
|
|
190
203
|
if (index != fieldsets.length - 1)
|
|
191
204
|
btnWrapper.innerHTML += `<button data-title="${fieldsets[index + 1].getAttribute('data-title')}" class="btn btn-primary mb-0" data-next type="button">Next</button>`;
|
|
192
|
-
|
|
193
|
-
|
|
205
|
+
// Last fieldset
|
|
206
|
+
if (index == fieldsets.length - 1) {
|
|
207
|
+
if (form && form.querySelector(':scope > button[type="submit"]')) {
|
|
208
|
+
let existingButton = form.querySelector(':scope > button[type="submit"]');
|
|
209
|
+
existingButton.classList.add('mb-0');
|
|
210
|
+
btnWrapper.insertAdjacentElement('beforeend', existingButton);
|
|
211
|
+
}
|
|
212
|
+
else
|
|
213
|
+
btnWrapper.innerHTML += `<button data-title="${fieldsets[index].getAttribute('data-title')}" class="btn btn-primary mb-0" data-next type="submit">Submit</button>`;
|
|
214
|
+
}
|
|
194
215
|
});
|
|
195
216
|
dialog.insertAdjacentHTML('afterbegin', `<div class="steps bg-primary">${buttons}</div>`);
|
|
196
217
|
// Open the fieldset with an error inside
|
|
@@ -258,7 +279,7 @@ export const createMultiFormDialog = (dialog) => {
|
|
|
258
279
|
dialog.addEventListener('keydown', (event) => {
|
|
259
280
|
if (event && event.target instanceof HTMLElement && event.target.closest('button')) {
|
|
260
281
|
const button = event.target.closest('button');
|
|
261
|
-
if (event.keyCode == 13) {
|
|
282
|
+
if (event.keyCode == 13 && button.getAttribute('type') != "submit") {
|
|
262
283
|
event.preventDefault();
|
|
263
284
|
validateFieldset(button);
|
|
264
285
|
}
|
|
@@ -266,10 +287,17 @@ export const createMultiFormDialog = (dialog) => {
|
|
|
266
287
|
if (event && event.target instanceof HTMLElement && event.target.closest('input')) {
|
|
267
288
|
const input = event.target.closest('input');
|
|
268
289
|
input.classList.remove('is-invalid');
|
|
290
|
+
if (event.keyCode == 13) {
|
|
291
|
+
event.preventDefault();
|
|
292
|
+
}
|
|
269
293
|
}
|
|
270
294
|
});
|
|
271
295
|
dialog.addEventListener('click', (event) => {
|
|
272
|
-
if (event && event.target instanceof HTMLElement && event.target.closest('button[
|
|
296
|
+
if (event && event.target instanceof HTMLElement && event.target.closest('button[type="submit"]')) {
|
|
297
|
+
const form = event.target.closest('form');
|
|
298
|
+
form.classList.add('was-validated');
|
|
299
|
+
}
|
|
300
|
+
else if (event && event.target instanceof HTMLElement && event.target.closest('button[data-title]')) {
|
|
273
301
|
const button = event.target.closest('button[data-title]');
|
|
274
302
|
validateFieldset(button);
|
|
275
303
|
}
|
|
@@ -108,7 +108,28 @@ export const createSearchDataList = (table, form) => {
|
|
|
108
108
|
export const addFilterEventListeners = (table, form, pagination, wrapper, savedTableBody) => {
|
|
109
109
|
var timer;
|
|
110
110
|
// Check what conditions are set on the table to see what the form actions are
|
|
111
|
-
let formSubmit = function (paginate = false) {
|
|
111
|
+
let formSubmit = function (event, paginate = false) {
|
|
112
|
+
if (form.classList.contains('processing'))
|
|
113
|
+
return false;
|
|
114
|
+
// Before submitting check if any duplicate checkboxes within the filters dialog needs to upset the original input
|
|
115
|
+
if (event.type == "submit") {
|
|
116
|
+
form.classList.add('processing');
|
|
117
|
+
Array.from(form.querySelectorAll('[data-duplicate]')).forEach((element, index) => {
|
|
118
|
+
const id = element.getAttribute('data-duplicate');
|
|
119
|
+
const input = document.getElementById(id);
|
|
120
|
+
const card = document.querySelector(`[for="${id}"] iam-card`);
|
|
121
|
+
if (input.checked != element.checked) {
|
|
122
|
+
if (card) {
|
|
123
|
+
let clickEvent = new Event('click');
|
|
124
|
+
card.dispatchEvent(clickEvent);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
input.checked = element.checked;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
form.classList.remove('processing');
|
|
132
|
+
}
|
|
112
133
|
if (form.hasAttribute('data-ajax')) {
|
|
113
134
|
// Default back to page 1
|
|
114
135
|
if (!paginate) {
|
|
@@ -138,7 +159,7 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
|
|
|
138
159
|
clearTimeout(timer);
|
|
139
160
|
if (event && event.target instanceof HTMLElement && event.target.closest('[data-search]')) {
|
|
140
161
|
timer = setTimeout(function () {
|
|
141
|
-
formSubmit();
|
|
162
|
+
formSubmit(event);
|
|
142
163
|
}, 500);
|
|
143
164
|
}
|
|
144
165
|
;
|
|
@@ -148,10 +169,10 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
|
|
|
148
169
|
if (event && event.target instanceof HTMLElement && event.target.closest('[data-sort]')) {
|
|
149
170
|
if (!form.hasAttribute('data-submit'))
|
|
150
171
|
sortTable(table, form, savedTableBody);
|
|
151
|
-
formSubmit();
|
|
172
|
+
formSubmit(event);
|
|
152
173
|
}
|
|
153
174
|
if (event && event.target instanceof HTMLElement && event.target.closest('[data-search]')) {
|
|
154
|
-
formSubmit();
|
|
175
|
+
formSubmit(event);
|
|
155
176
|
}
|
|
156
177
|
if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter][data-no-ajax]')) { // Allow for input fields to filter the current results without a new ajax call
|
|
157
178
|
filterTable(table, form, wrapper);
|
|
@@ -159,16 +180,16 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
|
|
|
159
180
|
populateDataQueries(table, form);
|
|
160
181
|
}
|
|
161
182
|
else if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && event.target.closest('form .dialog__wrapper > dialog')) {
|
|
162
|
-
formSubmit();
|
|
183
|
+
formSubmit(event);
|
|
163
184
|
}
|
|
164
185
|
else if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && !event.target.closest('form dialog')) {
|
|
165
|
-
formSubmit();
|
|
186
|
+
formSubmit(event);
|
|
166
187
|
}
|
|
167
188
|
if (event && event.target instanceof HTMLElement && event.target.closest('[data-show]')) {
|
|
168
|
-
formSubmit();
|
|
189
|
+
formSubmit(event);
|
|
169
190
|
}
|
|
170
191
|
if (event && event.target instanceof HTMLElement && event.target.closest('[data-mimic]')) {
|
|
171
|
-
formSubmit();
|
|
192
|
+
formSubmit(event);
|
|
172
193
|
}
|
|
173
194
|
});
|
|
174
195
|
form.addEventListener('click', (event) => {
|
|
@@ -184,23 +205,57 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
|
|
|
184
205
|
event.stopPropagation();
|
|
185
206
|
}
|
|
186
207
|
if (event && event.target instanceof HTMLElement && event.target.closest('[data-clear]')) {
|
|
187
|
-
form.
|
|
208
|
+
form.classList.add('processing');
|
|
209
|
+
// Make sure any applied filters have been removed
|
|
210
|
+
Array.from(form.querySelectorAll('.applied-filters')).forEach((filters, index) => {
|
|
211
|
+
filters.innerHTML = "";
|
|
212
|
+
});
|
|
213
|
+
// Make sure cards are unlicked
|
|
214
|
+
let frm_elements = form.elements;
|
|
215
|
+
for (let i = 0; i < frm_elements.length; i++) {
|
|
216
|
+
let field_type = frm_elements[i].type.toLowerCase() ? frm_elements[i].type.toLowerCase() : "text";
|
|
217
|
+
switch (field_type) {
|
|
218
|
+
case "text":
|
|
219
|
+
case "password":
|
|
220
|
+
case "textarea":
|
|
221
|
+
frm_elements[i].value = "";
|
|
222
|
+
break;
|
|
223
|
+
case "radio":
|
|
224
|
+
case "checkbox":
|
|
225
|
+
if (frm_elements[i].checked) {
|
|
226
|
+
frm_elements[i].checked = false;
|
|
227
|
+
}
|
|
228
|
+
break;
|
|
229
|
+
case "select-one":
|
|
230
|
+
case "select-multi":
|
|
231
|
+
frm_elements[i].selectedIndex = -1;
|
|
232
|
+
break;
|
|
233
|
+
case "hidden":
|
|
234
|
+
default:
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
Array.from(form.querySelectorAll('label iam-card')).forEach((card, index) => {
|
|
239
|
+
let clickEvent = new Event('click');
|
|
240
|
+
card.dispatchEvent(clickEvent);
|
|
241
|
+
});
|
|
242
|
+
form.classList.remove('processing');
|
|
188
243
|
if (!form.hasAttribute('data-submit'))
|
|
189
244
|
sortTable(table, form, savedTableBody);
|
|
190
|
-
formSubmit();
|
|
245
|
+
formSubmit(event);
|
|
191
246
|
}
|
|
192
247
|
});
|
|
193
248
|
form.addEventListener('submit', (event) => {
|
|
194
249
|
clearTimeout(timer);
|
|
195
250
|
if (!form.hasAttribute('data-submit'))
|
|
196
251
|
event.preventDefault();
|
|
197
|
-
formSubmit();
|
|
252
|
+
formSubmit(event);
|
|
198
253
|
});
|
|
199
254
|
form.addEventListener('force', (event) => {
|
|
200
|
-
formSubmit();
|
|
255
|
+
formSubmit(event);
|
|
201
256
|
});
|
|
202
257
|
form.addEventListener('paginate', (event) => {
|
|
203
|
-
formSubmit(true);
|
|
258
|
+
formSubmit(event, true);
|
|
204
259
|
});
|
|
205
260
|
// Mmimic fields
|
|
206
261
|
let forms = [];
|