-
Notifications
You must be signed in to change notification settings - Fork 38
/
types.d.ts
169 lines (150 loc) · 4.31 KB
/
types.d.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
import { TOGGLE_CATEGORY_VISIBILITY } from 'src/eventConstants'
import { EventObject, MachineConfig, StateMachine, StateNode, StateSchema, Typestate } from 'xstate'
import {
ADD_CONSTRAINT,
APPLY_OVERVIEW_CONSTRAINT,
REMOVE_CONSTRAINT,
RESET_OVERVIEW_CONSTRAINT,
} from './components/Constraints/actions'
import { LOCK_ALL_CONSTRAINTS, RESET_ALL_CONSTRAINTS } from './globalActions'
/**
* Constraint Machines
*/
export interface ConstraintMachineSchema extends StateSchema {
states: {
loading: {}
noConstraintsSet: {}
noConstraintItems: {}
constraintsUpdated: {}
constraintsApplied: {}
constraintLimitReached: {}
}
}
export interface ConstraintMachineContext {
selectedValues: string[]
availableValues: any[]
constraintPath: string
classView: string
constraintItemsQuery: { [key: string]: any }
searchIndex?: any
type: ConstraintMachineTypes
}
export type ConstraintEvents = EventObject &
(
| { to?: string; type: typeof LOCK_ALL_CONSTRAINTS }
| { to?: string; type: typeof RESET_ALL_CONSTRAINTS }
| { to?: string; type: typeof RESET_OVERVIEW_CONSTRAINT }
| { to?: string; type: typeof ADD_CONSTRAINT; constraint: string }
| { to?: string; type: typeof REMOVE_CONSTRAINT; constraint: string }
| { to?: string; type: typeof APPLY_OVERVIEW_CONSTRAINT }
| { to?: string; type: typeof APPLY_OVERVIEW_CONSTRAINT_TO_QUERY; query: QueryConfig }
| { to?: string; type: typeof SET_AVAILABLE_COLUMNS; selectedPaths: string[] }
| {
to?: string
type: typeof FETCH_SUMMARY
query?: { [key: string]: any }
classView: string
rootUrl: string
}
| { to?: string; type: typeof CHANGE_CONSTRAINT_VIEW; newTabId: string | number }
| { to?: string; type: typeof TOGGLE_CATEGORY_VISIBILITY; isVisible: boolean; tagName: string }
| { to?: string; type: typeof ADD_TEMPLATE_CONSTRAINT; path: string; selectedValues: any[] }
)
export type ConstraintMachineConfig = MachineConfig<
ConstraintMachineContext,
ConstraintMachineSchema,
ConstraintEvents
>
type ConstraintTypeState = Typestate<ConstraintMachineContext>
export type ConstraintStateMachine =
| StateMachine<
ConstraintMachineContext,
ConstraintMachineSchema,
ConstraintEvents,
ConstraintTypeState
>
| StateNode<ConstraintMachineContext, any, ConstraintEvents, any>
type ConstraintMachineTypes = 'checkbox' | 'select'
export type ConstraintMachineOpts = {
id: ConstraintMachineTypes
initial?:
| 'loading'
| 'noConstraintsSet'
| 'noConstraintItems'
| 'constraintsUpdated'
| 'constraintsApplied'
| 'constraintLimitReached'
path?: string
op?: ImjsOperations
constraintItemsQuery: { [key: string]: any }
}
export type CreateConstraintMachine = (
options: ConstraintMachineOpts
) => StateMachine<ConstraintMachineContext, any, ConstraintEvents, any>
export type ConstraintConfig = {
type: ConstraintMachineTypes
name: string
label: string
path: string
op: string
valuesQuery: { [key: string]: any }
}
/**
*
*/
export type ImjsOperations = 'ONE OF'
/**
* Query Machine
*/
export interface QueryMachineSchema extends StateSchema {
states: {
idle: {}
constraintLimitReached: {}
}
}
export interface QueryMachineContext {
currentConstraints: QueryConfig[]
}
export type QueryConfig = {
path: string
values: string[]
op: ImjsOperations
}
export type QueryMachineConfig = MachineConfig<
QueryMachineContext,
QueryMachineSchema,
QueryMachineEvents
>
/**
* Machine bus
*/
interface UseMachineOptions<TContext, TEvent extends EventObject> {
/**
* If provided, will be merged with machine's `context`.
*/
context?: Partial<TContext>
/**
* If `true`, service will start immediately (before mount).
*/
immediate: boolean
/**
* The state to rehydrate the machine to. The machine will
* start at this state instead of its `initialState`.
*/
state?: StateConfig<TContext, TEvent>
}
export type UseMachineBus = <TContext, TEvent extends EventObject>(
machine: StateMachine<TContext, any, TEvent>,
options?: Partial<InterpreterOptions> &
Partial<UseMachineOptions<TContext, TEvent>> &
Partial<MachineOptions<TContext, TEvent>>
) => [State<TContext, TEvent>, SendToBusWrapper, Interpreter<TContext, any, TEvent>]
export type SendToBusWrapper = (
event: ConstraintEvents,
payload?: EventData | undefined
) => State<
ConstraintMachineContext,
ConstraintEvents,
ConstraintMachineSchema,
ConstraintTypeState
> | void