wcc-contentful-app 0.3.0.pre.rc → 1.0.0.pre.rc1

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.
Files changed (94) hide show
  1. checksums.yaml +5 -5
  2. data/.rspec +2 -1
  3. data/Guardfile +1 -0
  4. data/README.md +11 -0
  5. data/Rakefile +121 -0
  6. data/app/assets/config/manifest.js +5 -0
  7. data/app/assets/images/down-arrow-primary.svg +3 -0
  8. data/app/assets/images/up-arrow-primary.svg +3 -0
  9. data/app/assets/javascripts/wcc/contentful/app/contact-form.js +70 -0
  10. data/app/assets/javascripts/wcc/contentful/app/index.js +1 -0
  11. data/app/assets/stylesheets/_wcc-contentful-app.scss +7 -0
  12. data/app/assets/stylesheets/components/_menu-item.scss +5 -0
  13. data/app/assets/stylesheets/sections/_faq.scss +39 -0
  14. data/app/controllers/wcc/contentful/app/contact_form_controller.rb +39 -0
  15. data/app/controllers/wcc/contentful/app/pages_controller.rb +48 -0
  16. data/app/helpers/wcc/contentful/app/menu_helper.rb +85 -0
  17. data/app/helpers/wcc/contentful/app/section_helper.rb +135 -0
  18. data/app/mailers/wcc/contentful/app/contact_mailer.rb +11 -0
  19. data/app/models/concerns/wcc/contentful/app/preview_password.rb +19 -0
  20. data/app/models/wcc/contentful/app/contact_form_submission.rb +9 -0
  21. data/app/models/wcc/contentful/app/custom_markdown_render.rb +43 -0
  22. data/app/views/components/_faq_row.html.erb +21 -0
  23. data/app/views/components/_menu-item.html.erb +41 -0
  24. data/app/views/components/_other-menu-item.html.erb +4 -0
  25. data/app/views/components/_section.html.erb +11 -0
  26. data/app/views/layouts/mailer.html.erb +9 -0
  27. data/app/views/layouts/mailer.text.erb +1 -0
  28. data/app/views/pages/show.html.erb +4 -0
  29. data/app/views/sections/_block_text.html.erb +5 -0
  30. data/app/views/sections/_code_widget.html.erb +3 -0
  31. data/app/views/sections/_contact_form.html.erb +53 -0
  32. data/app/views/sections/_faq.html.erb +36 -0
  33. data/app/views/sections/_http_error.html.erb +13 -0
  34. data/app/views/sections/_marquee_text.html.erb +12 -0
  35. data/app/views/sections/_testimonials.html.erb +38 -0
  36. data/app/views/sections/_video.html.erb +12 -0
  37. data/app/views/sections/_video_highlight.html.erb +18 -0
  38. data/app/views/wcc/contentful/app/contact_mailer/contact_form_email.html.erb +7 -0
  39. data/bin/rails +14 -0
  40. data/config/routes.rb +7 -0
  41. data/lib/generators/wcc/model_generator.rb +16 -6
  42. data/lib/generators/wcc/templates/menu/migrations/generated_add_menus.ts +285 -0
  43. data/lib/generators/wcc/templates/menu/models/dropdown_menu.rb +19 -0
  44. data/lib/generators/wcc/templates/menu/models/menu.rb +0 -4
  45. data/lib/generators/wcc/templates/menu/models/menu_button.rb +0 -4
  46. data/lib/generators/wcc/templates/page/migrations/generated_add_pages.ts +147 -0
  47. data/lib/generators/wcc/templates/page/models/page.rb +0 -4
  48. data/lib/generators/wcc/templates/page/models/redirect.rb +19 -0
  49. data/lib/generators/wcc/templates/section-block-text/migrations/generated_add_section-block-texts.ts +40 -0
  50. data/lib/generators/wcc/templates/section-block-text/models/section_block_text.rb +19 -0
  51. data/lib/generators/wcc/templates/section-code-widget/migrations/generated_add_section-code-widget.ts +90 -0
  52. data/lib/generators/wcc/templates/section-code-widget/models/section_code_widget.rb +23 -0
  53. data/lib/generators/wcc/templates/section-contact-form/migrations/create_wcc_contentful_app_contact_form_submissions.rb +12 -0
  54. data/lib/generators/wcc/templates/section-contact-form/migrations/generated_add_section-contact-forms.ts +147 -0
  55. data/lib/generators/wcc/templates/section-contact-form/models/form_field.rb +19 -0
  56. data/lib/generators/wcc/templates/section-contact-form/models/section_contact_form.rb +19 -0
  57. data/lib/generators/wcc/templates/section-faq/migrations/generated_add_section-faqs.ts +148 -0
  58. data/lib/generators/wcc/templates/section-faq/models/section_faq.rb +19 -0
  59. data/lib/generators/wcc/templates/section-http-error/migrations/generated_add_section-http-errors.ts +87 -0
  60. data/lib/generators/wcc/templates/section-http-error/models/section_http_error.rb +19 -0
  61. data/lib/generators/wcc/templates/section-marquee-text/migrations/generated_add_section-marquee-texts.ts +64 -0
  62. data/lib/generators/wcc/templates/section-marquee-text/models/section_marquee_text.rb +19 -0
  63. data/lib/generators/wcc/templates/section-testimonial/migrations/generated_add_section-testimonials.ts +182 -0
  64. data/lib/generators/wcc/templates/section-testimonial/models/section_testimonial.rb +19 -0
  65. data/lib/generators/wcc/templates/section-video-highlight/migrations/generated_add_section-video-highlights.ts +80 -0
  66. data/lib/generators/wcc/templates/section-video-highlight/models/section_video_highlight.rb +19 -0
  67. data/lib/generators/wcc/templates/section-video/migrations/generated_add_section-videos.ts +77 -0
  68. data/lib/generators/wcc/templates/section-video/models/section_video.rb +19 -0
  69. data/lib/generators/wcc/templates/site-config/migrations/generated_add_site-configs.ts +97 -0
  70. data/lib/generators/wcc/templates/site-config/models/site_config.rb +19 -0
  71. data/lib/generators/wcc/templates/wcc_contentful.rb +1 -1
  72. data/lib/wcc/contentful/app.rb +48 -3
  73. data/lib/wcc/contentful/app/configuration.rb +60 -0
  74. data/lib/wcc/contentful/app/engine.rb +15 -0
  75. data/lib/wcc/contentful/app/exceptions.rb +9 -0
  76. data/lib/wcc/contentful/app/rails.rb +6 -0
  77. data/lib/wcc/contentful/app/version.rb +1 -1
  78. data/lib/wcc/contentful/model/dropdown_menu.rb +0 -3
  79. data/lib/wcc/contentful/model/form_field.rb +4 -0
  80. data/lib/wcc/contentful/model/menu.rb +0 -2
  81. data/lib/wcc/contentful/model/menu_button.rb +18 -5
  82. data/lib/wcc/contentful/model/page.rb +0 -4
  83. data/lib/wcc/contentful/model/redirect.rb +21 -11
  84. data/lib/wcc/contentful/model/section_contact_form.rb +42 -0
  85. data/lib/wcc/contentful/model/site_config.rb +7 -0
  86. data/wcc-contentful-app.gemspec +19 -20
  87. metadata +172 -124
  88. data/Gemfile +0 -10
  89. data/lib/generators/wcc/templates/menu/generated_add_menus.ts +0 -192
  90. data/lib/generators/wcc/templates/page/generated_add_pages.ts +0 -50
  91. data/lib/tasks/validate.rake +0 -20
  92. data/lib/wcc/contentful/app/model_validators.rb +0 -121
  93. data/lib/wcc/contentful/app/model_validators/dsl.rb +0 -166
  94. data/lib/wcc/contentful/ext/model.rb +0 -5
