123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- var App = require('app');
- var stringUtils = require('utils/string_utils');
- App.JobsCustomDatesSelectView = Em.View.extend({
- name: 'jobsCustomDatesSelectView',
- templateName: require('templates/common/custom_date_popup'),
- middayPeriodOptions: [Em.I18n.t('jobs.table.custom.date.am'), Em.I18n.t('jobs.table.custom.date.pm')],
- hourOptions: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
- minuteOptions: ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55'],
- customDateFormFields: Ember.Object.create({
- startDate: null,
- hoursForStart: null,
- minutesForStart: null,
- middayPeriodForStart: null,
- duration: null,
- endDate: null,
- hoursForEnd: null,
- minutesForEnd: null,
- middayPeriodForEnd: null
- }),
- errors: Ember.Object.create({
- isStartDateError: false,
- isEndDateError: false
- }),
- errorMessages: Ember.Object.create({
- startDate: '',
- endDate: ''
- }),
- durationSelect: Em.Select.extend({
- classNames: ['input-medium'],
- content: [
- {
- value: 900000,
- label: Em.I18n.t('jobs.customDateFilter.duration.15min')
- },
- {
- value: 1800000,
- label: Em.I18n.t('jobs.customDateFilter.duration.30min')
- },
- {
- value: 3600000,
- label: Em.I18n.t('jobs.customDateFilter.duration.1hr')
- },
- {
- value: 7200000,
- label: Em.I18n.t('jobs.customDateFilter.duration.2hr')
- },
- {
- value: 14400000,
- label: Em.I18n.t('jobs.customDateFilter.duration.4hr')
- },
- {
- value: 43200000,
- label: Em.I18n.t('jobs.customDateFilter.duration.12hr')
- },
- {
- value: 86400000,
- label: Em.I18n.t('jobs.customDateFilter.duration.24hr')
- },
- {
- value: 604800000,
- label: Em.I18n.t('jobs.customDateFilter.duration.1w')
- },
- {
- value: 2592000000,
- label: Em.I18n.t('jobs.customDateFilter.duration.1m')
- },
- {
- value: 31536000000,
- label: Em.I18n.t('jobs.customDateFilter.duration.1yr')
- },
- {
- value: 0,
- label: Em.I18n.t('common.custom')
- }
- ],
- optionValuePath: 'content.value',
- optionLabelPath: 'content.label',
- selectionBinding: 'parentView.customDateFormFields.duration',
- willInsertElement: function () {
- var duration = this.get('selection'),
- initialOption = this.get('content').find(function (item) {
- return duration === item.value || duration === item.label;
- }, this);
- if (!initialOption) {
- initialOption = this.get('content').findProperty('value', 0);
- }
- this.set('selection', initialOption);
- }
- }),
- isCustomEndDate: Em.computed.equal('customDateFormFields.duration.value', 0),
- didInsertElement: function () {
- $('.datepicker').datepicker({
- format: 'mm/dd/yyyy'
- }).on('changeDate', function() {
- $(this).datepicker('hide');
- });
- },
- createCustomStartDate: function () {
- var startDate = this.get('customDateFormFields.startDate');
- var hoursForStart = this.get('customDateFormFields.hoursForStart');
- var minutesForStart = this.get('customDateFormFields.minutesForStart');
- var middayPeriodForStart = this.get('customDateFormFields.middayPeriodForStart');
- if (startDate && hoursForStart && minutesForStart && middayPeriodForStart) {
- return App.getTimeStampFromLocalTime(new Date(startDate + ' ' + hoursForStart + ':' + minutesForStart + ' ' + middayPeriodForStart));
- }
- return null;
- },
- createCustomEndDate: function (startDate) {
- var duration = this.get('customDateFormFields.duration.value'),
- date;
- if (duration === 0) {
- var endDate = this.get('customDateFormFields.endDate');
- var hoursForEnd = this.get('customDateFormFields.hoursForEnd');
- var minutesForEnd = this.get('customDateFormFields.minutesForEnd');
- var middayPeriodForEnd = this.get('customDateFormFields.middayPeriodForEnd');
- if (endDate && hoursForEnd && minutesForEnd && middayPeriodForEnd) {
- date = App.getTimeStampFromLocalTime(new Date(endDate + ' ' + hoursForEnd + ':' + minutesForEnd + ' ' + middayPeriodForEnd));
- }
- } else if (!Em.isNone(startDate)) {
- date = startDate + duration;
- }
- return date;
- },
- setErrorMessage: function (key, message) {
- var errors = this.get('errors'),
- errorMessages = this.get('errorMessages'),
- isError = !Em.isNone(message);
- message = isError ? message: '';
- errors.set('is' + key.capitalize() + 'Error', isError);
- errorMessages.set(key, message);
- },
- validate: function () {
- var hasErrors = false,
- formFields = this.get('customDateFormFields'),
- errors = this.get('errors'),
- errorMessages = this.get('errorMessages');
- // Check if fields are empty or invalid
- Em.keys(errorMessages).forEach(function (key) {
- var value = formFields.get(key),
- timestamp = App.getTimeStampFromLocalTime(value);
- if (key !== 'endDate' || this.get('isCustomEndDate')) {
- if (!formFields.get(key)) {
- hasErrors = true;
- this.setErrorMessage(key);
- } else if (isNaN(timestamp)) {
- this.setErrorMessage(key, Em.I18n.t('jobs.customDateFilter.error.incorrect'));
- hasErrors = true;
- } else {
- this.setErrorMessage(key);
- }
- }
- }, this);
- // Check that endDate is after startDate
- if (!hasErrors) {
- var startDate = this.createCustomStartDate(),
- endDate = this.createCustomEndDate(startDate);
- if (startDate && endDate) {
- if (startDate > endDate) {
- hasErrors = true;
- this.setErrorMessage('endDate', Em.I18n.t('jobs.customDateFilter.error.date.order'));
- }
- if (startDate > new Date().getTime()) {
- hasErrors = true;
- this.setErrorMessage('startDate', Em.I18n.t('jobs.customDateFilter.error.laterThanNow'));
- }
- }
- }
- this.set('parentView.disablePrimary', hasErrors);
- // Get customized time range if there are no errors
- if (!hasErrors) {
- var duration;
- if (this.get('isCustomEndDate')) {
- var values = [
- {
- label: 'year',
- max: Infinity
- },
- {
- label: 'month',
- max: 12
- },
- {
- label: 'week',
- max: 4
- },
- {
- label: 'day',
- max: 7
- },
- {
- label: 'hour',
- max: 24
- },
- {
- label: 'minute',
- max: 60
- }
- ],
- start = moment(startDate),
- end = moment(endDate);
- values.forEach(function (item) {
- var diff = end.diff(start, item.label);
- item.value = diff >= item.max ? diff % item.max : diff;
- });
- duration = values.filterProperty('value').map(function (item) {
- return item.value + ' ' + stringUtils.pluralize(item.value, item.label);
- }).join(' ');
- } else {
- duration = this.get('customDateFormFields.duration.label');
- }
- this.get('controller').setProperties({
- startTime: startDate,
- endTime: endDate,
- customDuration: duration
- });
- }
- }.observes('customDateFormFields.startDate', 'customDateFormFields.hoursForStart', 'customDateFormFields.minutesForStart', 'customDateFormFields.middayPeriodForStart', 'customDateFormFields.endDate', 'customDateFormFields.hoursForEnd', 'customDateFormFields.minutesForEnd', 'customDateFormFields.middayPeriodForEnd', 'customDateFormFields.duration.value')
- });
|