@vixoniccom/aniversarios 1.2.3-dev.1 → 1.3.0-dev.0
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/.github/workflows/sonarqube.yml +30 -0
- package/CHANGELOG.md +9 -0
- package/build.zip +0 -0
- package/configuration/appearanceGroup/AppearanceInputs.ts +101 -0
- package/configuration/appearanceGroup/index.ts +8 -0
- package/configuration/dataGroup/DataInputs.ts +62 -0
- package/configuration/dataGroup/index.ts +8 -0
- package/configuration/index.ts +8 -0
- package/configuration/standardGroup/StandardInputs.ts +211 -0
- package/configuration/standardGroup/index.ts +8 -0
- package/configuration/utils.ts +17 -0
- package/configuration.json +192 -196
- package/package.json +2 -2
- package/sonar-project.properties +1 -0
- package/src/App.tsx +14 -113
- package/src/anniversary-loader.ts +70 -0
- package/src/components/AnniversaryItem/components/AnniversaryDate/CircleDate/index.tsx +7 -8
- package/src/components/AnniversaryItem/components/AnniversaryDate/FlatDate/index.tsx +5 -6
- package/src/components/AnniversaryItem/components/AnniversaryDate/OutlineDate/index.tsx +9 -11
- package/src/components/AnniversaryItem/components/AnniversaryDate/TextCalendarDate/index.tsx +8 -10
- package/src/components/AnniversaryItem/components/AnniversaryDate/TextDate/index.tsx +4 -5
- package/src/components/AnniversaryItem/components/AnniversaryDate/index.tsx +4 -12
- package/src/components/AnniversaryItem/components/ClassicItem/index.tsx +10 -10
- package/src/components/AnniversaryItem/components/Separator/Separator.tsx +2 -4
- package/src/components/AnniversaryItem/components/utils.ts +43 -28
- package/src/components/AnniversaryItem/index.tsx +4 -4
- package/src/components/FontLoader/index.tsx +5 -10
- package/src/components/FormattedText/index.tsx +6 -5
- package/src/components/ItemsContainer/components/Item.tsx +15 -7
- package/src/components/ItemsContainer/components/animation.ts +21 -27
- package/src/components/ItemsContainer/index.tsx +7 -7
- package/src/components/Render/index.tsx +13 -14
- package/src/global.d.ts +8 -0
- package/src/main.ts +46 -0
- package/src/parameters.d.ts +4 -119
- package/src/service-parsers.ts +40 -0
- package/src/test/parameters.json +3 -2
- package/src/test/services.json +158 -0
- package/src/context/configureContext/ConfigureContext.tsx +0 -8
- package/src/context/configureContext/ConfigureProvider.tsx +0 -72
- package/src/context/configureContext/configureReducer.ts +0 -62
- package/src/context/dataContext/DataContex.tsx +0 -8
- package/src/context/dataContext/DataProvider.tsx +0 -25
- package/src/context/dataContext/dataReducer.ts +0 -12
- package/src/helpers/filterEmployees.ts +0 -38
- package/src/helpers/getEmployees.ts +0 -29
- package/src/helpers/utils.ts +0 -46
- package/src/main.tsx +0 -43
|
@@ -25,7 +25,7 @@ interface Props {
|
|
|
25
25
|
export const FormattedText: React.FunctionComponent<Props> = ({ text, format, maxChar, lineHeight, style, unit, paddingBottom, paddingTop }) => {
|
|
26
26
|
const trimText = (text: any, maxChar: any) => {
|
|
27
27
|
const isValid = maxChar && maxChar >= 3
|
|
28
|
-
if (isValid && (text && text.length > maxChar)
|
|
28
|
+
if (isValid && (text && text.length > maxChar)) {
|
|
29
29
|
const returnText = text.substring(0, maxChar - 3)
|
|
30
30
|
returnText.substr(-1, 3)
|
|
31
31
|
return `${returnText.trim()}...`
|
|
@@ -35,7 +35,7 @@ export const FormattedText: React.FunctionComponent<Props> = ({ text, format, ma
|
|
|
35
35
|
|
|
36
36
|
const checkNested = (obj: any, path: string): boolean => {
|
|
37
37
|
return path.split('.').every(segment => {
|
|
38
|
-
if (obj
|
|
38
|
+
if (obj?.hasOwnProperty(segment)) {
|
|
39
39
|
obj = obj[segment]
|
|
40
40
|
return true
|
|
41
41
|
}
|
|
@@ -52,10 +52,11 @@ export const FormattedText: React.FunctionComponent<Props> = ({ text, format, ma
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
const renderText = maxChar ? trimText(text, maxChar) : text
|
|
55
|
-
const containerStyle =
|
|
55
|
+
const containerStyle = {
|
|
56
56
|
display: 'inline-flex',
|
|
57
|
-
justifyContent: getHorizontalAlignment(format.alignment)
|
|
58
|
-
|
|
57
|
+
justifyContent: getHorizontalAlignment(format.alignment),
|
|
58
|
+
...(style as any)
|
|
59
|
+
}
|
|
59
60
|
|
|
60
61
|
return (
|
|
61
62
|
<div style={containerStyle}>
|
|
@@ -16,9 +16,21 @@ interface Props {
|
|
|
16
16
|
style: any
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
|
|
20
|
+
|
|
19
21
|
export const Item = ({ width, height, containerData, verticalGap, horizontalGap, children, style }: Props) => {
|
|
20
22
|
const itemRef = useRef(null)
|
|
21
23
|
|
|
24
|
+
let topPosition = '0';
|
|
25
|
+
if (containerData.ic_rowIndex !== 0) {
|
|
26
|
+
topPosition = verticalGap ? `${verticalGap * containerData.ic_rowIndex}%` : '0';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let leftPadding = '0'
|
|
30
|
+
if (containerData.ic_columnIndex !== 0) {
|
|
31
|
+
leftPadding = horizontalGap ? `${horizontalGap}%` : '0';
|
|
32
|
+
}
|
|
33
|
+
|
|
22
34
|
return (
|
|
23
35
|
<div ref={itemRef}
|
|
24
36
|
style={{
|
|
@@ -29,13 +41,9 @@ export const Item = ({ width, height, containerData, verticalGap, horizontalGap,
|
|
|
29
41
|
justifyContent: aligments['center'],
|
|
30
42
|
width: width,
|
|
31
43
|
height: height,
|
|
32
|
-
top:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
paddingLeft: containerData.ic_columnIndex === 0
|
|
36
|
-
? '0'
|
|
37
|
-
: horizontalGap ? `${horizontalGap}%` : '0'
|
|
38
|
-
, ...style
|
|
44
|
+
top: topPosition,
|
|
45
|
+
paddingLeft: leftPadding,
|
|
46
|
+
...style
|
|
39
47
|
}}
|
|
40
48
|
>
|
|
41
49
|
{React.cloneElement(children, containerData)}
|
|
@@ -58,7 +58,7 @@ const animationModes = {
|
|
|
58
58
|
},
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
class
|
|
61
|
+
export class AnimationController {
|
|
62
62
|
public mode: any
|
|
63
63
|
public duration: number
|
|
64
64
|
public speed: number
|
|
@@ -73,12 +73,12 @@ class Animation {
|
|
|
73
73
|
this.reverse = true
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
configure(options: Options) {
|
|
77
|
-
this.mode = animationModes.hasOwnProperty(options.mode) ? animationModes[options.mode] : animationModes.fade
|
|
76
|
+
configure(options: Partial<Options>) {
|
|
77
|
+
this.mode = options.mode && animationModes.hasOwnProperty(options.mode) ? animationModes[options.mode] : animationModes.fade
|
|
78
78
|
this.duration = options.duration || 10000
|
|
79
79
|
this.speed = 1000 * (options.speed || 1)
|
|
80
80
|
this.stagger = this.speed / (options.stagger || 4)
|
|
81
|
-
this.reverse = options.reverse
|
|
81
|
+
this.reverse = options.reverse !== undefined ? options.reverse : true
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
getInitialStyle() {
|
|
@@ -96,35 +96,29 @@ class Animation {
|
|
|
96
96
|
autoplay: false,
|
|
97
97
|
})
|
|
98
98
|
animation.add(
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return i * self.stagger
|
|
105
|
-
},
|
|
99
|
+
{
|
|
100
|
+
targets: els,
|
|
101
|
+
duration: this.speed,
|
|
102
|
+
delay: function (_el: any, i: any, _l: any) {
|
|
103
|
+
return i * self.stagger
|
|
106
104
|
},
|
|
107
|
-
this.mode.in
|
|
108
|
-
|
|
105
|
+
...this.mode.in
|
|
106
|
+
}
|
|
109
107
|
)
|
|
110
108
|
animation.add(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
return _i * self.stagger
|
|
117
|
-
},
|
|
118
|
-
complete: () => {
|
|
119
|
-
finished()
|
|
120
|
-
},
|
|
109
|
+
{
|
|
110
|
+
targets: els,
|
|
111
|
+
duration: this.speed,
|
|
112
|
+
delay: function (_el: any, _i: any, _l: any) {
|
|
113
|
+
return _i * self.stagger
|
|
121
114
|
},
|
|
122
|
-
|
|
123
|
-
|
|
115
|
+
complete: () => {
|
|
116
|
+
finished()
|
|
117
|
+
},
|
|
118
|
+
...this.mode.out
|
|
119
|
+
},
|
|
124
120
|
`+=${offset}`
|
|
125
121
|
)
|
|
126
122
|
animation.play()
|
|
127
123
|
}
|
|
128
124
|
}
|
|
129
|
-
|
|
130
|
-
module.exports = exports = Animation
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useState, useRef, useEffect } from 'react'
|
|
2
2
|
import { Item } from './components/Item'
|
|
3
|
-
import { ConfigureContext } from '../../context/configureContext/ConfigureContext'
|
|
4
3
|
import { useStateWithCallbackLazy } from 'use-state-with-callback'
|
|
5
4
|
import { ReactElementLike } from 'prop-types'
|
|
5
|
+
import { AnimationController } from './components/animation'
|
|
6
6
|
|
|
7
7
|
const stages = {
|
|
8
8
|
idle: 'idle',
|
|
@@ -14,20 +14,20 @@ interface Props {
|
|
|
14
14
|
items: ReactElementLike[],
|
|
15
15
|
animation: Animation,
|
|
16
16
|
animate: boolean
|
|
17
|
+
data: VixonicData
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
interface Animation {
|
|
20
|
-
mode?:
|
|
21
|
+
mode?: "fade" | "slideRight" | "slideLeft"
|
|
21
22
|
duration?: number,
|
|
22
23
|
speed?: number,
|
|
23
24
|
reverse?: boolean
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
export const ItemsContainer = ({ animation, items, animate }: Props) => {
|
|
27
|
-
const {
|
|
28
|
-
const { containerColumns, containerRows, containerRowsGap, containerColumnsGap } = configureState.parameters
|
|
27
|
+
export const ItemsContainer = ({ animation, items, animate, data }: Props) => {
|
|
28
|
+
const { containerColumns, containerRows, containerRowsGap, containerColumnsGap } = data.parameters
|
|
29
29
|
const container = useRef<HTMLDivElement>(null)
|
|
30
|
-
const [animations] = useState(new (
|
|
30
|
+
const [animations] = useState(new AnimationController())
|
|
31
31
|
let itemsCount = Number(containerColumns) * Number(containerRows)
|
|
32
32
|
let columns = Number(containerColumns) || 1
|
|
33
33
|
let rows = Number(containerRows) || 1
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import React, { useContext } from 'react'
|
|
2
|
-
import { ConfigureContext } from '../../context/configureContext/ConfigureContext'
|
|
3
|
-
import { DataContext } from '../../context/dataContext/DataContex'
|
|
4
1
|
import { FontLoader } from '../FontLoader'
|
|
5
2
|
import { FormattedText } from '../FormattedText'
|
|
6
3
|
import { AnniversaryItem } from '../AnniversaryItem'
|
|
@@ -8,26 +5,27 @@ import { ItemsContainer } from '../ItemsContainer'
|
|
|
8
5
|
|
|
9
6
|
interface Props {
|
|
10
7
|
start: boolean
|
|
8
|
+
appData: VixonicData
|
|
9
|
+
anniversaries: Anniversary[]
|
|
11
10
|
}
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const {
|
|
16
|
-
const { parameters, downloadsPath } = configureState
|
|
12
|
+
|
|
13
|
+
export const Render = ({ start, appData, anniversaries }: Props) => {
|
|
14
|
+
const { parameters, downloadsPath } = appData
|
|
17
15
|
const { backgroundImage,
|
|
18
16
|
padding,
|
|
19
|
-
|
|
17
|
+
defaultMessage = '',
|
|
20
18
|
animationMode,
|
|
21
19
|
animationOrder,
|
|
22
20
|
animationSpeed,
|
|
23
21
|
animationTime,
|
|
24
22
|
} = parameters
|
|
25
23
|
|
|
26
|
-
const backgroundImageState = backgroundImage
|
|
24
|
+
const backgroundImageState = backgroundImage?.filename
|
|
27
25
|
? `url("${downloadsPath}/${backgroundImage.filename}")` : ''
|
|
28
26
|
|
|
29
|
-
const anniversaryItems =
|
|
30
|
-
return <AnniversaryItem style={'standard'} anniversary={anniversary} />
|
|
27
|
+
const anniversaryItems = anniversaries.map((anniversary: Anniversary) => {
|
|
28
|
+
return <AnniversaryItem style={'standard'} anniversary={anniversary} data={appData} />
|
|
31
29
|
})
|
|
32
30
|
|
|
33
31
|
return (
|
|
@@ -41,8 +39,8 @@ export const Render = ({ start }: Props) => {
|
|
|
41
39
|
backgroundSize: '100% 100%',
|
|
42
40
|
padding: padding
|
|
43
41
|
}}>
|
|
44
|
-
<FontLoader paths={['nameFormat.font', 'descriptionFormat.font', 'dateDayFormat.font', 'dateMonthFormat.font', 'optionalFormat.font']} />
|
|
45
|
-
{(
|
|
42
|
+
<FontLoader paths={['nameFormat.font', 'descriptionFormat.font', 'dateDayFormat.font', 'dateMonthFormat.font', 'optionalFormat.font']} data={appData} />
|
|
43
|
+
{( anniversaries.length > 0) ?
|
|
46
44
|
<ItemsContainer
|
|
47
45
|
items={anniversaryItems}
|
|
48
46
|
animation={{
|
|
@@ -52,6 +50,7 @@ export const Render = ({ start }: Props) => {
|
|
|
52
50
|
reverse: animationOrder
|
|
53
51
|
}}
|
|
54
52
|
animate={start}
|
|
53
|
+
data={appData}
|
|
55
54
|
/> :
|
|
56
55
|
<div style={{
|
|
57
56
|
width: '100%',
|
|
@@ -60,7 +59,7 @@ export const Render = ({ start }: Props) => {
|
|
|
60
59
|
justifyContent: 'center',
|
|
61
60
|
alignItems: 'center'
|
|
62
61
|
}}>
|
|
63
|
-
<FormattedText text={
|
|
62
|
+
<FormattedText text={defaultMessage.trim() || 'Sin ingresos'} format={parameters.nameFormat || parameters.descriptionFormat} />
|
|
64
63
|
</div>
|
|
65
64
|
}
|
|
66
65
|
</div >
|
package/src/global.d.ts
ADDED
package/src/main.ts
CHANGED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import ReactDOM from 'react-dom'
|
|
3
|
+
import { App } from './App'
|
|
4
|
+
import { AnniversaryLoader } from './anniversary-loader'
|
|
5
|
+
const { ipcRenderer } = require('electron')
|
|
6
|
+
|
|
7
|
+
let start: boolean = false
|
|
8
|
+
let appData: VixonicData
|
|
9
|
+
let anniversaries: Anniversary[] = []
|
|
10
|
+
|
|
11
|
+
const anniversariesLoader = new AnniversaryLoader()
|
|
12
|
+
|
|
13
|
+
anniversariesLoader.onData = (update) => {
|
|
14
|
+
anniversaries = update
|
|
15
|
+
render()
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
ipcRenderer.on('preload', (_event: any, data: VixonicData) => {
|
|
19
|
+
appData = data
|
|
20
|
+
anniversariesLoader.update(data)
|
|
21
|
+
render()
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
ipcRenderer.on('start', (_event: any, data: VixonicData) => {
|
|
25
|
+
appData = data
|
|
26
|
+
anniversariesLoader.update(data)
|
|
27
|
+
start = true
|
|
28
|
+
render()
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
ipcRenderer.on('update', (_event: any, data: VixonicData) => {
|
|
32
|
+
appData = data
|
|
33
|
+
anniversariesLoader.update(data)
|
|
34
|
+
render()
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
ipcRenderer.on('finish', (_event: any) => {
|
|
38
|
+
anniversariesLoader.stop()
|
|
39
|
+
console.log('finish')
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
function render() {
|
|
43
|
+
ReactDOM.render(
|
|
44
|
+
React.createElement(App, { start, appData, anniversaries }), document.getElementById('root')
|
|
45
|
+
)
|
|
46
|
+
}
|
package/src/parameters.d.ts
CHANGED
|
@@ -1,124 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
1
|
declare type VixonicData = {
|
|
4
|
-
parameters: VixonicParameters,
|
|
5
|
-
services?: { [key: string]: { data?: any, updatedAt?: number } }
|
|
6
2
|
downloadsPath: string
|
|
3
|
+
services: { [key: string]: { data?: any, updatedAt?: number } }
|
|
4
|
+
parameters: VixonicParameters
|
|
7
5
|
}
|
|
8
6
|
|
|
9
|
-
|
|
10
7
|
declare type VixonicParameters = Partial<{
|
|
11
|
-
abbreviatedMonths: boolean
|
|
12
|
-
|
|
13
|
-
animationOrder: boolean
|
|
14
|
-
animationSpeed: number
|
|
15
|
-
animationTime: string
|
|
16
|
-
animationStagger:number
|
|
17
|
-
apiDomain: string
|
|
18
|
-
backgroundImage: GeneralData
|
|
19
|
-
containerColumns: string
|
|
20
|
-
containerRows: string
|
|
21
|
-
containerRowsGap: string
|
|
22
|
-
containerColumnsGap:string
|
|
23
|
-
dataMode: string
|
|
24
|
-
dateAlignment: keyof typeof alignment
|
|
25
|
-
dateDayFormat: DateFormat
|
|
26
|
-
dateEnabled: boolean
|
|
27
|
-
dateMonthFormat: DateFormat
|
|
28
|
-
datePosition: number
|
|
29
|
-
datePrimaryColor: string
|
|
30
|
-
dateStyle: keyof typeof styles
|
|
31
|
-
descriptionEnabled: boolean
|
|
32
|
-
descriptionFormat: DateFormat
|
|
33
|
-
optionalEnabled: boolean
|
|
34
|
-
optionalFormat: DateFormat
|
|
35
|
-
excludePast: boolean
|
|
36
|
-
imageAlignment: keyof typeof alignment
|
|
37
|
-
imageEnabled: boolean
|
|
38
|
-
imagePosition: number
|
|
39
|
-
imageStyle: keyof typeof borderStyles,
|
|
40
|
-
imageSize: number
|
|
41
|
-
itemMargins: string
|
|
42
|
-
msj0: string
|
|
43
|
-
nameFormat: DateFormat
|
|
44
|
-
orientation: string
|
|
45
|
-
padding: string
|
|
46
|
-
photosMode: string
|
|
47
|
-
photosZip: GeneralData
|
|
48
|
-
template: string
|
|
49
|
-
textAlignment: keyof typeof alignment
|
|
50
|
-
textPosition: number
|
|
51
|
-
updateTime: number
|
|
52
|
-
urlBaseApi: string,
|
|
53
|
-
imageMargin: string,
|
|
54
|
-
textMargin: string,
|
|
55
|
-
dateMargin: string,
|
|
56
|
-
separator: boolean,
|
|
57
|
-
separatorWidth: number,
|
|
58
|
-
separatorColor: string,
|
|
59
|
-
nameMaxChar: number,
|
|
60
|
-
descriptionMaxChar: number,
|
|
61
|
-
}>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
declare type DataEmployee = {
|
|
65
|
-
apellidoPate: string
|
|
66
|
-
area: string
|
|
67
|
-
cargo: string
|
|
68
|
-
contrato: string
|
|
69
|
-
empleado: string
|
|
70
|
-
empresa: string
|
|
71
|
-
estado: string
|
|
72
|
-
fechaInic: string
|
|
73
|
-
modalidad_contrato: string
|
|
74
|
-
nombre: string
|
|
75
|
-
sede: string
|
|
76
|
-
situacion: string
|
|
77
|
-
tipoCont: string,
|
|
78
|
-
nombreCargo: string,
|
|
79
|
-
day:number
|
|
80
|
-
month:number
|
|
81
|
-
name:string
|
|
82
|
-
position:string
|
|
83
|
-
image:string
|
|
84
|
-
optional: string
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
declare type Employees = {
|
|
88
|
-
dataEmployee: DataEmployee[] | any[][]
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
type GeneralData = {
|
|
92
|
-
filename?: string
|
|
93
|
-
id?: string,
|
|
94
|
-
extension?: string,
|
|
95
|
-
_isAsset: boolean
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
type DateFormat = {
|
|
99
|
-
alignment?: { horizontal?: 'left' | 'right' | 'center' },
|
|
100
|
-
font?: GeneralData,
|
|
101
|
-
fontColor?: string,
|
|
102
|
-
fontSize?: number
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const alignment = {
|
|
106
|
-
start: 'flex-start',
|
|
107
|
-
center: 'center',
|
|
108
|
-
end: 'flex-end'
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const borderStyles = {
|
|
113
|
-
normal: '0',
|
|
114
|
-
rounded: '10',
|
|
115
|
-
circle: '100'
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
const styles = {
|
|
119
|
-
text: 'text',
|
|
120
|
-
calendarFlat: 'calendarFlat',
|
|
121
|
-
calendarText: 'calendarText',
|
|
122
|
-
circle: 'circle',
|
|
123
|
-
outlines: 'outlines'
|
|
124
|
-
}
|
|
8
|
+
displayService: 'AnniversaryAppService' | 'RexmasAnniversarieService', documentService: { id: string }, rexmasService: { id: string }, photoMode: 'zip' | 'online', photosZip: {id?: string, filename?: string, extension?: string}, updateTime: 600000 | 1800000 | 3600000 | 21600000 | 43200000 | 86400000 | 604800000, defaultMessage: string, defaultMessageFormat: { fontSize?: number, fontColor?: string, alignment?: { horizontal?: 'left' | 'right' | 'center' }, font?: { filename: string, id: string, __isAsset: true } }, orientation: 'h' | 'v', animationMode: 'fade' | 'slideRight' | 'slideLeft', animationSpeed: 2 | 1.5 | 1, animationOrder: boolean, animationTime: number, containerColumns: number, containerColumnsGap: number, containerRows: number, containerRowsGap: number, backgroundImage: {id?: string, filename?: string, extension?: string}, padding: string, textPosition: 1 | 2 | 3, textAlignment: 'start' | 'center' | 'end', nameFormat: { fontSize?: number, fontColor?: string, alignment?: { horizontal?: 'left' | 'right' | 'center' }, font?: { filename: string, id: string, __isAsset: true } }, nameMaxChar: number, textMargin: string, descriptionEnabled: boolean, descriptionFormat: { fontSize?: number, fontColor?: string, alignment?: { horizontal?: 'left' | 'right' | 'center' }, font?: { filename: string, id: string, __isAsset: true } }, descriptionMaxChar: number, optionalEnabled: boolean, optionalFormat: { fontSize?: number, fontColor?: string, alignment?: { horizontal?: 'left' | 'right' | 'center' }, font?: { filename: string, id: string, __isAsset: true } }, imageEnabled: boolean, imagePosition: 1 | 2 | 3, imageAlignment: 'start' | 'center' | 'end', imageStyle: 'normal' | 'rounded' | 'circle', imageMargin: string, imageSize: number, dateEnabled: boolean, datePosition: 1 | 2 | 3, dateAlignment: 'start' | 'center' | 'end', dateStyle: 'calendarFlat' | 'calendarText' | 'circle' | 'text' | 'outlines', dateDayFormat: { fontSize?: number, fontColor?: string, alignment?: { horizontal?: 'left' | 'right' | 'center' }, font?: { filename: string, id: string, __isAsset: true } }, dateMonthFormat: { fontSize?: number, fontColor?: string, alignment?: { horizontal?: 'left' | 'right' | 'center' }, font?: { filename: string, id: string, __isAsset: true } }, abbreviatedMonths: boolean, datePrimaryColor: string, dateMargin: string, separator: boolean, separatorWidth: number, separatorColor: string, itemMargins: string
|
|
9
|
+
}>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export class AnniversaryServiceParsers {
|
|
2
|
+
static readonly AnniversaryAppService = {
|
|
3
|
+
parse: (data: any[]): Anniversary[] => {
|
|
4
|
+
return data.map(item => ({
|
|
5
|
+
month: item.month,
|
|
6
|
+
day: item.day,
|
|
7
|
+
name: item.name,
|
|
8
|
+
image: item.image,
|
|
9
|
+
}))
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
static readonly RexmasAnniversaryService = {
|
|
14
|
+
parse: (data: any[]): Anniversary[] => {
|
|
15
|
+
return data.map(item => ({
|
|
16
|
+
month: item.month,
|
|
17
|
+
day: item.day,
|
|
18
|
+
name: item.name,
|
|
19
|
+
description: undefined,
|
|
20
|
+
image: item.image,
|
|
21
|
+
optional: undefined
|
|
22
|
+
}))
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static getParser(serviceType: VixonicData['parameters']['displayService']): ServiceParser {
|
|
27
|
+
switch (serviceType) {
|
|
28
|
+
case 'AnniversaryAppService':
|
|
29
|
+
return this.AnniversaryAppService
|
|
30
|
+
case 'RexmasAnniversarieService':
|
|
31
|
+
return this.RexmasAnniversaryService
|
|
32
|
+
default:
|
|
33
|
+
return this.AnniversaryAppService
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface ServiceParser {
|
|
39
|
+
parse: (data: any[]) => Anniversary[]
|
|
40
|
+
}
|
package/src/test/parameters.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"parameters": {
|
|
3
|
-
"
|
|
4
|
-
"
|
|
3
|
+
"documentService": {"id":"0159f12d-4a7d-24d1-f260-f33908c049e22"},
|
|
4
|
+
"rexmasService": {"id":"12b64ef1-0c66-c4ae-8797-9113e1063c4c"},
|
|
5
|
+
"defaultMessage": "No ingresos",
|
|
5
6
|
"padding": "365px 25px 80px 40px",
|
|
6
7
|
"dataMode": "monthly",
|
|
7
8
|
"template": "standard",
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
{
|
|
2
|
+
"services": {
|
|
3
|
+
"d3e82496-63af-5992-96dc-7d9639d21dd6": {
|
|
4
|
+
"id": "d3e82496-63af-5992-96dc-7d9639d21dd6",
|
|
5
|
+
"data": [
|
|
6
|
+
{
|
|
7
|
+
"day": 14,
|
|
8
|
+
"month": 6,
|
|
9
|
+
"name": "MANUEL SOMOZA",
|
|
10
|
+
"description": "CORPORATIVO",
|
|
11
|
+
"image": "Foto prueba.jpg"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"day": 14,
|
|
15
|
+
"month": 6,
|
|
16
|
+
"name": "ANTONIO BELLO",
|
|
17
|
+
"description": "CORPORATIVO",
|
|
18
|
+
"image": "Foto prueba.jpg"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"day": 16,
|
|
22
|
+
"month": 6,
|
|
23
|
+
"name": "MARIA DEL PILAR MARTINEZ",
|
|
24
|
+
"description": "FORD DURANGO",
|
|
25
|
+
"image": "Foto prueba.jpg"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"day": 17,
|
|
29
|
+
"month": 6,
|
|
30
|
+
"name": "AXEL ZALDIVAR",
|
|
31
|
+
"description": "JAC METEPEC",
|
|
32
|
+
"image": "Foto prueba.jpg"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"day": 18,
|
|
36
|
+
"month": 6,
|
|
37
|
+
"name": "GUSTAVO MENDEZ",
|
|
38
|
+
"description": "PEUGEOT ARBOLEDAS",
|
|
39
|
+
"image": "Foto prueba.jpg"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"day": 19,
|
|
43
|
+
"month": 6,
|
|
44
|
+
"name": "CARLOS CAMPOS",
|
|
45
|
+
"description": "JAC METEPEC",
|
|
46
|
+
"image": "Foto prueba.jpg"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"day": 19,
|
|
50
|
+
"month": 6,
|
|
51
|
+
"name": "CRISTIAN HOLGUIN",
|
|
52
|
+
"description": "CORPORATIVO",
|
|
53
|
+
"image": "Foto prueba.jpg"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"day": 20,
|
|
57
|
+
"month": 6,
|
|
58
|
+
"name": "MARIA DOMINGUEZ",
|
|
59
|
+
"description": "JAC CUERNAVACA",
|
|
60
|
+
"image": "Foto prueba.jpg"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"day": 20,
|
|
64
|
+
"month": 6,
|
|
65
|
+
"name": "DANIEL PEREZ",
|
|
66
|
+
"description": "CORPORATIVO",
|
|
67
|
+
"image": "Foto prueba.jpg"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"day": 21,
|
|
71
|
+
"month": 6,
|
|
72
|
+
"name": "ORLANDO QUIROZ",
|
|
73
|
+
"description": "PEUGEOT ARBOLEDAS",
|
|
74
|
+
"image": "Foto prueba.jpg"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"day": 26,
|
|
78
|
+
"month": 6,
|
|
79
|
+
"name": "LIZZA GUZMAN",
|
|
80
|
+
"description": "FORD DURANGO",
|
|
81
|
+
"image": "Foto prueba.jpg"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"day": 26,
|
|
85
|
+
"month": 6,
|
|
86
|
+
"name": "MONTSERRAT TORRES",
|
|
87
|
+
"description": "LEXUS SANTA FE",
|
|
88
|
+
"image": "Foto prueba.jpg"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"day": 28,
|
|
92
|
+
"month": 6,
|
|
93
|
+
"name": "PAOLA ALEMAN",
|
|
94
|
+
"description": "CORPORATIVO",
|
|
95
|
+
"image": "Foto prueba.jpg"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"day": 30,
|
|
99
|
+
"month": 6,
|
|
100
|
+
"name": "FANNY ANDRADE",
|
|
101
|
+
"description": "FORD DURANGO",
|
|
102
|
+
"image": "Foto prueba.jpg"
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"updatedAt": 1749672137077,
|
|
106
|
+
"__typename": "AnniversaryAppService"
|
|
107
|
+
},
|
|
108
|
+
"12b64ef1-0c66-c4ae-8797-9113e1063c4c": {
|
|
109
|
+
"id": "12b64ef1-0c66-c4ae-8797-9113e1063c4c",
|
|
110
|
+
"data": [
|
|
111
|
+
{
|
|
112
|
+
"day": 5,
|
|
113
|
+
"month": 5,
|
|
114
|
+
"name": "Juan Esteban Cárdenas",
|
|
115
|
+
"image": "https://s3.us-east-2.amazonaws.com/payroll-prod-chile/media/static/entidades/losnavegantes/18749054-5.jpg"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"day": 5,
|
|
119
|
+
"month": 5,
|
|
120
|
+
"name": "CARLA ELENA OYARZÚN",
|
|
121
|
+
"image": "https://s3.us-east-2.amazonaws.com/payroll-prod-chile/media/static/entidades/losnavegantes/12810705-3.png"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"day": 7,
|
|
125
|
+
"month": 5,
|
|
126
|
+
"name": "César Claudio Llancafil",
|
|
127
|
+
"image": "https://s3.us-east-2.amazonaws.com/payroll-prod-chile/media/static/entidades/losnavegantes/20761855-1.png"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"day": 16,
|
|
131
|
+
"month": 5,
|
|
132
|
+
"name": "JOSE MIGUEL DUQUE",
|
|
133
|
+
"image": "https://s3.us-east-2.amazonaws.com/payroll-prod-chile/media/static/entidades/losnavegantes/13461287-8.png"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"day": 17,
|
|
137
|
+
"month": 5,
|
|
138
|
+
"name": "CARLOS EDUARDO RIVERA",
|
|
139
|
+
"image": "https://s3.us-east-2.amazonaws.com/payroll-prod-chile/media/static/entidades/losnavegantes/25455086-8.jpg"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"day": 22,
|
|
143
|
+
"month": 5,
|
|
144
|
+
"name": "Pablo Baltazar Troncoso",
|
|
145
|
+
"image": "https://s3.us-east-2.amazonaws.com/payroll-prod-chile/media/static/entidades/losnavegantes/18407251-3.jpg"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"day": 29,
|
|
149
|
+
"month": 5,
|
|
150
|
+
"name": "Elizabeth Marcela Urdaneta",
|
|
151
|
+
"image": "https://s3.us-east-2.amazonaws.com/payroll-prod-chile/media/static/entidades/losnavegantes/25440150-1.png"
|
|
152
|
+
}
|
|
153
|
+
],
|
|
154
|
+
"updatedAt": 1749670622134,
|
|
155
|
+
"__typename": "RexmasBirthdayService"
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|