@truedat/ie 4.44.1 → 4.44.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truedat/ie",
3
- "version": "4.44.1",
3
+ "version": "4.44.4",
4
4
  "description": "Truedat Web Ingests",
5
5
  "sideEffects": false,
6
6
  "jsnext:main": "src/index.js",
@@ -30,7 +30,7 @@
30
30
  "@babel/plugin-transform-modules-commonjs": "^7.15.0",
31
31
  "@babel/preset-env": "^7.15.0",
32
32
  "@babel/preset-react": "^7.14.5",
33
- "@truedat/test": "4.44.1",
33
+ "@truedat/test": "4.44.4",
34
34
  "babel-jest": "^27.0.6",
35
35
  "babel-plugin-dynamic-import-node": "^2.3.3",
36
36
  "babel-plugin-lodash": "^3.3.4",
@@ -80,8 +80,8 @@
80
80
  ]
81
81
  },
82
82
  "dependencies": {
83
- "@truedat/core": "4.44.1",
84
- "@truedat/df": "4.44.1",
83
+ "@truedat/core": "4.44.4",
84
+ "@truedat/df": "4.44.4",
85
85
  "file-saver": "^2.0.5",
86
86
  "moment": "^2.24.0",
87
87
  "path-to-regexp": "^1.7.0",
@@ -100,5 +100,5 @@
100
100
  "react-dom": ">= 16.8.6 < 17",
101
101
  "semantic-ui-react": ">= 0.88.2 < 2.1"
102
102
  },
103
- "gitHead": "20d38381ed4cb6658d1122a4bff08a13fedc2d59"
103
+ "gitHead": "36fb183e1d22181e6a15b3bac2c01b39214eacdb"
104
104
  }
