inertia_rails-contrib 0.2.2 → 0.3.0

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -1
  3. data/README.md +3 -2
  4. data/lib/generators/inertia/install/frameworks.yml +28 -3
  5. data/lib/generators/inertia/install/install_generator.rb +6 -2
  6. data/lib/generators/inertia/install/templates/react/inertia.ts +4 -4
  7. data/lib/generators/inertia/install/templates/svelte/InertiaExample.svelte +3 -7
  8. data/lib/generators/inertia/install/templates/svelte/InertiaExample.ts.svelte +3 -7
  9. data/lib/generators/inertia/install/templates/svelte/inertia.js +3 -2
  10. data/lib/generators/inertia/install/templates/svelte/inertia.ts +7 -9
  11. data/lib/generators/inertia/install/templates/svelte4/InertiaExample.svelte +116 -0
  12. data/lib/generators/inertia/install/templates/svelte4/InertiaExample.ts.svelte +116 -0
  13. data/lib/generators/inertia/install/templates/svelte4/inertia.js +29 -0
  14. data/lib/generators/inertia/install/templates/svelte4/inertia.ts +29 -0
  15. data/lib/generators/inertia/install/templates/svelte4/svelte.config.js +7 -0
  16. data/lib/generators/inertia/install/templates/svelte4/tsconfig.json +21 -0
  17. data/lib/generators/inertia/install/templates/svelte4/tsconfig.node.json +12 -0
  18. data/lib/generators/inertia/install/templates/svelte4/vite-env.d.ts +2 -0
  19. data/lib/generators/inertia/install/templates/vue/inertia.ts +3 -3
  20. data/lib/generators/inertia_templates/controller/templates/svelte4/view.svelte.tt +2 -0
  21. data/lib/generators/inertia_templates/scaffold/templates/react/Form.jsx.tt +2 -2
  22. data/lib/generators/inertia_templates/scaffold/templates/svelte/Edit.svelte.tt +3 -4
  23. data/lib/generators/inertia_templates/scaffold/templates/svelte/Form.svelte.tt +12 -10
  24. data/lib/generators/inertia_templates/scaffold/templates/svelte/Index.svelte.tt +1 -8
  25. data/lib/generators/inertia_templates/scaffold/templates/svelte/New.svelte.tt +3 -4
  26. data/lib/generators/inertia_templates/scaffold/templates/svelte/One.svelte.tt +1 -1
  27. data/lib/generators/inertia_templates/scaffold/templates/svelte/Show.svelte.tt +4 -9
  28. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Edit.svelte.tt +37 -0
  29. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Form.svelte.tt +96 -0
  30. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Index.svelte.tt +36 -0
  31. data/lib/generators/inertia_templates/scaffold/templates/svelte4/New.svelte.tt +30 -0
  32. data/lib/generators/inertia_templates/scaffold/templates/svelte4/One.svelte.tt +28 -0
  33. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Show.svelte.tt +46 -0
  34. data/lib/generators/inertia_templates/scaffold/templates/vue/Form.vue.tt +1 -1
  35. data/lib/generators/inertia_tw_templates/controller/templates/svelte4/view.svelte.tt +2 -0
  36. data/lib/generators/inertia_tw_templates/scaffold/templates/react/Form.jsx.tt +2 -2
  37. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Edit.svelte.tt +3 -4
  38. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Form.svelte.tt +12 -13
  39. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Index.svelte.tt +1 -8
  40. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/New.svelte.tt +3 -4
  41. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/One.svelte.tt +1 -1
  42. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Show.svelte.tt +7 -8
  43. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Edit.svelte.tt +45 -0
  44. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Form.svelte.tt +120 -0
  45. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Index.svelte.tt +43 -0
  46. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/New.svelte.tt +33 -0
  47. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/One.svelte.tt +28 -0
  48. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Show.svelte.tt +58 -0
  49. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/Form.vue.tt +2 -2
  50. data/lib/inertia_rails_contrib/generators_helper.rb +4 -3
  51. data/lib/inertia_rails_contrib/version.rb +1 -1
  52. metadata +24 -2