@@ -4,10 +4,6 @@
4
4
  # entries of the 'menu' content type will be resolved as instances of this class.
5
5
  # It exposes #find, #find_by, and #find_all methods to query Contentful.
6
6
  class Menu < WCC::Contentful::Model::Menu
7
- # Add custom validations to ensure that app-specific properties exist:
8
- # validate_field :foo, :String, :required
9
- # validate_field :bar_links, :Array, link_to: %w[bar baz]
10
-
11
7
  # Override functionality or add utilities
12
8
  #
13
9
  # # Example: override equality
@@ -4,10 +4,6 @@
4
4
  # entries of the 'menuButton' content type will be resolved as instances of this class.
5
5
  # It exposes #find, #find_by, and #find_all methods to query Contentful.
6
6
  class MenuButton < WCC::Contentful::Model::MenuButton
7
- # Add custom validations to ensure that app-specific properties exist:
8
- # validate_field :foo, :String, :required
9
- # validate_field :bar_links, :Array, link_to: %w[bar baz]
10
-
11
7
  # Override functionality or add utilities
12
8
  #
13
9
  # # Example: override equality
@@ -0,0 +1,147 @@
1
+ import Migration from '@watermarkchurch/contentful-migration'
2
+
3
+ export = function (migration: Migration) {
4
+ const page = migration.createContentType('page')
5
+ .name('Page')
6
+ .description('A page describes a collection of sections that correspond' +
7
+ 'to a URL slug')
8
+ .displayField('internalTitle')
9
+
10
+ page.createField('internalTitle', {
11
+ name: 'Internal Title (Contentful Only)',
12
+ type: 'Symbol',
13
+ localized: false,
14
+ required: true,
15
+ validations: [],
16
+ disabled: false,
17
+ omitted: true,
18
+ })
19
+
20
+ page.createField('title')
21
+ .name('Title')
22
+ .type('Symbol')
23
+ .required(true)
24
+
25
+ page.createField('slug')
26
+ .name('Slug')
27
+ .type('Symbol')
28
+ .required(true)
29
+ .validations([
30
+ {
31
+ unique: true
32
+ },
33
+ {
34
+ regexp: { pattern: "(\\/|\\/([\w#!:.?+=&%@!\\-\\/]))?$" },
35
+ message: "The slug must look like the path part of a URL and begin with a forward slash, example: '/my-page-slug'"
36
+ }
37
+ ])
38
+
39
+ page.createField('sections')
40
+ .name('Sections')
41
+ .type('Array')
42
+ .items({
43
+ type: 'Link',
44
+ linkType: 'Entry'
45
+ })
46
+
47
+ page.createField('subpages')
48
+ .name('Subpages')
49
+ .type('Array')
50
+ .items({
51
+ type: 'Link',
52
+ linkType: 'Entry',
53
+ validations: [
54
+ {
55
+ linkContentType: [ 'page' ]
56
+ }
57
+ ]
58
+ })
59
+
60
+ /************ redirect ******************/
61
+
62
+ var redirect = migration.createContentType('redirect', {
63
+ displayField: 'internalTitle',
64
+ name: 'Redirect',
65
+ description: ''
66
+ })
67
+
68
+ redirect.createField('internalTitle', {
69
+ name: 'Internal Title (Contentful Only)',
70
+ type: 'Symbol',
71
+ localized: false,
72
+ required: true,
73
+ validations: [],
74
+ disabled: false,
75
+ omitted: true,
76
+ })
77
+
78
+ redirect.createField('slug', {
79
+ name: 'Slug',
80
+ type: 'Symbol',
81
+ localized: false,
82
+ required: true,
83
+ validations:
84
+ [{ unique: true },
85
+ {
86
+ regexp:
87
+ {
88
+ pattern: '\\/(?:[\\w#!:.?+=&%@!\\-]\\/?)*$',
89
+ flags: null
90
+ },
91
+ message: 'The slug must look like the path part of a URL and begin with a forward slash, example: \'/my-page-slug\''
92
+ }],
93
+ disabled: false,
94
+ omitted: false
95
+ })
96
+
97
+ redirect.createField('externalLink', {
98
+ name: 'External Link',
99
+ type: 'Symbol',
100
+ localized: false,
101
+ required: false,
102
+ validations:
103
+ [{
104
+ regexp:
105
+ {
106
+ pattern: '^([^\\s\\:]+):(\\/\\/)?(\\w+:{0,1}\\w*@)?(([^\\s\\/#]+\\.)+[^\\s\\/#]+)(:[0-9]+)?(\\/|(\\/|\\#)([\\w#!:.?+=&%@!\\-\\/]+))?$|^(\\/|(\\/|\\#)([\\w#!:.?+=&%@!\\-\\/]+))$',
107
+ flags: null
108
+ },
109
+ message: 'The external link must be a URL like \'https://www.watermark.org/\', a mailto url like \'mailto:info@watermark.org\', or a relative URL like \'#location-on-page\''
110
+ }],
111
+ disabled: false,
112
+ omitted: false
113
+ })
114
+
115
+ redirect.createField('pageLink', {
116
+ name: 'Page Link',
117
+ type: 'Link',
118
+ localized: false,
119
+ required: false,
120
+ validations: [{ linkContentType: ['page'] }],
121
+ disabled: false,
122
+ omitted: false,
123
+ linkType: 'Entry'
124
+ })
125
+
126
+ redirect.createField('sectionLink', {
127
+ name: 'Section Link',
128
+ type: 'Link',
129
+ localized: false,
130
+ required: false,
131
+ validations: [],
132
+ disabled: false,
133
+ omitted: false,
134
+ linkType: 'Entry'
135
+ })
136
+
137
+ redirect.changeEditorInterface('internalTitle', 'singleLine')
138
+
139
+ redirect.changeEditorInterface('slug', 'slugEditor')
140
+
141
+ redirect.changeEditorInterface('externalLink', 'urlEditor', { helpText: 'An external URL to send people to, that is not a page on this site. Use this OR Page Link, you can\'t use both.' })
142
+
143
+ redirect.changeEditorInterface('pageLink', 'entryCardEditor', { helpText: 'A page on this site to send people to. Use this OR External Link, you can\'t use both.' })
144
+
145
+ redirect.changeEditorInterface('sectionLink', 'entryLinkEditor', { helpText: '(Optional) If provided, this will link the user to the specific section on a page. If you use this, you must also use Page Link.' })
146
+
147
+ }
@@ -4,10 +4,6 @@
4
4
  # entries of the 'page' content type will be resolved as instances of this class.
