-
Notifications
You must be signed in to change notification settings - Fork 76
/
add-bucket-trigger-modal.js
127 lines (106 loc) · 3.27 KB
/
add-bucket-trigger-modal.js
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
/* Copyright (C) 2016 NooBaa */
import template from './add-bucket-trigger-modal.html';
import Observer from 'observer';
import { state$, action$ } from 'state';
import { bucketEvents } from 'utils/bucket-utils';
import { getFunctionOption } from 'utils/func-utils';
import { getMany } from 'rx-extensions';
import ko from 'knockout';
import { addBucketTrigger as learnMoreHref } from 'knowledge-base-articles';
import {
openCreateFuncModal,
addBucketTrigger,
closeModal
} from 'action-creators';
class AddBucketTriggerModalViewModel extends Observer {
learnMoreHref = learnMoreHref;
formName = this.constructor.name;
bucketName = '';
existingTriggers = null;
eventOptions = bucketEvents;
funcActions = [{
label: 'Create new function',
onClick: this.onCreateNewFunction
}];
funcOptions = ko.observableArray();
fields = {
func: null,
event: '',
prefix: '',
suffix: '',
active: true
};
constructor({ bucketName }) {
super();
this.bucketName = ko.unwrap(bucketName);
this.observe(
state$.pipe(
getMany(
['buckets', this.bucketName, 'triggers'],
'functions',
'accounts'
)
),
this.onState
);
}
onState([triggers, funcs, accounts]) {
if (!triggers || !funcs || !accounts) {
return;
}
const funcOptions = Object.values(funcs)
.map(func => getFunctionOption(func, accounts, this.bucketName));
this.existingTriggers = Object.values(triggers);
this.funcOptions(funcOptions);
}
onCreateNewFunction() {
action$.next(openCreateFuncModal());
}
onValidate(values) {
const errors = {};
const { event, func } = values;
if (!func) {
errors.func = 'Please select a function';
}
if (!event) {
errors.event = 'Please select an event type';
}
return errors;
}
async onValidateSubmit(values, existingTriggers) {
const errors = {};
const { event, func, prefix, suffix } = values;
const unique = existingTriggers
.every(trigger =>
trigger.event !== event ||
trigger.func.name !== func.name ||
trigger.func.version !== func.version ||
trigger.prefix !== prefix ||
trigger.suffix !== suffix
);
if (!unique) {
errors.event = errors.func = errors.prefix = errors.suffix = ' ';
errors.global = 'A trigger with the same setting already exists';
}
return errors;
}
onSubmit(values) {
const config = {
funcName: values.func.name,
funcVersion: values.func.version,
event: values.event,
prefix: values.prefix,
suffix: values.suffix,
enabled: values.active
};
action$.next(addBucketTrigger(this.bucketName, config));
action$.next(closeModal());
}
onCancel() {
action$.next(closeModal());
}
}
export default {
viewModel: AddBucketTriggerModalViewModel,
template: template
};