mirror of
https://github.com/openstf/stf
synced 2025-10-05 02:29:26 +02:00
223 lines
6.1 KiB
JavaScript
223 lines
6.1 KiB
JavaScript
/**
|
|
* Copyright © 2019 code initially contributed by Orange SA, authors: Denis Barbaron - Licensed under the Apache license 2.0
|
|
**/
|
|
|
|
const _ = require('lodash')
|
|
|
|
module.exports = function CommonServiceFactory(
|
|
$window,
|
|
$location,
|
|
GenericModalService
|
|
) {
|
|
const service = {}
|
|
|
|
const FIVE_MN = 300 * 1000
|
|
const ONE_HOUR = 3600 * 1000
|
|
const ONE_DAY = 24 * ONE_HOUR
|
|
const ONE_WEEK = 7 * ONE_DAY
|
|
const ONE_MONTH = 30 * ONE_DAY
|
|
const ONE_QUATER = 3 * ONE_MONTH
|
|
const ONE_HALF_YEAR = 6 * ONE_MONTH
|
|
const ONE_YEAR = 365 * ONE_DAY
|
|
|
|
function getClassOptionsField(id, field) {
|
|
for(var i in service.classOptions) {
|
|
if (service.classOptions[i].id === id) {
|
|
return service.classOptions[i][field]
|
|
}
|
|
}
|
|
return ''
|
|
}
|
|
|
|
service.classOptions = [
|
|
{name: 'Once', id: 'once', privilege: 'user', duration: Infinity},
|
|
{name: 'Hourly', id: 'hourly', privilege: 'user', duration: ONE_HOUR},
|
|
{name: 'Daily', id: 'daily', privilege: 'user', duration: ONE_DAY},
|
|
{name: 'Weekly', id: 'weekly', privilege: 'user', duration: ONE_WEEK},
|
|
{name: 'Monthly', id: 'monthly', privilege: 'user', duration: ONE_MONTH},
|
|
{name: 'Quaterly', id: 'quaterly', privilege: 'user', duration: ONE_QUATER},
|
|
{name: 'Halfyearly', id: 'halfyearly', privilege: 'user', duration: ONE_HALF_YEAR},
|
|
{name: 'Yearly', id: 'yearly', privilege: 'user', duration: ONE_YEAR},
|
|
{name: 'Debug', id: 'debug', privilege: 'admin', duration: FIVE_MN},
|
|
{name: 'Bookable', id: 'bookable', privilege: 'admin', duration: Infinity},
|
|
{name: 'Standard', id: 'standard', privilege: 'admin', duration: Infinity}
|
|
]
|
|
|
|
service.getClassName = function(id) {
|
|
return getClassOptionsField(id, 'name')
|
|
}
|
|
|
|
service.getClassDuration = function(id) {
|
|
return getClassOptionsField(id, 'duration')
|
|
}
|
|
|
|
service.getDuration = function(ms) {
|
|
if (ms < 1000) {
|
|
return '0s'
|
|
}
|
|
var s = Math.floor(ms / 1000)
|
|
var m = Math.floor(s / 60)
|
|
|
|
s %= 60
|
|
var h = Math.floor(m / 60)
|
|
|
|
m %= 60
|
|
var d = Math.floor(h / 24)
|
|
|
|
h %= 24
|
|
return (d === 0 ? '' : d + 'd') +
|
|
(h === 0 ? '' : (d === 0 ? '' : ' ') + h + 'h') +
|
|
(m === 0 ? '' : (h === 0 ? '' : ' ') + m + 'm') +
|
|
(s === 0 ? '' : (m === 0 ? '' : ' ') + s + 's')
|
|
}
|
|
|
|
service.errorWrapper = function(fn, args) {
|
|
return fn.apply(null, args).catch(function(error) {
|
|
return GenericModalService.open({
|
|
message: error.data ?
|
|
error.data.description :
|
|
error.status + ' ' + error.statusText
|
|
, type: 'Error'
|
|
, size: 'lg'
|
|
, cancel: false
|
|
})
|
|
.then(function() {
|
|
return error
|
|
})
|
|
})
|
|
}
|
|
|
|
service.getIndex = function(array, value, property) {
|
|
for(var i in array) {
|
|
if (array[i][property] === value) {
|
|
return i
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
service.merge = function(oldObject, newObject) {
|
|
var undefinedValue
|
|
|
|
return _.merge(oldObject, newObject, function(a, b) {
|
|
return _.isArray(b) ? b : undefinedValue
|
|
})
|
|
}
|
|
|
|
service.isAddable = function(object, timeStamp) {
|
|
return typeof object === 'undefined' ||
|
|
timeStamp >= object.timeStamp && object.index === -1
|
|
}
|
|
|
|
service.isExisting = function(object) {
|
|
return typeof object !== 'undefined' &&
|
|
object.index !== -1
|
|
}
|
|
|
|
service.isRemovable = function(object, timeStamp) {
|
|
return service.isExisting(object) &&
|
|
timeStamp >= object.timeStamp
|
|
}
|
|
|
|
service.add = function(array, objects, value, property, timeStamp) {
|
|
if (service.isAddable(objects[value[property]], timeStamp)) {
|
|
objects[value[property]] = {
|
|
index: array.push(value) - 1
|
|
, timeStamp: timeStamp
|
|
}
|
|
return array[objects[value[property]].index]
|
|
}
|
|
return null
|
|
}
|
|
|
|
service.update = function(array, objects, value, property, timeStamp, noAdding) {
|
|
if (service.isExisting(objects[value[property]])) {
|
|
service.merge(array[objects[value[property]].index], value)
|
|
objects[value[property]].timeStamp = timeStamp
|
|
return array[objects[value[property]].index]
|
|
}
|
|
else if (!noAdding) {
|
|
return service.add(array, objects, value, property, timeStamp)
|
|
}
|
|
return null
|
|
}
|
|
|
|
service.delete = function(array, objects, key, timeStamp) {
|
|
if (service.isRemovable(objects[key], timeStamp)) {
|
|
const index = objects[key].index
|
|
const value = array.splice(index, 1)[0]
|
|
|
|
objects[key].index = -1
|
|
objects[key].timeStamp = timeStamp
|
|
for (var k in objects) {
|
|
if (objects[k].index > index) {
|
|
objects[k].index--
|
|
}
|
|
}
|
|
return value
|
|
}
|
|
else if (typeof objects[key] === 'undefined') {
|
|
objects[key] = {
|
|
index: -1
|
|
, timeStamp: timeStamp
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
|
|
service.sortBy = function(data, column) {
|
|
const index = service.getIndex(data.columns, column.name, 'name')
|
|
|
|
if (index !== data.sort.index) {
|
|
data.sort.reverse = false
|
|
column.sort = 'sort-asc'
|
|
data.columns[data.sort.index].sort = 'none'
|
|
data.sort.index = index
|
|
}
|
|
else {
|
|
data.sort.reverse = !data.sort.reverse
|
|
column.sort = column.sort === 'sort-asc' ? 'sort-desc' : 'sort-asc'
|
|
}
|
|
return service
|
|
}
|
|
|
|
service.isOriginGroup = function(_class) {
|
|
return _class === 'bookable' || _class === 'standard'
|
|
}
|
|
|
|
service.isNoRepetitionsGroup = function(_class) {
|
|
return service.isOriginGroup(_class) || _class === 'once'
|
|
}
|
|
|
|
service.url = function(url) {
|
|
const a = $window.document.createElement('a')
|
|
|
|
$window.document.body.appendChild(a)
|
|
a.href = url
|
|
a.click()
|
|
$window.document.body.removeChild(a)
|
|
return service
|
|
}
|
|
|
|
service.copyToClipboard = function(data) {
|
|
const input = $window.document.createElement('input')
|
|
|
|
$window.document.body.appendChild(input)
|
|
input.value = data
|
|
input.select()
|
|
$window.document.execCommand('copy')
|
|
$window.document.body.removeChild(input)
|
|
return service
|
|
}
|
|
|
|
service.getBaseUrl = function() {
|
|
return $location.protocol()
|
|
+ '://'
|
|
+ $location.host()
|
|
+ ':'
|
|
+ $location.port()
|
|
}
|
|
|
|
return service
|
|
}
|
|
|