mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 14:45:56 +08:00
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:
parent
c0e4b6f1f6
commit
3df030b29e
|
@ -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!
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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')}`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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')}`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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')}`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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')}`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
@ -68,4 +68,4 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
this.update();
|
||||
});
|
||||
|
||||
this.value = this.defaultValue
|
||||
this.value = this.defaultValue;
|
||||
this.update();
|
||||
},
|
||||
methods: {
|
||||
|
|
Loading…
Reference in a new issue