Fix date/time filter loading and overwriting [SCI-6582] (#3898)

* Fix filter overwrite [SCI-6582]

* Fix date/time filter loading [SCI-6582]

* Fix time/time range filter loading [SCI-6582]

* Code style fixes [SCI-6582]
This commit is contained in:
artoscinote 2022-02-25 15:27:31 +01:00 committed by GitHub
parent c0e4b6f1f6
commit 3df030b29e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 82 additions and 26 deletions

View file

@ -49,8 +49,9 @@ class RepositoryTableFiltersController < ApplicationController
repository_table_filter_elements_params[:custom_columns].each do |custom_column_params|
@repository_table_filter.repository_table_filter_elements
.find_or_initialize_by(repository_column_id: custom_column_params['repository_column_id'])
.assign_attributes(custom_column_params)
.find_or_initialize_by(
repository_column_id: custom_column_params['repository_column_id']
).update!(custom_column_params)
end
@repository_table_filter.save!

View file

@ -9,11 +9,11 @@
@dropdown:changed="updateOperator" />
</div>
<div class="filter-datepicker-input">
<DateTimePicker @change="updateDate" :selectorId="`DatePicker${filter.id}`" :onlyDate="true" :defaultValue="currentDate()" />
<DateTimePicker @change="updateDate" :selectorId="`DatePicker${filter.id}`" :onlyDate="true" :defaultValue="date || fallbackDate()" />
</div>
<span class="between-delimiter"></span>
<div class="filter-datepicker-to-input">
<DateTimePicker @change="updateDateTo" :selectorId="`DatePickerTo${filter.id}`" :onlyDate="true" :defaultValue="currentDate(7 * 24 * 60 * 60)" />
<DateTimePicker @change="updateDateTo" :selectorId="`DatePickerTo${filter.id}`" :onlyDate="true" :defaultValue="dateTo || fallbackDate(7 * 24 * 60 * 60)" />
</div>
</div>
</template>

View file

@ -10,11 +10,11 @@
</div>
<div class="datetime-filter-attributes">
<div class="filter-datepicker-input">
<DateTimePicker @change="updateDate" :selectorId="`DatePicker${filter.id}`" :defaultValue="currentDate()" />
<DateTimePicker @change="updateDate" :selectorId="`DatePicker${filter.id}`" :defaultValue="date || fallbackDate()" />
</div>
<div class="between-delimiter vertical"></div>
<div class="filter-datepicker-to-input">
<DateTimePicker @change="updateDateTo" :selectorId="`DatePickerTo${filter.id}`" :defaultValue="currentDate(7 * 24 * 60 * 60)" />
<DateTimePicker @change="updateDateTo" :selectorId="`DatePickerTo${filter.id}`" :defaultValue="dateTo || fallbackDate(7 * 24 * 60 * 60)" />
</div>
</div>
</div>
@ -58,7 +58,7 @@
methods: {
formattedDate(date) {
if (!date) return null
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}`
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`
}
}
}

View file

@ -11,11 +11,11 @@
<template v-if="!isPreset">
<div class="datetime-filter-attributes">
<div class="filter-datepicker-input">
<DateTimePicker @change="updateDate" :selectorId="`DatePicker${filter.id}`" :defaultValue="currentDate()" />
<DateTimePicker @change="updateDate" :selectorId="`DatePicker${filter.id}`" :defaultValue="date || fallbackDate()" />
</div>
<div class="between-delimiter vertical" v-if="operator == 'between'"></div>
<div class="filter-datepicker-to-input">
<DateTimePicker @change="updateDateTo" v-if="operator == 'between'" :selectorId="`DatePickerTo${filter.id}`" :defaultValue="currentDate(7 * 24 * 60 * 60)" />
<DateTimePicker @change="updateDateTo" v-if="operator == 'between'" :selectorId="`DatePickerTo${filter.id}`" :defaultValue="dateTo || fallbackDate(7 * 24 * 60 * 60)" />
</div>
</div>
</template>
@ -79,7 +79,7 @@
methods: {
formattedDate(date) {
if (!date) return null
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}`
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`
}
}
}