@@ -13,8 +13,8 @@ import {
13
13
  import { compose } from "redux";
14
14
  import { connect } from "react-redux";
15
15
  import { injectIntl, FormattedMessage } from "react-intl";
16
- import { HistoryBackButton } from "@truedat/core/components";
17
- import { selectTemplate, selectDomain } from "@truedat/df/routines";
16
+ import { HistoryBackButton, TemplateSelector } from "@truedat/core/components";
17
+ import { selectDomain } from "@truedat/df/routines";
18
18
  import { applyTemplate } from "@truedat/df/utils";
19
19
  import { ingestAction } from "../routines";
20
20
 
@@ -30,9 +30,6 @@ const RichTextEditor = React.lazy(() =>
30
30
  const TemplateLoader = React.lazy(() =>
31
31
  import("@truedat/df/templates/components/TemplateLoader")
32
32
  );
33
- const TemplateSelector = React.lazy(() =>
34
- import("@truedat/df/templates/components/TemplateSelector")
35
- );
36
33
 
37
34
  const actionKey = "create";
38
35
 
@@ -42,6 +39,8 @@ const initialState = {
42
39
  name: "",
43
40
  description: {},
44
41
  content: {},
42
+ templatesLoading: true,
43
+ template: null,
45
44
  };
46
45
 
47
46
  const isNonEmptyString = _.flow(_.trim, _.negate(_.isEmpty));
@@ -54,38 +53,37 @@ const isValid = _.conforms({
54
53
  export class IngestForm extends React.Component {
55
54
  static propTypes = {
56
55
  action: PropTypes.object,
57
- applyTemplate: PropTypes.func,
58
56
  ingestAction: PropTypes.func,
59
57
  ingestActionLoading: PropTypes.string,
60
58
  intl: PropTypes.object,
61
59
  selectDomain: PropTypes.func,
62
- selectTemplate: PropTypes.func,
63
- template: PropTypes.object,
64
- templateLoading: PropTypes.bool,
65
- templates: PropTypes.array,
66
60
  };
67
61
 
68
62
  state = initialState;
69
63
 
70
- componentDidMount() {
71
- const { templates } = this.props;
72
- if (_.size(templates) == 1) {
73
- const { selectTemplate } = this.props;
74
- const id = _.flow(_.head, _.prop("id"))(templates);
75
- selectTemplate({ id });
76
- }
77
- }
78
-
79
- componentDidUpdate() {
80
- const { applyTemplate, template } = this.props;
81
- const { type, content } = this.state;
64
+ handleTemplatesLoaded = ({ templates = [] } = {}) => {
65
+ const { type: name, content, domain_id } = this.state;
66
+ const template = name
67
+ ? _.find(_.propEq("name", name))(templates)
68
+ : _.size(templates) == 1
69
+ ? templates[0]
70
+ : null;
71
+ this.setState({
72
+ template,
73
+ templatesLoading: false,
74
+ type: template?.name || null,
75
+ content: template ? applyTemplate(template)(content, domain_id) : {},
76
+ });
77
+ };
82
78
 
83
- if (_.has("name")(template) && !_.propEq("name", type)(template))
84
- this.setState({
85
- type: _.prop("name")(template),
86
- content: applyTemplate(content),
87
- });
88
- }
79
+ handleTemplateSelected = (e, { template }) => {
80
+ const { content, domain_id } = this.state;
81
+ this.setState({
82
+ template,
83
+ type: template?.name || null,
84
+ content: template ? applyTemplate(template)(content, domain_id) : {},
85
+ });
86
+ };
89
87
 
90
88
  handleDomainSelected = (e, { value }) => {
91
89
  const domain_id = value;
@@ -96,12 +94,6 @@ export class IngestForm extends React.Component {
96
94
  this.setState({ domain_id });
97
95
  };
98
96
 
99
- handleTemplateSelected = (e, data) => {
100
- const { value } = data;
101
- const { selectTemplate } = this.props;
102
- selectTemplate({ id: value });
103
- };
104
-
105
97
  handleEditorChange = (e, { value }) => {
106
98
  this.handleChange(null, { name: "description", value });
107
99
  };
@@ -120,20 +112,19 @@ export class IngestForm extends React.Component {
120
112
 
121
113
  handleSubmit = (e) => {
122
114
  e.preventDefault();
123
- const { action, applyTemplate, ingestAction } = this.props;
115
+ const { action, ingestAction } = this.props;
124
116
  const ingestVersion = _.pick(["domain_id", "type", ...staticFields])(
125
117
  this.state
126
118
  );
127
-
128
- const content = applyTemplate(
129
- this.state?.content,
130
- ingestVersion?.domain_id
131
- );
119
+ const { template, content, domain_id } = this.state;
132
120
 
133
121
  ingestAction({
134
122
  action: actionKey,
135
123
  ...action,
136
- ingest_version: { ...ingestVersion, content },
124
+ ingest_version: {
125
+ ...ingestVersion,
126
+ content: applyTemplate(template)(content, domain_id),
127
+ },
137
128
  });
138
129
  };
139
130
 
@@ -142,15 +133,13 @@ export class IngestForm extends React.Component {
142
133
  action,
143
134
  ingestActionLoading,
144
135
  intl: { formatMessage },
145
- template,
146
- templateLoading,
147
- templates,
148
136
  } = this.props;
149
137
 
150
- const { name, description, content } = this.state;
138
+ const { name, description, content, template, templatesLoading } =
139
+ this.state;
151
140
 
152
141
  const loading =
153
- templateLoading ||
142
+ templatesLoading ||
154
143
  (action && action.href && ingestActionLoading === action.href);
155
144
 
156
145
  return (
@@ -167,12 +156,13 @@ export class IngestForm extends React.Component {
167
156
  onChange={this.handleDomainSelected}
168
157
  invalid={!_.isFinite(this.state.domain_id)}
169
158
  />
170
- {_.size(templates) > 1 && (
171
- <TemplateSelector
172
- selectedValue={_.prop("id")(template)}
173
- onChange={this.handleTemplateSelected}
174
- />
175
- )}
159
+ <TemplateSelector
160
+ scope="ie"
161
+ selectedValue={template?.id}
162
+ onChange={this.handleTemplateSelected}
163
+ onLoad={this.handleTemplatesLoaded}
164
+ required
165
+ />
176
166
  <Form.Field required>
177
167
  <label>
178
168
  <FormattedMessage id="ingests.props.name" />
@@ -184,7 +174,6 @@ export class IngestForm extends React.Component {
184
174
  </label>
185
175
  <Form.Input name="name" value={name} onChange={this.handleChange} />
186
176
  </Form.Field>
187
-
188
177
  <Form.Field required>
189
178
  <label>
190
179
  <FormattedMessage id="ingests.props.description" />
@@ -200,12 +189,13 @@ export class IngestForm extends React.Component {
200
189
  onChange={this.handleEditorChange}
201
190
  />
202
191
  </Form.Field>
203
- {template && template.id && (
192
+ {template?.id ? (
204
193
  <DynamicForm
205
194
  onChange={this.handleContentChange}
206
195
  content={content}
196
+ template={template}
207
197
  />
208
- )}
198
+ ) : null}
209
199
  <div className="actions">
210
200
  <HistoryBackButton
211
201
  content={formatMessage({ id: "actions.cancel" })}
@@ -223,22 +213,12 @@ export class IngestForm extends React.Component {
223
213
  }
224
214
  }
225
215
 
226
- const mapStateToProps = ({
227
- ingestActionLoading,
228
- ingestsActions,
229
- template,
230
- templateLoading,
231
- templates,
232
- }) => ({
216
+ const mapStateToProps = ({ ingestActionLoading, ingestsActions }) => ({
233
217
  action: _.prop(actionKey)(ingestsActions),
234
- applyTemplate: applyTemplate(template),
235
218
  ingestActionLoading,
236
- template,
237
- templateLoading,
238
- templates,
239
219
  });
240
220
 
241
221
  export default compose(
242
222
  injectIntl,
243
- connect(mapStateToProps, { ingestAction, selectTemplate, selectDomain })
223
+ connect(mapStateToProps, { ingestAction, selectDomain })
244
224
  )(IngestForm);
@@ -18,7 +18,7 @@ import {
18
18
  INGESTS,
19
19
  INGESTS_PENDING,
20
20
  INGESTS_NEW,
21
- INGEST_EXECUTIONS
21
+ INGEST_EXECUTIONS,
22
22
  } from "@truedat/core/routes";
23
23
  import IngestRelationsRoutes from "../relations/components/IngestRelationsRoutes";
24
24
  import Events from "./Events";
@@ -77,7 +77,7 @@ const IngestRoutes = ({ ingestLoaded, ingest_id, templatesLoaded }) => {
77
77
  <>
78
78
  <IngestsLoader
79
79
  defaultFilters={{
80
- status: ["draft", "pending_approval", "rejected"]
80
+ status: ["draft", "pending_approval", "rejected"],
81
81
  }}
82
82
  />
83
83
  <IngestFiltersLoader />
@@ -92,9 +92,8 @@ const IngestRoutes = ({ ingestLoaded, ingest_id, templatesLoaded }) => {
92
92
  <>
93
93
  <DomainsLoader actions="create_ingest" />
94
94
  <IngestCrumbs ingestAction="ingests.actions.create" />
95
- <TemplatesLoader scope="ie" />
96
95
  <IngestsLoader />
97
- {templatesLoaded && <IngestForm />}
96
+ <IngestForm />
98
97
  </>
99
98
  )}
100
99
  />
@@ -191,7 +190,10 @@ const IngestRoutes = ({ ingestLoaded, ingest_id, templatesLoaded }) => {
191
190
  <RelationTagsLoader />
192
191
  <IngestArchiveLoader />
193
192
  {ingestLoaded && (
194
- <EventsLoader resource_id={ingest_id} resource_type="ingest"/>
193
+ <EventsLoader
194
+ resource_id={ingest_id}
195
+ resource_type="ingest"
196
+ />
195
197
  )}
196
198
  {ingestLoaded && <Ingest />}
197
199
  {ingestLoaded && <Events />}
@@ -283,13 +285,13 @@ const IngestRoutes = ({ ingestLoaded, ingest_id, templatesLoaded }) => {
283
285
  IngestRoutes.propTypes = {
284
286
  ingestLoaded: PropTypes.bool,
285
287
  templatesLoaded: PropTypes.bool,
286
- ingest_id: PropTypes.number
288
+ ingest_id: PropTypes.number,
287
289
  };
288
290
 
289
291
  const mapStateToProps = ({ ingest, templatesLoading, templates }) => ({
290
292
  ingestLoaded: !_.isEmpty(ingest),
291
293
  ingest_id: !_.isEmpty(ingest) ? ingest.ingest_id : undefined,
292
- templatesLoaded: !templatesLoading && !_.isEmpty(templates)
294
+ templatesLoaded: !templatesLoading && !_.isEmpty(templates),
293
295
  });
294
296
 
295
297
  export default connect(mapStateToProps)(IngestRoutes);
@@ -1,71 +1,103 @@
1
- import React from "react";
2
- import { shallowWithIntl } from "@truedat/test/intl-stub";
3
- import { IngestForm } from "../IngestForm";
1
+ import React, { Suspense } from "react";
2
+ import { waitFor } from "@testing-library/react";
3
+ import { render } from "@truedat/test/render";
4
+ import { TEMPLATES_QUERY } from "@truedat/core/api/queries";
5
+ import IngestForm from "../IngestForm";
4
6
 
5
- describe("<IngestForm />", () => {
6
- const action = {};
7
- const domains = [
8
- { id: 1, name: "Domain1" },
9
- { id: 2, name: "Domain 2" }
10
- ];
11
- const ingestAction = jest.fn();
12
- const ingestActionLoading = "some action";
13
- const template1 = { id: 1, name: "template1" };
14
- const template2 = { id: 2, name: "template2" };
15
- const templateLoading = false;
16
-
17
- const props = {
18
- action,
19
- domains,
20
- ingestAction,
21
- ingestActionLoading,
22
- templateLoading
23
- };
7
+ const template1 = {
8
+ id: "1",
9
+ name: "template1",
10
+ label: "template1",
11
+ scope: "remediation",
12
+ content: [
13
+ {
14
+ name: "g1",
15
+ fields: [{ name: "field1", label: "field1", placeholder: "field1" }],
16
+ },
17
+ ],
18
+ };
19
+ const template2 = {
20
+ id: "2",
21
+ name: "template2",
22
+ label: "template2",
23
+ scope: "remediation",
24
+ content: {},
25
+ };
26
+ const makeRenderOpts = (templates) => ({
27
+ mocks: [
28
+ {
29
+ request: { query: TEMPLATES_QUERY, variables: { scope: "ie" } },
30
+ result: { data: { templates } },
31
+ },
32
+ ],
33
+ state: {
34
+ ingestActions: { create: {} },
35
+ ingestActionLoading: "",
36
+ domains: [{ id: 1, name: "domain1" }],
37
+ },
38
+ });
24
39
 
40
+ describe("<IngestForm />", () => {
25
41
  describe("with multiple templates", () => {
26
42
  const templates = [template1, template2];
27
- const selectTemplate = jest.fn();
28
- const wrapper = shallowWithIntl(
29
- <IngestForm
30
- templates={templates}
31
- selectTemplate={selectTemplate}
32
- {...props}
33
- />
34
- );
43
+ const renderOpts = makeRenderOpts(templates);
35
44
 
36
- it("matches the latest snapshot", () => {
37
- expect(wrapper).toMatchSnapshot();
45
+ it("matches the latest snapshot", async () => {
46
+ const { container, queryByText } = render(
47
+ <Suspense fallback="loading...">
48
+ <IngestForm />
49
+ </Suspense>,
50
+ renderOpts
51
+ );
52
+ await waitFor(() => {
53
+ expect(queryByText(/loading/i)).not.toBeInTheDocument();
54
+ });
55
+ expect(container).toMatchSnapshot();
38
56
  });
39
57
 
40
- it("dispatches selectTemplate when template is selected", () => {
41
- const value = 2;
42
- expect(selectTemplate.mock.calls.length).toBe(0);
43
- wrapper
44
- .findWhere(n => n.prop("onChange"))
45
- .at(1)
46
- .prop("onChange")({}, { value });
47
- expect(selectTemplate.mock.calls.length).toBe(1);
58
+ it("contains a template selector", async () => {
59
+ const { queryByRole } = render(
60
+ <Suspense fallback="loading...">
61
+ <IngestForm />
62
+ </Suspense>,
63
+ renderOpts
64
+ );
65
+ await waitFor(() => {
66
+ expect(
67
+ queryByRole("option", { name: "template1" })
68
+ ).toBeInTheDocument();
69
+ });
48
70
  });
49
71
  });
50
72
 
51
73
  describe("with a single template", () => {
52
74
  const templates = [template1];
53
- const selectTemplate = jest.fn();
54
- const wrapper = shallowWithIntl(
55
- <IngestForm
56
- templates={templates}
57
- selectTemplate={selectTemplate}
58
- {...props}
59
- />
60
- );
75
+ const renderOpts = makeRenderOpts(templates);
61
76
 
62
- it("matches the latest snapshot", () => {
63
- expect(wrapper).toMatchSnapshot();
77
+ it("matches the latest snapshot", async () => {
78
+ const { container, queryByText } = render(
79
+ <Suspense fallback="loading...">
80
+ <IngestForm />
81
+ </Suspense>,
82
+ renderOpts
83
+ );
84
+ await waitFor(() => {
85
+ expect(queryByText(/loading/i)).not.toBeInTheDocument();
86
+ });
87
+ expect(container).toMatchSnapshot();
64
88
  });
65
89
 
66
- it("dispatches selectTemplate when component mounts", () => {
67
- shallowWithIntl(<IngestForm {...props} />);
68
- expect(selectTemplate.mock.calls.length).toBe(1);
90
+ it("contains no <TemplateSelector />", async () => {
91
+ const { queryByText } = render(
92
+ <Suspense fallback="loading...">
93
+ <IngestForm />
94
+ </Suspense>,
95
+ renderOpts
96
+ );
97
+ await waitFor(() => {
98
+ expect(queryByText(/loading/i)).not.toBeInTheDocument();
99
+ });
100
+ expect(queryByText("template1")).not.toBeInTheDocument();
69
101
  });
70
102
  });
71
103
  });
@@ -1,180 +1,629 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`<IngestForm /> with a single template matches the latest snapshot 1`] = `
4
- <Container
5
- as={[Function]}
6
- text={true}
7
- >
8
- <Header
9
- as="h2"
4
+ <div>
5
+ <div
6
+ class="ui segment ui text container"
7
+ style=""
10
8
  >
11
- <Icon
12
- as="i"
13
- name="share square"
14
- />
15
- <HeaderContent>
16
- <MemoizedFormattedMessage
17
- id="ingests.actions.create"
18
- />
19
- </HeaderContent>
20
- </Header>
21
- <lazy />
22
- <Form
23
- as="form"
24
- >
25
- <lazy
26
- invalid={true}
27
- onChange={[Function]}
28
- />
29
- <FormField
30
- required={true}
9
+ <h2
10
+ class="ui header"
31
11
  >
32
- <label>
33
- <MemoizedFormattedMessage
34
- id="ingests.props.name"
35
- />
36
- <Label
37
- pointing="left"
38
- >
39
- <MemoizedFormattedMessage
40
- id="template.form.validation.empty_required"
41
- />
42
- </Label>
43
- </label>
44
- <FormInput
45
- as={[Function]}
46
- control={[Function]}
47
- name="name"
48
- onChange={[Function]}
49
- value=""
12
+ <i
13
+ aria-hidden="true"
14
+ class="share square icon"
50
15
  />
51
- </FormField>
52
- <FormField
53
- required={true}
16
+ <div
17
+ class="content"
18
+ >
19
+ New Ingest
20
+ </div>
21
+ </h2>
22
+ <form
23
+ class="ui form"
54
24
  >
55
- <label>
56
- <MemoizedFormattedMessage
57
- id="ingests.props.description"
58
- />
59
- <Label
60
- pointing="left"
25
+ <div
26
+ class="required field"
27
+ >
28
+ <label>
29
+ Domain
30
+ </label>
31
+ <div
32
+ class="field"
61
33
  >
62
- <MemoizedFormattedMessage
63
- id="template.form.validation.empty_required"
64
- />
65
- </Label>
66
- </label>
67
- <lazy
68
- name="description"
69
- onChange={[Function]}
70
- value={Object {}}
71
- />
72
- </FormField>
73
- <div
74
- className="actions"
75
- >
76
- <HistoryBackButton
77
- content="actions.cancel"
78
- />
79
- <Button
80
- as="button"
81
- content="actions.create"
82
- disabled={true}
83
- onClick={[Function]}
84
- primary={true}
85
- />
86
- </div>
87
- </Form>
88
- </Container>
34
+ <div
35
+ aria-expanded="false"
36
+ class="ui fluid search selection dropdown"
37
+ name="domain"
38
+ role="combobox"
39
+ >
40
+ <input
41
+ aria-autocomplete="list"
42
+ autocomplete="off"
43
+ class="search"
44
+ tabindex="0"
45
+ type="text"
46
+ value=""
47
+ />
48
+ <div
49
+ aria-atomic="true"
50
+ aria-live="polite"
51
+ class="divider text"
52
+ role="alert"
53
+ >
54
+ domain1
55
+ </div>
56
+ <i
57
+ aria-hidden="true"
58
+ class="dropdown icon"
59
+ />
60
+ <div
61
+ aria-multiselectable="false"
62
+ class="menu transition"
63
+ role="listbox"
64
+ >
65
+ <div
66
+ aria-checked="true"
67
+ aria-selected="true"
68
+ class="active selected item"
69
+ role="option"
70
+ style="pointer-events: all;"
71
+ >
72
+ <div
73
+ class="text"
74
+ style="margin-left: 0px;"
75
+ >
76
+ <i
77
+ aria-hidden="true"
78
+ class="icon"
79
+ />
80
+ domain1
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ <div
88
+ class="required field"
89
+ >
90
+ <label>
91
+ Ingest
92
+ <div
93
+ class="ui left pointing label"
94
+ >
95
+ Empty required field
96
+ </div>
97
+ </label>
98
+ <div
99
+ class="field"
100
+ >
101
+ <div
102
+ class="ui input"
103
+ >
104
+ <input
105
+ name="name"
106
+ type="text"
107
+ value=""
108
+ />
109
+ </div>
110
+ </div>
111
+ </div>
112
+ <div
113
+ class="required field"
114
+ >
115
+ <label>
116
+ Description
117
+ <div
118
+ class="ui left pointing label"
119
+ >
120
+ Empty required field
121
+ </div>
122
+ </label>
123
+ <div>
124
+ <div
125
+ style="border: 1px solid rgba(34, 36, 38, 0.15); border-radius: 0.28571429rem;"
126
+ >
127
+ <div
128
+ class="ui menu"
129
+ >
130
+ <div
131
+ class="disabled icon item"
132
+ >
133
+ <i
134
+ aria-hidden="true"
135
+ class="bold icon"
136
+ />
137
+ </div>
138
+ <div
139
+ class="disabled icon item"
140
+ >
141
+ <i
142
+ aria-hidden="true"
143
+ class="italic icon"
144
+ />
145
+ </div>
146
+ <div
147
+ class="disabled icon item"
148
+ >
149
+ <i
150
+ aria-hidden="true"
151
+ class="underline icon"
152
+ />
153
+ </div>
154
+ <div
155
+ class="disabled icon item"
156
+ >
157
+ <i
158
+ aria-hidden="true"
159
+ class="header icon"
160
+ />
161
+ </div>
162
+ <div
163
+ class="disabled icon item"
164
+ >
165
+ <i
166
+ aria-hidden="true"
167
+ class="h icon"
168
+ />
169
+ </div>
170
+ <div
171
+ class="disabled icon item"
172
+ >
173
+ <i
174
+ aria-hidden="true"
175
+ class="list ol icon"
176
+ />
177
+ </div>
178
+ <div
179
+ class="disabled icon item"
180
+ >
181
+ <i
182
+ aria-hidden="true"
183
+ class="list ul icon"
184
+ />
185
+ </div>
186
+ <div
187
+ class="disabled icon item"
188
+ >
189
+ <i
190
+ aria-hidden="true"
191
+ class="linkify icon"
192
+ />
193
+ </div>
194
+ </div>
195
+ <div
196
+ style="padding: 10px;"
197
+ >
198
+ <div
199
+ autocorrect="on"
200
+ contenteditable="true"
201
+ data-gramm="false"
202
+ data-key="10"
203
+ data-slate-editor="true"
204
+ role="textbox"
205
+ spellcheck="true"
206
+ style="outline: none; white-space: pre-wrap; word-wrap: break-word;"
207
+ >
208
+ <div
209
+ data-key="11"
210
+ data-slate-object="block"
211
+ style="position: relative;"
212
+ >
213
+ <span
214
+ data-key="14"
215
+ data-slate-object="text"
216
+ >
217
+ <span
218
+ data-offset-key="14:0"
219
+ data-slate-leaf="true"
220
+ >
221
+ <span>
222
+ <span
223
+ contenteditable="false"
224
+ style="pointer-events: none; display: inline-block; width: 0px; max-width: 100%; white-space: nowrap; opacity: 0.333; vertical-align: text-top;"
225
+ />
226
+ <span
227
+ data-slate-length="0"
228
+ data-slate-zero-width="n"
229
+ >
230
+ 
231
+ <br />
232
+ </span>
233
+ </span>
234
+ </span>
235
+ </span>
236
+ </div>
237
+ </div>
238
+ </div>
239
+ </div>
240
+ </div>
241
+ </div>
242
+ <div
243
+ class="ui segment"
244
+ >
245
+ <h4
246
+ class="ui header"
247
+ >
248
+ g1
249
+ </h4>
250
+ <div
251
+ class="field"
252
+ >
253
+ <label>
254
+ field1
255
+ </label>
256
+ <div
257
+ class="field"
258
+ >
259
+ <div
260
+ class="ui input"
261
+ >
262
+ <input
263
+ name="field1"
264
+ type="text"
265
+ value=""
266
+ />
267
+ </div>
268
+ </div>
269
+ </div>
270
+ </div>
271
+ <div
272
+ class="actions"
273
+ >
274
+ <a
275
+ class="ui secondary button"
276
+ href="/"
277
+ role="button"
278
+ >
279
+ Cancel
280
+ </a>
281
+ <button
282
+ class="ui primary disabled button"
283
+ disabled=""
284
+ tabindex="-1"
285
+ >
286
+ Create
287
+ </button>
288
+ </div>
289
+ </form>
290
+ </div>
291
+ </div>
89
292
  `;
90
293
 
91
294
  exports[`<IngestForm /> with multiple templates matches the latest snapshot 1`] = `
92
- <Container
93
- as={[Function]}
94
- text={true}
95
- >
96
- <Header
97
- as="h2"
295
+ <div>
296
+ <div
297
+ class="ui segment ui text container"
298
+ style=""
98
299
  >
99
- <Icon
100
- as="i"
101
- name="share square"
102
- />
103
- <HeaderContent>
104
- <MemoizedFormattedMessage
105
- id="ingests.actions.create"
106
- />
107
- </HeaderContent>
108
- </Header>
109
- <lazy />
110
- <Form
111
- as="form"
112
- >
113
- <lazy
114
- invalid={true}
115
- onChange={[Function]}
116
- />
117
- <lazy
118
- onChange={[Function]}
119
- />
120
- <FormField
121
- required={true}
300
+ <h2
301
+ class="ui header"
122
302
  >
123
- <label>
124
- <MemoizedFormattedMessage
125
- id="ingests.props.name"
126
- />
127
- <Label
128
- pointing="left"
129
- >
130
- <MemoizedFormattedMessage
131
- id="template.form.validation.empty_required"
132
- />
133
- </Label>
134
- </label>
135
- <FormInput
136
- as={[Function]}
137
- control={[Function]}
138
- name="name"
139
- onChange={[Function]}
140
- value=""
303
+ <i
304
+ aria-hidden="true"
305
+ class="share square icon"
141
306
  />
142
- </FormField>
143
- <FormField
144
- required={true}
307
+ <div
308
+ class="content"
309
+ >
310
+ New Ingest
311
+ </div>
312
+ </h2>
313
+ <form
314
+ class="ui form"
145
315
  >
146
- <label>
147
- <MemoizedFormattedMessage
148
- id="ingests.props.description"
149
- />
150
- <Label
151
- pointing="left"
316
+ <div
317
+ class="required field"
318
+ >
319
+ <label>
320
+ Domain
321
+ </label>
322
+ <div
323
+ class="field"
152
324
  >
153
- <MemoizedFormattedMessage
154
- id="template.form.validation.empty_required"
155
- />
156
- </Label>
157
- </label>
158
- <lazy
159
- name="description"
160
- onChange={[Function]}
161
- value={Object {}}
162
- />
163
- </FormField>
164
- <div
165
- className="actions"
166
- >
167
- <HistoryBackButton
168
- content="actions.cancel"
169
- />
170
- <Button
171
- as="button"
172
- content="actions.create"
173
- disabled={true}
174
- onClick={[Function]}
175
- primary={true}
176
- />
177
- </div>
178
- </Form>
179
- </Container>
325
+ <div
326
+ aria-expanded="false"
327
+ class="ui fluid search selection dropdown"
328
+ name="domain"
329
+ role="combobox"
330
+ >
331
+ <input
332
+ aria-autocomplete="list"
333
+ autocomplete="off"
334
+ class="search"
335
+ tabindex="0"
336
+ type="text"
337
+ value=""
338
+ />
339
+ <div
340
+ aria-atomic="true"
341
+ aria-live="polite"
342
+ class="divider text"
343
+ role="alert"
344
+ >
345
+ domain1
346
+ </div>
347
+ <i
348
+ aria-hidden="true"
349
+ class="dropdown icon"
350
+ />
351
+ <div
352
+ aria-multiselectable="false"
353
+ class="menu transition"
354
+ role="listbox"
355
+ >
356
+ <div
357
+ aria-checked="true"
358
+ aria-selected="true"
359
+ class="active selected item"
360
+ role="option"
361
+ style="pointer-events: all;"
362
+ >
363
+ <div
364
+ class="text"
365
+ style="margin-left: 0px;"
366
+ >
367
+ <i
368
+ aria-hidden="true"
369
+ class="icon"
370
+ />
371
+ domain1
372
+ </div>
373
+ </div>
374
+ </div>
375
+ </div>
376
+ </div>
377
+ </div>
378
+ <div
379
+ class="required field"
380
+ >
381
+ <label>
382
+ Template
383
+ <div
384
+ class="ui left pointing label"
385
+ >
386
+ Empty required field
387
+ </div>
388
+ </label>
389
+ <div
390
+ class="field"
391
+ >
392
+ <div
393
+ aria-busy="false"
394
+ aria-expanded="false"
395
+ class="ui search selection dropdown"
396
+ name="template"
397
+ role="combobox"
398
+ >
399
+ <input
400
+ aria-autocomplete="list"
401
+ autocomplete="off"
402
+ class="search"
403
+ tabindex="0"
404
+ type="text"
405
+ value=""
406
+ />
407
+ <div
408
+ aria-atomic="true"
409
+ aria-live="polite"
410
+ class="divider default text"
411
+ role="alert"
412
+ >
413
+ Select a template...
414
+ </div>
415
+ <i
416
+ aria-hidden="true"
417
+ class="dropdown icon"
418
+ />
419
+ <div
420
+ class="menu transition"
421
+ role="listbox"
422
+ >
423
+ <div
424
+ aria-checked="false"
425
+ aria-selected="true"
426
+ class="selected item"
427
+ role="option"
428
+ style="pointer-events: all;"
429
+ >
430
+ <span
431
+ class="text"
432
+ >
433
+ template1
434
+ </span>
435
+ </div>
436
+ <div
437
+ aria-checked="false"
438
+ aria-selected="false"
439
+ class="item"
440
+ role="option"
441
+ style="pointer-events: all;"
442
+ >
443
+ <span
444
+ class="text"
445
+ >
446
+ template2
447
+ </span>
448
+ </div>
449
+ </div>
450
+ </div>
451
+ </div>
452
+ </div>
453
+ <div
454
+ class="required field"
455
+ >
456
+ <label>
457
+ Ingest
458
+ <div
459
+ class="ui left pointing label"
460
+ >
461
+ Empty required field
462
+ </div>
463
+ </label>
464
+ <div
465
+ class="field"
466
+ >
467
+ <div
468
+ class="ui input"
469
+ >
470
+ <input
471
+ name="name"
472
+ type="text"
473
+ value=""
474
+ />
475
+ </div>
476
+ </div>
477
+ </div>
478
+ <div
479
+ class="required field"
480
+ >
481
+ <label>
482
+ Description
483
+ <div
484
+ class="ui left pointing label"
485
+ >
486
+ Empty required field
487
+ </div>
488
+ </label>
489
+ <div>
490
+ <div
491
+ style="border: 1px solid rgba(34, 36, 38, 0.15); border-radius: 0.28571429rem;"
492
+ >
493
+ <div
494
+ class="ui menu"
495
+ >
496
+ <div
497
+ class="disabled icon item"
498
+ >
499
+ <i
500
+ aria-hidden="true"
501
+ class="bold icon"
502
+ />
503
+ </div>
504
+ <div
505
+ class="disabled icon item"
506
+ >
507
+ <i
508
+ aria-hidden="true"
509
+ class="italic icon"
510
+ />
511
+ </div>
512
+ <div
513
+ class="disabled icon item"
514
+ >
515
+ <i
516
+ aria-hidden="true"
517
+ class="underline icon"
518
+ />
519
+ </div>
520
+ <div
521
+ class="disabled icon item"
522
+ >
523
+ <i
524
+ aria-hidden="true"
525
+ class="header icon"
526
+ />
527
+ </div>
528
+ <div
529
+ class="disabled icon item"
530
+ >
531
+ <i
532
+ aria-hidden="true"
533
+ class="h icon"
534
+ />
535
+ </div>
536
+ <div
537
+ class="disabled icon item"
538
+ >
539
+ <i
540
+ aria-hidden="true"
541
+ class="list ol icon"
542
+ />
543
+ </div>
544
+ <div
545
+ class="disabled icon item"
546
+ >
547
+ <i
548
+ aria-hidden="true"
549
+ class="list ul icon"
550
+ />
551
+ </div>
552
+ <div
553
+ class="disabled icon item"
554
+ >
555
+ <i
556
+ aria-hidden="true"
557
+ class="linkify icon"
558
+ />
559
+ </div>
560
+ </div>
561
+ <div
562
+ style="padding: 10px;"
563
+ >
564
+ <div
565
+ autocorrect="on"
566
+ contenteditable="true"
567
+ data-gramm="false"
568
+ data-key="0"
569
+ data-slate-editor="true"
570
+ role="textbox"
571
+ spellcheck="true"
572
+ style="outline: none; white-space: pre-wrap; word-wrap: break-word;"
573
+ >
574
+ <div
575
+ data-key="1"
576
+ data-slate-object="block"
577
+ style="position: relative;"
578
+ >
579
+ <span
580
+ data-key="4"
581
+ data-slate-object="text"
582
+ >
583
+ <span
584
+ data-offset-key="4:0"
585
+ data-slate-leaf="true"
586
+ >
587
+ <span>
588
+ <span
589
+ contenteditable="false"
590
+ style="pointer-events: none; display: inline-block; width: 0px; max-width: 100%; white-space: nowrap; opacity: 0.333; vertical-align: text-top;"
591
+ />
592
+ <span
593
+ data-slate-length="0"
594
+ data-slate-zero-width="n"
595
+ >
596
+ 
597
+ <br />
598
+ </span>
599
+ </span>
600
+ </span>
601
+ </span>
602
+ </div>
603
+ </div>
604
+ </div>
605
+ </div>
606
+ </div>
607
+ </div>
608
+ <div
609
+ class="actions"
610
+ >
611
+ <a
612
+ class="ui secondary button"
613
+ href="/"
614
+ role="button"
615
+ >
616
+ Cancel
617
+ </a>
618
+ <button
619
+ class="ui primary disabled button"
620
+ disabled=""
621
+ tabindex="-1"
622
+ >
623
+ Create
624
+ </button>
625
+ </div>
626
+ </form>
627
+ </div>
628
+ </div>
180
629
  `;