@iamproperty/components 5.5.0 → 5.5.1-beta-2
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.css +1 -1
- package/assets/css/components/actionbar.css.map +1 -1
- package/assets/css/components/applied-filters.css +1 -1
- package/assets/css/components/applied-filters.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/card.global.css +1 -1
- package/assets/css/components/card.global.css.map +1 -1
- package/assets/css/components/charts.css +1 -1
- package/assets/css/components/charts.css.map +1 -1
- package/assets/css/components/fileupload.css.map +1 -1
- package/assets/css/components/header.css +1 -1
- package/assets/css/components/header.css.map +1 -1
- package/assets/css/components/nav.css.map +1 -1
- package/assets/css/components/slider.css.map +1 -1
- package/assets/css/components/tabs.css +1 -1
- package/assets/css/components/tabs.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 +12 -3
- package/assets/js/components/actionbar/actionbar.component.min.js +6 -6
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.js +7 -0
- package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
- package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js +6 -6
- package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
- package/assets/js/components/card/card.component.min.js +3 -3
- package/assets/js/components/chart/chart.component.js +71 -0
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
- package/assets/js/components/fileupload/fileupload.component.js +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js +5 -5
- package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
- package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
- package/assets/js/components/header/header.component.min.js +2 -2
- 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/search/search.component.min.js +1 -1
- package/assets/js/components/search/search.component.min.js.map +1 -1
- package/assets/js/components/table/table.component.js +2 -2
- package/assets/js/components/table/table.component.min.js +6 -6
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +2 -2
- package/assets/js/dynamic.min.js +1 -1
- package/assets/js/dynamic.min.js.map +1 -1
- package/assets/js/modules/applied-filters.js +39 -7
- package/assets/js/modules/chart.js +613 -111
- package/assets/js/modules/fileupload.js +11 -0
- package/assets/js/modules/helpers.js +16 -0
- package/assets/js/modules/table.js +62 -11
- package/assets/js/scripts.bundle.js +31 -31
- 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/_elements.scss +1 -1
- package/assets/sass/_functions/variables.scss +80 -0
- package/assets/sass/_utilities.scss +1 -0
- package/assets/sass/components/actionbar.scss +16 -0
- package/assets/sass/components/applied-filters.scss +6 -48
- package/assets/sass/components/card.global.scss +4 -0
- package/assets/sass/components/card.scss +1 -1
- package/assets/sass/components/charts.scss +981 -234
- package/assets/sass/components/header.scss +8 -1
- package/assets/sass/components/tabs.scss +10 -1
- package/assets/sass/elements/badge-tag.scss +82 -0
- package/assets/sass/elements/buttons.scss +13 -1
- package/assets/sass/elements/details.scss +94 -5
- package/assets/sass/elements/dialog.scss +2 -0
- package/assets/sass/elements/forms.scss +26 -22
- package/assets/sass/elements/tooltips.scss +4 -3
- package/assets/sass/foundations/root.scss +11 -0
- package/assets/sass/helpers/wider-colours.scss +11 -0
- package/assets/ts/components/actionbar/actionbar.component.ts +14 -3
- package/assets/ts/components/address-lookup/address-lookup.component.ts +9 -0
- package/assets/ts/components/chart/README.md +37 -0
- package/assets/ts/components/chart/chart.component.ts +98 -0
- package/assets/ts/components/fileupload/fileupload.component.ts +1 -1
- package/assets/ts/components/table/table.component.ts +2 -2
- package/assets/ts/modules/applied-filters.ts +61 -7
- package/assets/ts/modules/chart.ts +808 -119
- package/assets/ts/modules/fileupload.ts +19 -0
- package/assets/ts/modules/helpers.ts +23 -1
- package/assets/ts/modules/table.ts +86 -12
- package/dist/components.es.js +397 -381
- package/dist/components.umd.js +60 -78
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/components/AppliedFilters/AppliedFilters.vue +1 -1
- package/src/components/Chart/Chart.vue +26 -96
- package/src/components/Header/Header.vue +1 -1
- package/src/components/Table/Table.vue +2 -2
- package/assets/sass/elements/badge.scss +0 -29
|
@@ -26,6 +26,10 @@ function fileupload(fileupload, wrapper) {
|
|
|
26
26
|
dt.items.add(file); // here you exclude the file. thus removing it.
|
|
27
27
|
}
|
|
28
28
|
input.files = dt.files; // Assign the updates list
|
|
29
|
+
if (input.files.length == 0) {
|
|
30
|
+
const emptyEvent = new Event('empty');
|
|
31
|
+
fileupload.dispatchEvent(emptyEvent);
|
|
32
|
+
}
|
|
29
33
|
const changeEvent = new Event('change');
|
|
30
34
|
input.dispatchEvent(changeEvent);
|
|
31
35
|
}
|
|
@@ -50,6 +54,8 @@ function fileupload(fileupload, wrapper) {
|
|
|
50
54
|
}
|
|
51
55
|
const changeEvent = new Event('change');
|
|
52
56
|
input.dispatchEvent(changeEvent);
|
|
57
|
+
const elementChangeEvent = new Event('elementChange');
|
|
58
|
+
fileupload.dispatchEvent(elementChangeEvent);
|
|
53
59
|
});
|
|
54
60
|
cloneInput.addEventListener('dragenter', (event) => {
|
|
55
61
|
cloneInput.classList.add('focus');
|
|
@@ -66,5 +72,10 @@ function fileupload(fileupload, wrapper) {
|
|
|
66
72
|
for (const file of input.files)
|
|
67
73
|
filesWrapper.innerHTML += `<span class="file">${file.name} <button data-file="${file.name}">Remove</button></span>`;
|
|
68
74
|
});
|
|
75
|
+
if (fileupload.hasAttribute('data-filename')) {
|
|
76
|
+
let filename = fileupload.getAttribute('data-filename');
|
|
77
|
+
if (filename)
|
|
78
|
+
filesWrapper.innerHTML += `<span class="file">${filename} <button data-file="${filename}">Remove</button></span>`;
|
|
79
|
+
}
|
|
69
80
|
}
|
|
70
81
|
export default fileupload;
|
|
@@ -87,6 +87,22 @@ export const safeID = function (str) {
|
|
|
87
87
|
str = str.replace(/\W/g, '');
|
|
88
88
|
return str;
|
|
89
89
|
};
|
|
90
|
+
export const numberOfDays = function (startDateString, endDateString) {
|
|
91
|
+
let convertStart = startDateString.split('/');
|
|
92
|
+
let convertEnd = endDateString.split('/');
|
|
93
|
+
let dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);
|
|
94
|
+
let dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);
|
|
95
|
+
if (dateStart == "Invalid Date")
|
|
96
|
+
throw "Start date is not a valid date";
|
|
97
|
+
if (dateEnd == "Invalid Date")
|
|
98
|
+
throw "End date is not a valid date";
|
|
99
|
+
// To calculate the time difference of two dates
|
|
100
|
+
let diffTime = dateEnd.getTime() - dateStart.getTime();
|
|
101
|
+
let numberOfDays = (diffTime / (1000 * 3600 * 24) + 1);
|
|
102
|
+
if (numberOfDays < 0)
|
|
103
|
+
throw "The start date should be before the end date";
|
|
104
|
+
return numberOfDays;
|
|
105
|
+
};
|
|
90
106
|
// Used to get values from nested json objects
|
|
91
107
|
export const resolvePath = (object, path, defaultValue) => path.split(/[\.\[\]\'\"]/).filter(p => p).reduce((o, p) => o ? o[p] : defaultValue, object);
|
|
92
108
|
export const isTraversable = o => Array.isArray(o) || o !== null && ['function', 'object'].includes(typeof o);
|
|
@@ -83,7 +83,7 @@ export const addTableEventListeners = (table) => {
|
|
|
83
83
|
};
|
|
84
84
|
// Filters
|
|
85
85
|
export const createSearchDataList = (table, form) => {
|
|
86
|
-
let searchInput = form.querySelector('[data-search]');
|
|
86
|
+
let searchInput = form.querySelector('input[data-search]');
|
|
87
87
|
if (!searchInput)
|
|
88
88
|
return false;
|
|
89
89
|
const searchID = searchInput.getAttribute('id');
|
|
@@ -108,8 +108,13 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
|
|
|
108
108
|
var timer;
|
|
109
109
|
// Check what conditions are set on the table to see what the form actions are
|
|
110
110
|
let formSubmit = function (event, paginate = false) {
|
|
111
|
+
console.log('submit');
|
|
111
112
|
if (form.classList.contains('processing'))
|
|
112
113
|
return false;
|
|
114
|
+
Array.from(form.querySelectorAll('iam-applied-filters')).forEach((element, index) => {
|
|
115
|
+
var event = new Event('tags-set');
|
|
116
|
+
element.dispatchEvent(event);
|
|
117
|
+
});
|
|
113
118
|
// Before submitting check if any duplicate checkboxes within the filters dialog needs to upset the original input
|
|
114
119
|
if (event.type == "submit") {
|
|
115
120
|
form.classList.add('processing');
|
|
@@ -153,9 +158,21 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
|
|
|
153
158
|
http.send();
|
|
154
159
|
}
|
|
155
160
|
};
|
|
161
|
+
if (form.querySelector('iam-actionbar[data-search]')) {
|
|
162
|
+
form.querySelector('iam-actionbar[data-search]').addEventListener('search-submit', (event) => {
|
|
163
|
+
if (form.querySelector('input[data-search]')) {
|
|
164
|
+
form.querySelector('input[data-search]').value = event.detail.search;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
form.insertAdjacentHTML('beforeend', `<input type="hidden" name="search" data-search="${form.querySelector('iam-actionbar[data-search]').getAttribute('data-search')}" value="${event.detail.search}"/>`);
|
|
168
|
+
}
|
|
169
|
+
clearTimeout(timer);
|
|
170
|
+
formSubmit(event);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
156
173
|
form.addEventListener('keyup', (event) => {
|
|
157
174
|
clearTimeout(timer);
|
|
158
|
-
if (event && event.target instanceof HTMLElement && event.target.closest('[data-search]')) {
|
|
175
|
+
if (event && event.target instanceof HTMLElement && event.target.closest('input[data-search]')) {
|
|
159
176
|
timer = setTimeout(function () {
|
|
160
177
|
formSubmit(event);
|
|
161
178
|
}, 500);
|
|
@@ -169,7 +186,7 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
|
|
|
169
186
|
sortTable(table, form, savedTableBody);
|
|
170
187
|
formSubmit(event);
|
|
171
188
|
}
|
|
172
|
-
if (event && event.target instanceof HTMLElement && event.target.closest('[data-search]')) {
|
|
189
|
+
if (event && event.target instanceof HTMLElement && event.target.closest('input[data-search]')) {
|
|
173
190
|
formSubmit(event);
|
|
174
191
|
}
|
|
175
192
|
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
|
|
@@ -313,8 +330,11 @@ export const sortTable = (table, form, savedTableBody) => {
|
|
|
313
330
|
return false;
|
|
314
331
|
}
|
|
315
332
|
let tbody = table.querySelector('tbody');
|
|
316
|
-
let
|
|
317
|
-
|
|
333
|
+
let selectedOption = form.querySelector(`input[type="radio"][data-sort]:checked`);
|
|
334
|
+
if (form.querySelector('select[data-sort]')) {
|
|
335
|
+
let select = form.querySelector('select[data-sort]');
|
|
336
|
+
selectedOption = form.querySelector(`select[data-sort] option:nth-child(${select.selectedIndex + 1})`);
|
|
337
|
+
}
|
|
318
338
|
let sortBy = selectedOption.getAttribute('data-sort');
|
|
319
339
|
let order = selectedOption.getAttribute('data-order');
|
|
320
340
|
let format = selectedOption.getAttribute('data-format');
|
|
@@ -375,9 +395,9 @@ export const filterTable = (table, form, wrapper) => {
|
|
|
375
395
|
row.removeAttribute('data-filtered-by');
|
|
376
396
|
});
|
|
377
397
|
// Add search columns too
|
|
378
|
-
if (form.querySelector('[data-search]')) {
|
|
379
|
-
let searchInput = form.querySelector('[data-search]');
|
|
380
|
-
let searchColumns = form.querySelector('[data-search]').getAttribute('data-search').split(',');
|
|
398
|
+
if (form.querySelector('input[data-search]')) {
|
|
399
|
+
let searchInput = form.querySelector('input[data-search]');
|
|
400
|
+
let searchColumns = form.querySelector('input[data-search]').getAttribute('data-search').split(',');
|
|
381
401
|
searchColumns.forEach((column, index) => {
|
|
382
402
|
searches.push({ 'column': `${column.trim()}`, 'value': `${searchInput.value}` });
|
|
383
403
|
});
|
|
@@ -407,6 +427,32 @@ export const filterTable = (table, form, wrapper) => {
|
|
|
407
427
|
let isMatched = false;
|
|
408
428
|
filterValue.forEach((filter, index) => {
|
|
409
429
|
let filterTd = row.querySelector(`[data-label="${key}"]`);
|
|
430
|
+
if (filter.includes('-date-from')) {
|
|
431
|
+
let fromDate = new Date(filter.replace('-date-from', ''));
|
|
432
|
+
let checkDate = new Date(filterTd.textContent.toLowerCase());
|
|
433
|
+
fromDate.setHours(0, 0, 0, 0);
|
|
434
|
+
checkDate.setHours(0, 0, 0, 0);
|
|
435
|
+
if (checkDate < fromDate) {
|
|
436
|
+
row.classList.add('less-than-from-date');
|
|
437
|
+
isMatched = false;
|
|
438
|
+
}
|
|
439
|
+
else if (!row.classList.contains('less-than-from-date') && !row.classList.contains('greater-than-to-date')) {
|
|
440
|
+
isMatched = true;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
else if (filter.includes('-date-to')) {
|
|
444
|
+
let toDate = new Date(filter.replace('-date-to', ''));
|
|
445
|
+
let checkDate = new Date(filterTd.textContent.toLowerCase());
|
|
446
|
+
toDate.setHours(0, 0, 0, 0);
|
|
447
|
+
checkDate.setHours(0, 0, 0, 0);
|
|
448
|
+
if (checkDate > toDate) {
|
|
449
|
+
row.classList.add('greater-than-to-date');
|
|
450
|
+
isMatched = false;
|
|
451
|
+
}
|
|
452
|
+
else if (!row.classList.contains('less-than-from-date') && !row.classList.contains('greater-than-to-date')) {
|
|
453
|
+
isMatched = true;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
410
456
|
// Dynamic values
|
|
411
457
|
if (filter && filter == "$today")
|
|
412
458
|
filter = formatCell('date', new Date());
|
|
@@ -455,7 +501,7 @@ export const filterTable = (table, form, wrapper) => {
|
|
|
455
501
|
checkDate.setHours(0, 0, 0, 0);
|
|
456
502
|
isMatched = (checkDate >= firstDayLastMonth && checkDate <= lastDayLastMonth);
|
|
457
503
|
}
|
|
458
|
-
if (filterTd && filterTd.textContent.toLowerCase().includes(filter.toLowerCase())) {
|
|
504
|
+
if (filterTd && filterTd.textContent.toLowerCase().includes(filter.replace('-', ' ').toLowerCase())) {
|
|
459
505
|
isMatched = true;
|
|
460
506
|
}
|
|
461
507
|
});
|
|
@@ -642,9 +688,14 @@ const filterFilters = function (form) {
|
|
|
642
688
|
}
|
|
643
689
|
if (filterInput && filterInput.value) {
|
|
644
690
|
let dataFilter = filterInput.getAttribute('data-filter');
|
|
691
|
+
let filterValue = filterInput.value;
|
|
692
|
+
if (filterInput.hasAttribute('data-date-from'))
|
|
693
|
+
filterValue += '-date-from';
|
|
694
|
+
if (filterInput.hasAttribute('data-date-to'))
|
|
695
|
+
filterValue += '-date-to';
|
|
645
696
|
if (!filters[dataFilter])
|
|
646
697
|
filters[dataFilter] = new Array();
|
|
647
|
-
filters[dataFilter].push(
|
|
698
|
+
filters[dataFilter].push(filterValue);
|
|
648
699
|
}
|
|
649
700
|
});
|
|
650
701
|
return filters;
|
|
@@ -792,7 +843,7 @@ export const formatCell = (format, cellOutput) => {
|
|
|
792
843
|
case 'datetime':
|
|
793
844
|
return new Date(cellOutput).toLocaleDateString('en-gb', { weekday: 'short', year: "2-digit", month: "long", day: "numeric", }) + " " + new Date(cellOutput).toLocaleTimeString("en-gb", { hour: "2-digit", minute: "2-digit" });
|
|
794
845
|
case 'date':
|
|
795
|
-
return new Date(cellOutput).toLocaleDateString('en-gb', {
|
|
846
|
+
return new Date(cellOutput).toLocaleDateString('en-gb', { day: "numeric", month: "long", year: "2-digit" });
|
|
796
847
|
case 'capitalise':
|
|
797
848
|
return cellOutput = ucfirst(cellOutput);
|
|
798
849
|
}
|