View file

@ -10,11 +10,11 @@
</div>
<template v-if="!isPreset">
<div class="filter-datepicker-input">
<DateTimePicker @change="updateDate" :selectorId="`DatePicker${filter.id}`" :onlyDate="true" :defaultValue="currentDate()" />
<DateTimePicker @change="updateDate" :selectorId="`DatePicker${filter.id}`" :onlyDate="true" :defaultValue="date || fallbackDate()" />
</div>
<span class="between-delimiter" v-if="operator == 'between'"></span>
<div class="filter-datepicker-to-input" v-if="operator == 'between'">
<DateTimePicker @change="updateDateTo" :selectorId="`DatePickerTo${filter.id}`" :onlyDate="true" :defaultValue="currentDate(7 * 24 * 60 * 60)" />
<DateTimePicker @change="updateDateTo" :selectorId="`DatePickerTo${filter.id}`" :onlyDate="true" :defaultValue="dateTo || fallbackDate(7 * 24 * 60 * 60)" />
</div>
</template>
</div>

View file

@ -9,11 +9,11 @@
@dropdown:changed="updateOperator" />
</div>
<div class="filter-datepicker-input">
<DateTimePicker @change="updateDate" :selectorId="`TimePicker${filter.id}`" :timeOnly="true" :defaultValue="currentDate()" />
<DateTimePicker @change="updateDate" :selectorId="`TimePicker${filter.id}`" :timeOnly="true" :defaultValue="date || fallbackDate()" />
</div>
<span class="between-delimiter"></span>
<div class="filter-datepicker-to-input">
<DateTimePicker @change="updateDateTo" :selectorId="`TimePickerTo${filter.id}`" :timeOnly="true" :defaultValue="currentDate(7 * 24 * 60 * 60)" />
<DateTimePicker @change="updateDateTo" :selectorId="`TimePickerTo${filter.id}`" :timeOnly="true" :defaultValue="dateTo || fallbackDate(7 * 24 * 60 * 60)" />
</div>
</div>
</template>
@ -58,7 +58,7 @@
methods: {
formattedDate(date) {
if (!date) return null
return `${date.getHours()}:${date.getMinutes()}`
return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`
}
}
}

View file

@ -10,11 +10,11 @@
</div>
<template v-if="!isPreset">
<div class="filter-datepicker-input">
<DateTimePicker @change="updateDate" :selectorId="`TimePicker${filter.id}`" :timeOnly="true" :defaultValue="currentDate()" />
<DateTimePicker @change="updateDate" :selectorId="`TimePicker${filter.id}`" :timeOnly="true" :defaultValue="date || fallbackDate()" />
</div>
<span class="between-delimiter" v-if="operator == 'between'"></span>
<div class="filter-datepicker-to-input" v-if="operator == 'between'">
<DateTimePicker @change="updateDateTo" :selectorId="`TimePickerTo${filter.id}`" :timeOnly="true" :defaultValue="currentDate(7 * 24 * 60 * 60)" />
<DateTimePicker @change="updateDateTo" :selectorId="`TimePickerTo${filter.id}`" :timeOnly="true" :defaultValue="dateTo || fallbackDate(7 * 24 * 60 * 60)" />
</div>
</template>
</div>
@ -59,8 +59,7 @@
},
methods: {
formattedDate(date) {
if (!date) return null
return `${date.getHours()}:${date.getMinutes()}`
return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`
}
}
}

View file

