-
Notifications
You must be signed in to change notification settings - Fork 65
/
Interactions.ts
54 lines (46 loc) · 1.23 KB
/
Interactions.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { createClassName, createRuleSet } from "./Utils"
export enum InteractionKey {
interaction = "interaction",
}
/**
* Encapsulates all interaction data needed by the Media component. The data is
* generated on initialization so no further runtime work is necessary.
*/
export class Interactions {
static validKeys() {
return [InteractionKey.interaction]
}
private _interactions: { [key: string]: string }
constructor(interactions: { [name: string]: string }) {
this._interactions = interactions
}
public toRuleSets() {
return Object.entries(this._interactions).reduce(
(acc: string[], [name, query]) => {
return [
...acc,
createRuleSet(
createClassName(InteractionKey.interaction, name),
query
),
]
},
[]
)
}
public get interactions() {
return Object.keys(this._interactions)
}
public get dynamicResponsiveMediaQueries() {
return Object.entries(this._interactions).reduce(
(acc, [name, query]) => ({ ...acc, [name]: query }),
{}
)
}
public shouldRenderMediaQuery(
interaction: string,
onlyMatch: string[]
): boolean {
return !!(onlyMatch && onlyMatch.includes(interaction))
}
}