@@ -0,0 +1,120 @@
1
+ <script>
2
+ import { useForm } from '@inertiajs/svelte'
3
+ import { createEventDispatcher } from 'svelte'
4
+
5
+ const dispatch = createEventDispatcher()
6
+
7
+ export let <%= singular_table_name %>
8
+ export let submitText
9
+
10
+ const form = useForm({
11
+ <% attributes.each do |attribute| -%>
12
+ <% if attribute.password_digest? -%>
13
+ password: '',
14
+ password_confirmation: '',
15
+ <% else -%>
16
+ <%= attribute.column_name %>: <%= singular_table_name %>.<%= attribute.column_name %> || <%= default_value(attribute) %>,
17
+ <% end -%>
18
+ <% end -%>
19
+ })
20
+ </script>
21
+
22
+ <form
23
+ class="contents"
24
+ on:submit|preventDefault={dispatch('submit', { form: $form })}
25
+ >
26
+ <% attributes.each do |attribute| -%>
27
+ <div class="my-5">
28
+ <% if attribute.password_digest? -%>
29
+ <label for="password">Password</label>
30
+ <input
31
+ type="password"
32
+ name="password"
33
+ id="password"
34
+ bind:value={$form.password}
35
+ class="block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full"
36
+ />
37
+ {#if $form.errors.password}
38
+ <div class="text-red-500 px-3 py-2 font-medium">
39
+ {$form.errors.password.join(', ')}
40
+ </div>
41
+ {/if}
42
+ </div>
43
+
44
+ <div class="my-5">
45
+ <label for="password_confirmation">Password Confirmation</label>
46
+ <input
47
+ type="password"
48
+ name="password_confirmation"
49
+ id="password_confirmation"
50
+ bind:value={$form.password_confirmation}
51
+ class="block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full"
52
+ />
53
+ {#if $form.errors.password_confirmation}
54
+ <div class="text-red-500 px-3 py-2 font-medium">
55
+ {$form.errors.password_confirmation.join(', ')}
56
+ </div>
57
+ {/if}
58
+ <% else -%>
59
+ <label for="<%= attribute.singular_name %>"><%= attribute.human_name %></label>
60
+ <% if input_type(attribute) == "text_area" -%>
61
+ <textarea
62
+ name="<%= attribute.singular_name %>"
63
+ id="<%= attribute.singular_name %>"
64
+ bind:value={$form.<%= attribute.column_name %>}
65
+ rows="4"
66
+ class="block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full"
67
+ />
68
+ <% elsif attribute.attachment? -%>
69
+ <input
70
+ type="file"
71
+ name="<%= attribute.singular_name %>"
72
+ id="<%= attribute.singular_name %>"
73
+ on:input={(e) => ($form.<%= attribute.column_name %> = e.target.files[0])}
74
+ class="block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full"
75
+ />
76
+ <% elsif attribute.attachments? -%>
77
+ <input
78
+ type="file"
79
+ multiple
80
+ name="<%= attribute.singular_name %>[]"
81
+ id="<%= attribute.singular_name %>"
82
+ on:input={(e) => ($form.<%= attribute.column_name %> = Array.from(e.target.files))}
83
+ class="block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full"
84
+ />
85
+ <% elsif input_type(attribute) == "checkbox" -%>
86
+ <input
87
+ type="<%= input_type(attribute) %>"
88
+ name="<%= attribute.singular_name %>"
89
+ id="<%= attribute.singular_name %>"
90
+ bind:checked={$form.<%= attribute.column_name %>}
91
+ class="block mt-2 h-5 w-5"
92
+ />
93
+ <% else -%>
94
+ <input
95
+ type="<%= input_type(attribute) %>"
96
+ name="<%= attribute.singular_name %>"
97
+ id="<%= attribute.singular_name %>"
98
+ bind:value={$form.<%= attribute.column_name %>}
99
+ class="block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full"
100
+ />
101
+ <% end -%>
102
+ {#if $form.errors.<%= attribute.column_name %>}
103
+ <div class="text-red-500 px-3 py-2 font-medium">
104
+ {$form.errors.<%= attribute.column_name %>.join(', ')}
105
+ </div>
106
+ {/if}
107
+ <% end -%>
108
+ </div>
109
+
110
+ <% end -%>
111
+ <div class="inline">
112
+ <button
113
+ type="submit"
114
+ disabled={$form.processing}
115
+ class="rounded-lg py-3 px-5 bg-blue-600 text-white inline-block font-medium cursor-pointer"
116
+ >
117
+ {submitText}
118
+ </button>
119
+ </div>
120
+ </form>
@@ -0,0 +1,43 @@
1
+ <script>
2
+ import { Link } from '@inertiajs/svelte'
3
+ import <%= inertia_component_name %> from './<%= inertia_component_name %>.svelte'
4
+
5
+ export let <%= plural_table_name %>
6
+ export let flash
7
+ </script>
8
+
9
+ <svelte:head>
10
+ <title><%= human_name.pluralize %></title>
11
+ </svelte:head>
12
+
13
+ <div class="mx-auto md:w-2/3 w-full px-8 pt-8">
14
+ {#if flash.notice}
15
+ <p class="py-2 px-3 bg-green-50 mb-5 text-green-500 font-medium rounded-lg inline-block">
16
+ {flash.notice}
17
+ </p>
18
+ {/if}
19
+
20
+ <div class="flex justify-between items-center">
21
+ <h1 class="font-bold text-4xl"><%= human_name.pluralize %></h1>
22
+ <Link
23
+ href="<%= js_new_resource_path %>"
24
+ class="rounded-lg py-3 px-5 bg-blue-600 text-white block font-medium"
25
+ >
26
+ New <%= human_name.downcase %>
27
+ </Link>
28
+ </div>
29
+
30
+ <div class="min-w-full">
31
+ {#each <%= plural_table_name %> as <%= singular_table_name %> (<%= singular_table_name %>.id)}
32
+ <<%= inertia_component_name %> {<%= singular_table_name %>} />
33
+ <p>
34
+ <Link
35
+ href={`<%= js_resource_path %>`}
36
+ class="ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium"
37
+ >
38
+ Show this <%= human_name.downcase %>
39
+ </Link>
40
+ </p>
41
+ {/each}
42
+ </div>
43
+ </div>
@@ -0,0 +1,33 @@
1
+ <script>
2
+ import { Link } from '@inertiajs/svelte'
3
+ import Form from './Form.svelte'
4
+
5
+ export let <%= singular_table_name %>
6
+
7
+ const handleSubmit = (e) => {
8
+ const { form } = e.detail
9
+ form.transform((data) => ({ <%= singular_table_name %>: data }))
10
+ form.post('<%= js_resources_path %>')
11
+ }
12
+ </script>
13
+
14
+ <svelte:head>
15
+ <title>New <%= human_name.downcase %></title>
16
+ </svelte:head>
17
+
18
+ <div class="mx-auto md:w-2/3 w-full px-8 pt-8">
19
+ <h1 class="font-bold text-4xl">New <%= human_name.downcase %></h1>
20
+
21
+ <Form
22
+ {<%= singular_table_name %>}
23
+ submitText="Create <%= human_name.downcase %>"
24
+ on:submit={handleSubmit}
25
+ />
26
+
27
+ <Link
28
+ href="<%= js_resources_path %>"
29
+ class="ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium"
30
+ >
31
+ Back to <%= human_name.pluralize.downcase %>
32
+ </Link>
33
+ </div>
@@ -0,0 +1,28 @@
1
+ <script>
2
+ export let <%= singular_table_name %>
3
+ </script>
4
+
5
+ <div>
6
+ <% attributes.reject(&:password_digest?).each do |attribute| -%>
7
+ <p class="my-5">
8
+ <strong class="block font-medium mb-1"><%= attribute.human_name %>:</strong>
9
+ <% if attribute.attachment? -%>
10
+ {#if <%= singular_table_name %>.<%= attribute.column_name %>}
11
+ <a href={<%= singular_table_name %>.<%= attribute.column_name %>.url}>
12
+ {<%= singular_table_name %>.<%= attribute.column_name %>.filename}
13
+ </a>
14
+ {/if}
15
+ </p>
16
+ <% elsif attribute.attachments? -%>
17
+ </p>
18
+ {#each <%= singular_table_name %>.<%= attribute.column_name %> as { url, filename }}
19
+ <div>
20
+ <a href={url}>{filename}</a>
21
+ </div>
22
+ {/each}
23
+ <% else -%>
24
+ {<%= singular_table_name %>.<%= attribute.column_name %>}
25
+ </p>
26
+ <% end -%>
27
+ <% end -%>
28
+ </div>
@@ -0,0 +1,58 @@
1
+ <script>
2
+ import { inertia, Link } from '@inertiajs/svelte'
3
+ import <%= inertia_component_name %> from './<%= inertia_component_name %>.svelte'
4
+
5
+ export let <%= singular_table_name %>
6
+ export let flash
7
+
8
+ const onDestroy = (e) => {
9
+ if (!confirm('Are you sure you want to delete this <%= human_name.downcase %>?')) {
10
+ e.preventDefault()
11
+ }
12
+ }
13
+ </script>
14
+
15
+ <svelte:head>
16
+ <title><%= human_name %> #{<%= singular_table_name %>.id}</title>
17
+ </svelte:head>
18
+
19
+ <div class="mx-auto md:w-2/3 w-full px-8 pt-8">
20
+ <div class="mx-auto">
21
+ {#if flash.notice}
22
+ <p class="py-2 px-3 bg-green-50 mb-5 text-green-500 font-medium rounded-lg inline-block">
23
+ {flash.notice}
24
+ </p>
25
+ {/if}
26
+
27
+ <h1 class="font-bold text-4xl"><%= human_name %> #{<%= singular_table_name %>.id}</h1>
28
+
29
+ <<%= inertia_component_name %> {<%= singular_table_name %>} />
30
+
31
+ <Link
32
+ href={`<%= js_edit_resource_path %>`}
33
+ class="ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium"
34
+ >
35
+ Edit this <%= human_name.downcase %>
36
+ </Link>
37
+ <Link
38
+ href="<%= js_resources_path %>"
39
+ class="ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium"
40
+ >
41
+ Back to <%= human_name.pluralize.downcase %>
42
+ </Link>
43
+ <div class="inline-block ml-2">
44
+ <button
45
+ use:inertia={{ href: `<%= js_resource_path %>`, method: 'delete' }}
46
+ on:click={onDestroy}
47
+ type="button"
48
+ class="mt-2 rounded-lg py-3 px-5 bg-gray-100 font-medium"
49
+ >
50
+ Destroy this <%= human_name.downcase %>
51
+ </button>
52
+ </div>
53
+ </div>
54
+ </div>
55
+
56
+
57
+
58
+
@@ -57,13 +57,13 @@
57
57
  <% elsif attribute.attachments? -%>
58
58
  <input
59
59
  type="file"
60
- multiple="multiple"
60
+ multiple
61
61
  name="<%= attribute.singular_name %>[]"
62
62
  id="<%= attribute.singular_name %>"
63
63
  @input="form.<%= attribute.column_name %> = Array.from($event.target.files)"
64
64
  class="block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full"
65
65
  />
66
- <% elsif attribute.field_type == :check_box -%>
66
+ <% elsif input_type(attribute) == "checkbox" -%>
67
67
  <input
68
68
  type="<%= input_type(attribute) %>"
69
69
  name="<%= attribute.singular_name %>"
@@ -1,15 +1,16 @@
1
1
  module InertiaRailsContrib
2
2
  module GeneratorsHelper
3
3
  def self.guess_the_default_framework
4
- case Rails.root.join("package.json").read
4
+ package = Rails.root.join("package.json").read
5
+ case package
5
6
  when /@inertiajs\/react/
6
7
  "react"
7
8
  when /@inertiajs\/svelte/
8
- "svelte"
9
+ package.match?(/"svelte": "\^5/) ? "svelte" : "svelte4"
9
10
  when /@inertiajs\/vue3/
10
11
  "vue"
11
12
  else
12
- say_error "Could not determine the Inertia.js framework you are using."
13
+ Thor::Shell::Basic.new.say_error "Could not determine the Inertia.js framework you are using."
13
14
  end
14
15
  end
15
16
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module InertiaRailsContrib
4
- VERSION = "0.2.2"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inertia_rails-contrib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Svyatoslav Kryukov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-09 00:00:00.000000000 Z
11
+ date: 2024-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -78,6 +78,14 @@ files:
78
78
  - lib/generators/inertia/install/templates/svelte/tsconfig.json
79
79
  - lib/generators/inertia/install/templates/svelte/tsconfig.node.json
80
80
  - lib/generators/inertia/install/templates/svelte/vite-env.d.ts
81
+ - lib/generators/inertia/install/templates/svelte4/InertiaExample.svelte
82
+ - lib/generators/inertia/install/templates/svelte4/InertiaExample.ts.svelte
83
+ - lib/generators/inertia/install/templates/svelte4/inertia.js
84
+ - lib/generators/inertia/install/templates/svelte4/inertia.ts
85
+ - lib/generators/inertia/install/templates/svelte4/svelte.config.js
86
+ - lib/generators/inertia/install/templates/svelte4/tsconfig.json
87
+ - lib/generators/inertia/install/templates/svelte4/tsconfig.node.json
88
+ - lib/generators/inertia/install/templates/svelte4/vite-env.d.ts
81
89
  - lib/generators/inertia/install/templates/tailwind/application.css
82
90
  - lib/generators/inertia/install/templates/tailwind/postcss.config.js
83
91
  - lib/generators/inertia/install/templates/tailwind/tailwind.config.js.tt
@@ -95,6 +103,7 @@ files:
95
103
  - lib/generators/inertia_templates/controller/controller_generator.rb
96
104
  - lib/generators/inertia_templates/controller/templates/react/view.jsx.tt
97
105
  - lib/generators/inertia_templates/controller/templates/svelte/view.svelte.tt
106
+ - lib/generators/inertia_templates/controller/templates/svelte4/view.svelte.tt
98
107
  - lib/generators/inertia_templates/controller/templates/vue/view.vue.tt
99
108
  - lib/generators/inertia_templates/scaffold/scaffold_generator.rb
100
109
  - lib/generators/inertia_templates/scaffold/templates/react/Edit.jsx.tt
@@ -109,6 +118,12 @@ files:
109
118
  - lib/generators/inertia_templates/scaffold/templates/svelte/New.svelte.tt
110
119
  - lib/generators/inertia_templates/scaffold/templates/svelte/One.svelte.tt
111
120
  - lib/generators/inertia_templates/scaffold/templates/svelte/Show.svelte.tt
121
+ - lib/generators/inertia_templates/scaffold/templates/svelte4/Edit.svelte.tt
122
+ - lib/generators/inertia_templates/scaffold/templates/svelte4/Form.svelte.tt
123
+ - lib/generators/inertia_templates/scaffold/templates/svelte4/Index.svelte.tt
124
+ - lib/generators/inertia_templates/scaffold/templates/svelte4/New.svelte.tt
125
+ - lib/generators/inertia_templates/scaffold/templates/svelte4/One.svelte.tt
126
+ - lib/generators/inertia_templates/scaffold/templates/svelte4/Show.svelte.tt
112
127
  - lib/generators/inertia_templates/scaffold/templates/vue/Edit.vue.tt
113
128
  - lib/generators/inertia_templates/scaffold/templates/vue/Form.vue.tt
114
129
  - lib/generators/inertia_templates/scaffold/templates/vue/Index.vue.tt
@@ -118,6 +133,7 @@ files:
118
133
  - lib/generators/inertia_tw_templates/controller/controller_generator.rb
119
134
  - lib/generators/inertia_tw_templates/controller/templates/react/view.jsx.tt
120
135
  - lib/generators/inertia_tw_templates/controller/templates/svelte/view.svelte.tt
136
+ - lib/generators/inertia_tw_templates/controller/templates/svelte4/view.svelte.tt
121
137
  - lib/generators/inertia_tw_templates/controller/templates/vue/view.vue.tt
122
138
  - lib/generators/inertia_tw_templates/scaffold/scaffold_generator.rb
123
139
  - lib/generators/inertia_tw_templates/scaffold/templates/react/Edit.jsx.tt
@@ -132,6 +148,12 @@ files:
132
148
  - lib/generators/inertia_tw_templates/scaffold/templates/svelte/New.svelte.tt
133
149
  - lib/generators/inertia_tw_templates/scaffold/templates/svelte/One.svelte.tt
134
150
  - lib/generators/inertia_tw_templates/scaffold/templates/svelte/Show.svelte.tt
151
+ - lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Edit.svelte.tt
152
+ - lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Form.svelte.tt
153
+ - lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Index.svelte.tt
154
+ - lib/generators/inertia_tw_templates/scaffold/templates/svelte4/New.svelte.tt
155
+ - lib/generators/inertia_tw_templates/scaffold/templates/svelte4/One.svelte.tt
156
+ - lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Show.svelte.tt
135
157
  - lib/generators/inertia_tw_templates/scaffold/templates/vue/Edit.vue.tt
136
158
  - lib/generators/inertia_tw_templates/scaffold/templates/vue/Form.vue.tt
137
159
  - lib/generators/inertia_tw_templates/scaffold/templates/vue/Index.vue.tt