@ -34,6 +34,13 @@ export default {
].indexOf(this.operator) !== -1;
}
},
created() {
if (this.timeType === 'time') {
this.initTimeFromParameters();
} else {
this.initDateTimeFromParameters();
}
},
methods: {
rangeObject(start, end) {
const range = {};
@ -43,13 +50,37 @@ export default {
return range;
},
currentDate(customOffset = 0) {
fallbackDate(customOffset = 0) {
const d = new Date();
const utc = d.getTime() + (d.getTimezoneOffset() * 60000);
const offset = $('#filterContainer').data('user-utc-offset');
const tz = new Date(utc + (1000 * offset) + (1000 * customOffset));
return tz;
},
dateTimeFromTimeString(timeString) {
let dateTime = new Date();
dateTime.setHours(timeString.split(':')[0]);
dateTime.setMinutes(timeString.split(':')[1]);
return dateTime;
},
initDateTimeFromParameters() {
if (this.parameters && this.parameters[`${this.timeType}`]) {
this.date = new Date(this.parameters[`${this.timeType}`]);
} else if (this.parameters && this.parameters[`start_${this.timeType}`]) {
this.date = new Date(this.parameters[`start_${this.timeType}`]);
this.dateTo = new Date(this.parameters[`end_${this.timeType}`]);
}
},
initTimeFromParameters() {
if (this.parameters && this.parameters.time) {
this.date = this.dateTimeFromTimeString(this.parameters.time);
} else if (this.parameters && this.parameters.start_time) {
this.date = this.dateTimeFromTimeString(this.parameters.start_time);
this.dateTo = this.dateTimeFromTimeString(this.parameters.end_time);
}
},
updateDate(date) {
this.date = date;
this.updateValue();
@ -58,7 +89,6 @@ export default {
this.dateTo = date;
this.updateValue();
},
updateValue() {
if (this.dateTo) {
this.value = this.rangeObject(this.date, this.dateTo);

View file

@ -12,6 +12,13 @@ export default {
return !this.value || !this.value[`start_${this.timeType}`] || !this.value[`end_${this.timeType}`];
}
},
created() {
if (this.timeType === 'time') {
this.initTimeFromParameters();
} else {
this.initDateTimeFromParameters();
}
},
methods: {
rangeObject(start, end) {
const range = {};
@ -21,13 +28,33 @@ export default {
return range;
},
currentDate(customOffset = 0) {
fallbackDate(customOffset = 0) {
const d = new Date();
const utc = d.getTime() + (d.getTimezoneOffset() * 60000);
const offset = $('#filterContainer').data('user-utc-offset');
const tz = new Date(utc + (1000 * offset) + (1000 * customOffset));
return tz;
},
dateTimeFromTimeString(timeString) {
let dateTime = new Date();
dateTime.setHours(timeString.split(':')[0]);
dateTime.setMinutes(timeString.split(':')[1]);
return dateTime;
},
initDateTimeFromParameters() {
if (this.parameters && this.parameters[`start_${this.timeType}`]) {
this.date = new Date(this.parameters[`start_${this.timeType}`]);
this.dateTo = new Date(this.parameters[`end_${this.timeType}`]);
}
},
initTimeFromParameters() {
if (this.parameters && this.parameters.start_time) {
this.date = this.dateTimeFromTimeString(this.parameters.start_time);
this.dateTo = this.dateTimeFromTimeString(this.parameters.end_time);
}
},
updateDate(date) {
this.date = date;
this.updateValue();
@ -36,7 +63,6 @@ export default {
this.dateTo = date;
this.updateValue();
},
updateValue() {
this.value = this.rangeObject(this.date, this.dateTo);
}

View file

@ -34,7 +34,7 @@
this.updateDateTime();
},
getTime(dateTime) {
return `${dateTime.getHours()}:${dateTime.getMinutes()}`
return `${dateTime.getHours().toString().padStart(2, '0')}:${dateTime.getMinutes().toString().padStart(2, '0')}`
},
updateTime(value) {
this.time = value;

View file

@ -43,7 +43,7 @@
this.update();
});
this.value = this.defaultValue
this.value = this.defaultValue;
this.update();
},
methods: {