5
5
  # It exposes #find, #find_by, and #find_all methods to query Contentful.
6
6
  class Page < WCC::Contentful::Model::Page
7
- # Add custom validations to ensure that app-specific properties exist:
8
- # validate_field :foo, :String, :required
9
- # validate_field :bar_links, :Array, link_to: %w[bar baz]
10
-
11
7
  # Override functionality or add utilities
12
8
  #
13
9
  # # Example: override equality
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This model represents the 'redirect' content type in Contentful. Any linked
4
+ # entries of the 'redirect' content type will be resolved as instances of this class.
5
+ # It exposes .find, .find_by, and .find_all methods to query Contentful.
6
+ class Redirect < WCC::Contentful::Model::Redirect
7
+ # Override functionality or add utilities
8
+ #
9
+ # # Example: override equality
10
+ # def ===(other)
11
+ # ...
12
+ # end
13
+ #
14
+ # # Example: override "title" attribute to always be titlecase.
15
+ # # `@title` is populated by the gem in the initializer.
16
+ # def title
17
+ # @title_titlecased ||= @title.titlecase
18
+ # end
19
+ end
@@ -0,0 +1,40 @@
1
+ import Migration, { MigrationFunction } from '@watermarkchurch/contentful-migration'
2
+
3
+ // Generated by contentful-schema-diff
4
+ // from empty-export.json
5
+ // to 7yx6ovlj39n5
6
+ export = function(migration : Migration, { makeRequest, spaceId, accessToken }) {
7
+
8
+ /************ section-block-text ******************/
9
+
10
+ var sectionBlockText = migration.createContentType('section-block-text', {
11
+ displayField: 'internalTitle',
12
+ name: 'Section: Block Text',
13
+ description: 'Markdown free-text block'
14
+ })
15
+
16
+ sectionBlockText.createField('internalTitle', {
17
+ name: 'Internal Title (Contentful Only)',
18
+ type: 'Symbol',
19
+ localized: false,
20
+ required: true,
21
+ validations: [],
22
+ disabled: false,
23
+ omitted: true
24
+ })
25
+
26
+ sectionBlockText.createField('body', {
27
+ name: 'Body',
28
+ type: 'Text',
29
+ localized: false,
30
+ required: true,
31
+ validations: [],
32
+ disabled: false,
33
+ omitted: false
34
+ })
35
+
36
+ sectionBlockText.changeEditorInterface('internalTitle', 'singleLine')
37
+
38
+ sectionBlockText.changeEditorInterface('body', 'markdown')
39
+
40
+ } as MigrationFunction
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This model represents the 'section-block-text' content type in Contentful. Any linked
4
+ # entries of the 'section-block-text' content type will be resolved as instances of this class.
5
+ # It exposes .find, .find_by, and .find_all methods to query Contentful.
6
+ class SectionBlockText < WCC::Contentful::Model::SectionBlockText
7
+ # Override functionality or add utilities
8
+ #
9
+ # # Example: override equality
10
+ # def ===(other)
11
+ # ...
12
+ # end
13
+ #
14
+ # # Example: override "title" attribute to always be titlecase.
15
+ # # `@title` is populated by the gem in the initializer.
16
+ # def title
17
+ # @title_titlecased ||= @title.titlecase
18
+ # end
19
+ end
@@ -0,0 +1,90 @@
1
+ import Migration, { MigrationFunction } from '@watermarkchurch/contentful-migration'
2
+
3
+ export = function(migration: Migration, { makeRequest, spaceId, accessToken }) {
4
+
5
+ const sectionCodeWidget = migration.createContentType('section-code-widget', {
6
+ displayField:
7
+ 'internalTitle',
8
+ name:
9
+ 'Section: Code Widget',
10
+ description:
11
+ 'Render code defined section views from JSON parameters.',
12
+ })
13
+
14
+ sectionCodeWidget.createField('internalTitle', {
15
+ name:
16
+ 'Internal Title',
17
+ type:
18
+ 'Symbol',
19
+ localized:
20
+ false,
21
+ required:
22
+ true,
23
+ validations:
24
+ [],
25
+ disabled:
26
+ false,
27
+ omitted:
28
+ true,
29
+ })
30
+
31
+ sectionCodeWidget.createField('view', {
32
+ name:
33
+ 'View',
34
+ type:
35
+ 'Symbol',
36
+ localized:
37
+ false,
38
+ required:
39
+ true,
40
+ validations:
41
+ [],
42
+ disabled:
43
+ false,
44
+ omitted:
45
+ false,
46
+ })
47
+
48
+ sectionCodeWidget.createField('parameters', {
49
+ name:
50
+ 'Parameters',
51
+ type:
52
+ 'Object',
53
+ localized:
54
+ false,
55
+ required:
56
+ false,
57
+ validations:
58
+ [],
59
+ disabled:
60
+ false,
61
+ omitted:
62
+ false,
63
+ })
64
+
65
+ sectionCodeWidget.createField('bookmarkTitle', {
66
+ name:
67
+ 'Bookmark Title',
68
+ type:
69
+ 'Symbol',
70
+ localized:
71
+ false,
72
+ required:
73
+ false,
74
+ validations:
75
+ [],
76
+ disabled:
77
+ false,
78
+ omitted:
79
+ false,
80
+ })
81
+
82
+ sectionCodeWidget.changeEditorInterface('internalTitle', 'singleLine')
83
+
84
+ sectionCodeWidget.changeEditorInterface('view', 'dropdown')
85
+
86
+ sectionCodeWidget.changeEditorInterface('parameters', 'objectEditor', { helpText: 'These parameters may or may not be required by the code widget. Inspect the ruby code to see what to put here.' })
87
+
88
+ sectionCodeWidget.changeEditorInterface('bookmarkTitle', 'singleLine')
89
+
90
+ } as MigrationFunction
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This model represents the 'section-code-widget' content type in Contentful. Any linked
4
+ # entries of the 'section-code-widget' content type will be resolved as instances of this class.
5
+ # It exposes .find, .find_by, and .find_all methods to query Contentful.
6
+ class SectionCodeWidget < WCC::Contentful::Model::SectionCodeWidget
7
+ # Add custom validations to ensure that app-specific properties exist:
8
+ # validate_field :foo, :String, :required
9
+ # validate_field :bar_links, :Array, link_to: %w[bar baz]
10
+
11
+ # Override functionality or add utilities
12
+ #
13
+ # # Example: override equality
14
+ # def ===(other)
15
+ # ...
16
+ # end
17
+ #
18
+ # # Example: override "title" attribute to always be titlecase.
19
+ # # `@title` is populated by the gem in the initializer.
20
+ # def title
21
+ # @title_titlecased ||= @title.titlecase
22
+ # end
23
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateWCCContentfulAppContactFormSubmissions < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :wcc_contentful_app_contact_form_submissions do |t|
6
+ t.string :form_id
7
+ t.json :data, default: {}
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,147 @@
1
+ import Migration, { MigrationFunction } from '@watermarkchurch/contentful-migration'
2
+
3
+ // Generated by contentful-schema-diff
4
+ // from contentful-export-4gyidsb2jx1u-rorJeremy-2018-10-18T15-41-43.json
5
+ // to 7yx6ovlj39n5/master
6
+ export = function (migration: Migration, { makeRequest, spaceId, accessToken }) {
7
+
8
+ /************ section-contact-form ******************/
9
+
10
+ var sectionContactForm = migration.createContentType('section-contact-form', {
11
+ displayField: 'internalTitle',
12
+ name: 'Section: Contact Form',
13
+ description:
14
+ 'A Contact Form section contains a Form with several Form Fields. The responses to the form will be collected and provided to the appropriate administrator.'
15
+ })
16
+
17
+ sectionContactForm.createField('internalTitle', {
18
+ name: 'Internal Title (Contentful Only)',
19
+ type: 'Symbol',
20
+ localized: false,
21
+ required: true,
22
+ validations: [],
23
+ disabled: false,
24
+ omitted: false
25
+ })
26
+
27
+ sectionContactForm.createField('text', {
28
+ name: 'Text',
29
+ type: 'Text',
30
+ localized: false,
31
+ required: true,
32
+ validations: [],
33
+ disabled: false,
34
+ omitted: false
35
+ })
36
+
37
+ sectionContactForm.createField('fields', {
38
+ name: 'Fields',
39
+ type: 'Array',
40
+ localized: false,
41
+ required: true,
42
+ validations: [],
43
+ disabled: false,
44
+ omitted: false,
45
+ items: {
46
+ type: 'Link',
47
+ validations: [
48
+ {
49
+ linkContentType: ['formField']
50
+ }
51
+ ],
52
+ linkType: 'Entry'
53
+ }
54
+ })
55
+
56
+ sectionContactForm.createField('submitButtonText', {
57
+ name: 'Submit Button Text',
58
+ type: 'Symbol',
59
+ localized: false,
60
+ required: false,
61
+ validations: [],
62
+ disabled: false,
63
+ omitted: false
64
+ })
65
+
66
+ sectionContactForm.createField('notificationEmail', {
67
+ name: 'NotificationEmail',
68
+ type: 'Symbol',
69
+ localized: false,
70
+ required: true,
71
+ validations: [
72
+ {
73
+ regexp: {
74
+ pattern:
75
+ '^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$',
76
+ flags: null
77
+ },
78
+ message: 'Must be a valid email address.'
79
+ }
80
+ ],
81
+ disabled: false,
82
+ omitted: false
83
+ })
84
+
85
+ sectionContactForm.changeEditorInterface('internalTitle', 'singleLine')
86
+
87
+ sectionContactForm.changeEditorInterface('text', 'markdown')
88
+
89
+ sectionContactForm.changeEditorInterface('fields', 'entryLinksEditor')
90
+
91
+ sectionContactForm.changeEditorInterface('submitButtonText', 'singleLine')
92
+
93
+ sectionContactForm.changeEditorInterface('notificationEmail', 'singleLine', {
94
+ helpText:
95
+ 'This is the email address where the form submission notification goes.'
96
+ })
97
+
98
+ /************ formField ******************/
99
+
100
+ var formfield = migration.createContentType('formField', {
101
+ displayField: 'internalTitle',
102
+ name: 'Form Field',
103
+ description: 'A Form Field represents a piece of information you want to collect from a user via a Form.'
104
+ })
105
+
106
+ formfield.createField('internalTitle', {
107
+ name: 'Internal Title (Contentful Only)',
108
+ type: 'Symbol',
109
+ localized: false,
110
+ required: true,
111
+ validations: [],
112
+ disabled: false,
113
+ omitted: true
114
+ })
115
+
116
+ formfield.createField('title', {
117
+ name: 'Title',
118
+ type: 'Symbol',
119
+ localized: false,
120
+ required: false,
121
+ validations: [],
122
+ disabled: false,
123
+ omitted: false
124
+ })
125
+
126
+ formfield.createField('inputType', {
127
+ name: 'Input Type',
128
+ type: 'Symbol',
129
+ localized: false,
130
+ required: true,
131
+ validations:
132
+ [{
133
+ in:
134
+ ['text',
135
+ 'email',
136
+ 'textarea']
137
+ }],
138
+ disabled: false,
139
+ omitted: false
140
+ })
141
+
142
+ formfield.changeEditorInterface('title', 'singleLine')
143
+
144
+ formfield.changeEditorInterface('inputType', 'radio')
145
+
146
+ formfield.changeEditorInterface('internalTitle', 'singleLine')
147
+ } as MigrationFunction