diff --git a/packages/cli/src/commands/generate/scaffold/__tests__/__snapshots__/scaffold.test.js.snap b/packages/cli/src/commands/generate/scaffold/__tests__/__snapshots__/scaffold.test.js.snap index 9c7c2d60e470..02b7ab729f33 100644 --- a/packages/cli/src/commands/generate/scaffold/__tests__/__snapshots__/scaffold.test.js.snap +++ b/packages/cli/src/commands/generate/scaffold/__tests__/__snapshots__/scaffold.test.js.snap @@ -312,9 +312,10 @@ export default PostsLayout `; exports[`in javascript (default) mode creates a new component 1`] = ` -"import { useMutation } from '@redwoodjs/web' +"import { navigate, routes } from '@redwoodjs/router' +import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' + import PostForm from 'src/components/Post/PostForm' const CREATE_POST_MUTATION = gql\` @@ -357,9 +358,10 @@ export default NewPost `; exports[`in javascript (default) mode creates a new component with int foreign keys converted in onSave 1`] = ` -"import { useMutation } from '@redwoodjs/web' +"import { navigate, routes } from '@redwoodjs/router' +import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' + import UserProfileForm from 'src/components/UserProfile/UserProfileForm' const CREATE_USER_PROFILE_MUTATION = gql\` @@ -456,9 +458,9 @@ export const Success = ({ post }) => { exports[`in javascript (default) mode creates a show component 1`] = ` "import humanize from 'humanize-string' +import { Link, routes, navigate } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { Link, routes, navigate } from '@redwoodjs/router' const DELETE_POST_MUTATION = gql\` mutation DeletePostMutation($id: Int!) { @@ -1010,9 +1012,10 @@ exports[`in javascript (default) mode creates a stylesheet 1`] = ` exports[`in javascript (default) mode creates an edit cell 1`] = `undefined`; exports[`in javascript (default) mode creates an edit component with int foreign keys converted in onSave 1`] = ` -"import { useMutation } from '@redwoodjs/web' +"import { navigate, routes } from '@redwoodjs/router' + +import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' import UserProfileForm from 'src/components/UserProfile/UserProfileForm' @@ -1135,9 +1138,9 @@ export const Success = ({ posts }) => { exports[`in javascript (default) mode creates an index component 1`] = ` "import humanize from 'humanize-string' +import { Link, routes } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { Link, routes } from '@redwoodjs/router' import { QUERY } from 'src/components/Post/PostsCell' @@ -1665,9 +1668,10 @@ export default PostsLayout `; exports[`in typescript mode creates a new component 1`] = ` -"import { useMutation } from '@redwoodjs/web' +"import { navigate, routes } from '@redwoodjs/router' +import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' + import PostForm from 'src/components/Post/PostForm' const CREATE_POST_MUTATION = gql\` @@ -1710,9 +1714,10 @@ export default NewPost `; exports[`in typescript mode creates a new component with int foreign keys converted in onSave 1`] = ` -"import { useMutation } from '@redwoodjs/web' +"import { navigate, routes } from '@redwoodjs/router' +import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' + import UserProfileForm from 'src/components/UserProfile/UserProfileForm' const CREATE_USER_PROFILE_MUTATION = gql\` @@ -1768,6 +1773,7 @@ export default NewPostPage exports[`in typescript mode creates a show cell 1`] = ` "import type { FindPostById } from 'types/graphql' + import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import Post from 'src/components/Post/Post' @@ -1809,9 +1815,9 @@ export const Success = ({ post }: CellSuccessProps) => { exports[`in typescript mode creates a show component 1`] = ` "import humanize from 'humanize-string' +import { Link, routes, navigate } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { Link, routes, navigate } from '@redwoodjs/router' const DELETE_POST_MUTATION = gql\` mutation DeletePostMutation($id: Int!) { @@ -2353,10 +2359,10 @@ exports[`in typescript mode creates a stylesheet 1`] = ` exports[`in typescript mode creates an edit cell 1`] = ` "import type { EditPostById } from 'types/graphql' +import { navigate, routes } from '@redwoodjs/router' import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' import PostForm from 'src/components/Post/PostForm' @@ -2437,10 +2443,10 @@ export const Success = ({ post }: CellSuccessProps) => { exports[`in typescript mode creates an edit component with int foreign keys converted in onSave 1`] = ` "import type { EditUserProfileById } from 'types/graphql' +import { navigate, routes } from '@redwoodjs/router' import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' import UserProfileForm from 'src/components/UserProfile/UserProfileForm' @@ -2501,9 +2507,9 @@ export const Success = ({ userProfile }: CellSuccessProps) exports[`in typescript mode creates an index cell 1`] = ` "import type { FindPosts } from 'types/graphql' -import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import { Link, routes } from '@redwoodjs/router' +import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import Posts from 'src/components/Post/Posts' @@ -2556,9 +2562,9 @@ export const Success = ({ posts }: CellSuccessProps) => { exports[`in typescript mode creates an index component 1`] = ` "import humanize from 'humanize-string' +import { Link, routes } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { Link, routes } from '@redwoodjs/router' import { QUERY } from 'src/components/Post/PostsCell' diff --git a/packages/cli/src/commands/generate/scaffold/__tests__/__snapshots__/scaffoldNoNest.test.js.snap b/packages/cli/src/commands/generate/scaffold/__tests__/__snapshots__/scaffoldNoNest.test.js.snap index 5b06cbd7ebd6..cf2119334bbe 100644 --- a/packages/cli/src/commands/generate/scaffold/__tests__/__snapshots__/scaffoldNoNest.test.js.snap +++ b/packages/cli/src/commands/generate/scaffold/__tests__/__snapshots__/scaffoldNoNest.test.js.snap @@ -314,9 +314,10 @@ export default PostsLayout exports[`in javascript (default) mode creates a new component 1`] = `undefined`; exports[`in javascript (default) mode creates a new component with int foreign keys converted in onSave 1`] = ` -"import { useMutation } from '@redwoodjs/web' +"import { navigate, routes } from '@redwoodjs/router' +import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' + import UserProfileForm from 'src/components/UserProfileForm' const CREATE_USER_PROFILE_MUTATION = gql\` @@ -413,9 +414,9 @@ export const Success = ({ post }) => { exports[`in javascript (default) mode creates a show component 1`] = ` "import humanize from 'humanize-string' +import { Link, routes, navigate } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { Link, routes, navigate } from '@redwoodjs/router' const DELETE_POST_MUTATION = gql\` mutation DeletePostMutation($id: Int!) { @@ -967,9 +968,10 @@ exports[`in javascript (default) mode creates a stylesheet 1`] = ` exports[`in javascript (default) mode creates an edit cell 1`] = `undefined`; exports[`in javascript (default) mode creates an edit component with int foreign keys converted in onSave 1`] = ` -"import { useMutation } from '@redwoodjs/web' +"import { navigate, routes } from '@redwoodjs/router' + +import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' import UserProfileForm from 'src/components/UserProfileForm' @@ -1092,9 +1094,9 @@ export const Success = ({ posts }) => { exports[`in javascript (default) mode creates an index component 1`] = ` "import humanize from 'humanize-string' +import { Link, routes } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { Link, routes } from '@redwoodjs/router' import { QUERY } from 'src/components/PostsCell' @@ -1624,9 +1626,10 @@ export default PostsLayout exports[`in typescript mode creates a new component 1`] = `undefined`; exports[`in typescript mode creates a new component with int foreign keys converted in onSave 1`] = ` -"import { useMutation } from '@redwoodjs/web' +"import { navigate, routes } from '@redwoodjs/router' +import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' + import UserProfileForm from 'src/components/UserProfileForm' const CREATE_USER_PROFILE_MUTATION = gql\` @@ -1682,6 +1685,7 @@ export default NewPostPage exports[`in typescript mode creates a show cell 1`] = ` "import type { FindPostById } from 'types/graphql' + import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import Post from 'src/components/Post' @@ -1723,9 +1727,9 @@ export const Success = ({ post }: CellSuccessProps) => { exports[`in typescript mode creates a show component 1`] = ` "import humanize from 'humanize-string' +import { Link, routes, navigate } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { Link, routes, navigate } from '@redwoodjs/router' const DELETE_POST_MUTATION = gql\` mutation DeletePostMutation($id: Int!) { @@ -2267,10 +2271,10 @@ exports[`in typescript mode creates a stylesheet 1`] = ` exports[`in typescript mode creates an edit cell 1`] = ` "import type { EditPostById } from 'types/graphql' +import { navigate, routes } from '@redwoodjs/router' import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' import PostForm from 'src/components/PostForm' @@ -2351,10 +2355,10 @@ export const Success = ({ post }: CellSuccessProps) => { exports[`in typescript mode creates an edit component with int foreign keys converted in onSave 1`] = ` "import type { EditUserProfileById } from 'types/graphql' +import { navigate, routes } from '@redwoodjs/router' import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' import UserProfileForm from 'src/components/UserProfileForm' @@ -2415,9 +2419,9 @@ export const Success = ({ userProfile }: CellSuccessProps) exports[`in typescript mode creates an index cell 1`] = ` "import type { FindPosts } from 'types/graphql' -import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import { Link, routes } from '@redwoodjs/router' +import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import Posts from 'src/components/Posts' @@ -2470,9 +2474,9 @@ export const Success = ({ posts }: CellSuccessProps) => { exports[`in typescript mode creates an index component 1`] = ` "import humanize from 'humanize-string' +import { Link, routes } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { Link, routes } from '@redwoodjs/router' import { QUERY } from 'src/components/PostsCell' diff --git a/packages/cli/src/commands/generate/scaffold/scaffold.js b/packages/cli/src/commands/generate/scaffold/scaffold.js index e5822c80eb32..cc12d8a206e2 100644 --- a/packages/cli/src/commands/generate/scaffold/scaffold.js +++ b/packages/cli/src/commands/generate/scaffold/scaffold.js @@ -585,7 +585,7 @@ const addLayoutImport = ({ model: name, path: scaffoldPath = '' }) => { if (!routesContent.match(importLayout)) { const newRoutesContent = routesContent.replace( /['"]@redwoodjs\/router['"](\s*)/, - `'@redwoodjs/router'\n${importLayout}$1` + `'@redwoodjs/router'\n\n${importLayout}$1` ) writeFile(routesPath, newRoutesContent, { overwriteExisting: true }) diff --git a/packages/cli/src/commands/generate/scaffold/templates/components/EditNameCell.tsx.template b/packages/cli/src/commands/generate/scaffold/templates/components/EditNameCell.tsx.template index cd38a2095101..0da119569d19 100644 --- a/packages/cli/src/commands/generate/scaffold/templates/components/EditNameCell.tsx.template +++ b/packages/cli/src/commands/generate/scaffold/templates/components/EditNameCell.tsx.template @@ -1,9 +1,9 @@ import type { Edit${singularPascalName}ById } from 'types/graphql' +import { navigate, routes } from '@redwoodjs/router' import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' import ${singularPascalName}Form from '${importComponentNameForm}' diff --git a/packages/cli/src/commands/generate/scaffold/templates/components/Name.tsx.template b/packages/cli/src/commands/generate/scaffold/templates/components/Name.tsx.template index 2ea89b6bf3d2..12d4c6dbc288 100644 --- a/packages/cli/src/commands/generate/scaffold/templates/components/Name.tsx.template +++ b/packages/cli/src/commands/generate/scaffold/templates/components/Name.tsx.template @@ -1,8 +1,8 @@ import humanize from 'humanize-string' +import { Link, routes, navigate } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { Link, routes, navigate } from '@redwoodjs/router' const DELETE_${singularConstantName}_MUTATION = gql` mutation Delete${singularPascalName}Mutation($id: ${idType}!) { diff --git a/packages/cli/src/commands/generate/scaffold/templates/components/NameCell.tsx.template b/packages/cli/src/commands/generate/scaffold/templates/components/NameCell.tsx.template index 977f30ddcfbb..93a712512e86 100644 --- a/packages/cli/src/commands/generate/scaffold/templates/components/NameCell.tsx.template +++ b/packages/cli/src/commands/generate/scaffold/templates/components/NameCell.tsx.template @@ -1,4 +1,5 @@ import type { Find${singularPascalName}ById } from 'types/graphql' + import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import ${singularPascalName} from '${importComponentName}' diff --git a/packages/cli/src/commands/generate/scaffold/templates/components/Names.tsx.template b/packages/cli/src/commands/generate/scaffold/templates/components/Names.tsx.template index 2a5f20aa5a8f..156a7bfd70ba 100644 --- a/packages/cli/src/commands/generate/scaffold/templates/components/Names.tsx.template +++ b/packages/cli/src/commands/generate/scaffold/templates/components/Names.tsx.template @@ -1,8 +1,8 @@ import humanize from 'humanize-string' +import { Link, routes } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { Link, routes } from '@redwoodjs/router' import { QUERY } from '${importComponentNamesCell}' diff --git a/packages/cli/src/commands/generate/scaffold/templates/components/NamesCell.tsx.template b/packages/cli/src/commands/generate/scaffold/templates/components/NamesCell.tsx.template index 8d7f1cf94d38..122207f0109c 100644 --- a/packages/cli/src/commands/generate/scaffold/templates/components/NamesCell.tsx.template +++ b/packages/cli/src/commands/generate/scaffold/templates/components/NamesCell.tsx.template @@ -1,7 +1,7 @@ import type { Find${pluralPascalName} } from 'types/graphql' -import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import { Link, routes } from '@redwoodjs/router' +import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web' import ${pluralPascalName} from '${importComponentNames}' diff --git a/packages/cli/src/commands/generate/scaffold/templates/components/NewName.tsx.template b/packages/cli/src/commands/generate/scaffold/templates/components/NewName.tsx.template index fd269ef6efd3..6823641aba00 100644 --- a/packages/cli/src/commands/generate/scaffold/templates/components/NewName.tsx.template +++ b/packages/cli/src/commands/generate/scaffold/templates/components/NewName.tsx.template @@ -1,6 +1,7 @@ +import { navigate, routes } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' -import { navigate, routes } from '@redwoodjs/router' + import ${singularPascalName}Form from '${importComponentNameForm}' const CREATE_${singularConstantName}_MUTATION = gql` diff --git a/packages/cli/src/commands/generate/service/__tests__/__snapshots__/service.test.js.snap b/packages/cli/src/commands/generate/service/__tests__/__snapshots__/service.test.js.snap index b5b3642a986f..767a50a67297 100644 --- a/packages/cli/src/commands/generate/service/__tests__/__snapshots__/service.test.js.snap +++ b/packages/cli/src/commands/generate/service/__tests__/__snapshots__/service.test.js.snap @@ -278,8 +278,9 @@ describe('users', () => { `; exports[`in typescript mode creates a multi word service file 1`] = ` -"import { db } from 'src/lib/db' -import type { QueryResolvers } from 'types/graphql' +"import type { QueryResolvers } from 'types/graphql' + +import { db } from 'src/lib/db' export const userProfiles: QueryResolvers['userProfiles'] = () => { return db.userProfile.findMany() @@ -370,8 +371,9 @@ describe('transactions', () => { `; exports[`in typescript mode creates a single word service file 1`] = ` -"import { db } from 'src/lib/db' -import type { QueryResolvers, MutationResolvers } from 'types/graphql' +"import type { QueryResolvers, MutationResolvers } from 'types/graphql' + +import { db } from 'src/lib/db' export const users: QueryResolvers['users'] = () => { return db.user.findMany() @@ -405,8 +407,9 @@ export const deleteUser: MutationResolvers['deleteUser'] = ({ id }) => { `; exports[`in typescript mode creates a single word service file with CRUD actions 1`] = ` -"import { db } from 'src/lib/db' -import type { QueryResolvers, MutationResolvers } from 'types/graphql' +"import type { QueryResolvers, MutationResolvers } from 'types/graphql' + +import { db } from 'src/lib/db' export const posts: QueryResolvers['posts'] = () => { return db.post.findMany() @@ -440,8 +443,9 @@ export const deletePost: MutationResolvers['deletePost'] = ({ id }) => { `; exports[`in typescript mode creates a single word service file with a belongsTo relation 1`] = ` -"import { db } from 'src/lib/db' -import type { QueryResolvers, UserResolvers } from 'types/graphql' +"import type { QueryResolvers, UserResolvers } from 'types/graphql' + +import { db } from 'src/lib/db' export const users: QueryResolvers['users'] = () => { return db.user.findMany() @@ -461,8 +465,9 @@ export const User: UserResolvers = { `; exports[`in typescript mode creates a single word service file with a hasMany relation 1`] = ` -"import { db } from 'src/lib/db' -import type { QueryResolvers, UserResolvers } from 'types/graphql' +"import type { QueryResolvers, UserResolvers } from 'types/graphql' + +import { db } from 'src/lib/db' export const users: QueryResolvers['users'] = () => { return db.user.findMany() @@ -482,8 +487,9 @@ export const User: UserResolvers = { `; exports[`in typescript mode creates a single word service file with multiple relations 1`] = ` -"import { db } from 'src/lib/db' -import type { QueryResolvers, UserResolvers } from 'types/graphql' +"import type { QueryResolvers, UserResolvers } from 'types/graphql' + +import { db } from 'src/lib/db' export const users: QueryResolvers['users'] = () => { return db.user.findMany() diff --git a/packages/cli/src/commands/generate/service/templates/service.ts.template b/packages/cli/src/commands/generate/service/templates/service.ts.template index e1ac26f3b1db..596cc952f29a 100644 --- a/packages/cli/src/commands/generate/service/templates/service.ts.template +++ b/packages/cli/src/commands/generate/service/templates/service.ts.template @@ -1,6 +1,7 @@ -import { db } from 'src/lib/db' import type { QueryResolvers<% if (crud) { %>, MutationResolvers<% } %><% if (relations.length) { %>, ${singularPascalName}Resolvers<% } %> } from 'types/graphql' +import { db } from 'src/lib/db' + export const ${pluralCamelName}: QueryResolvers['${pluralCamelName}'] = () => { return db.${singularCamelName}.findMany() }<% if (crud || relations.length) { %> diff --git a/packages/create-redwood-app/template/api/src/functions/graphql.ts b/packages/create-redwood-app/template/api/src/functions/graphql.ts index f395c3b0f852..eae529e743da 100644 --- a/packages/create-redwood-app/template/api/src/functions/graphql.ts +++ b/packages/create-redwood-app/template/api/src/functions/graphql.ts @@ -2,10 +2,9 @@ import { createGraphQLHandler } from '@redwoodjs/graphql-server' import directives from 'src/directives/**/*.{js,ts}' import sdls from 'src/graphql/**/*.sdl.{js,ts}' -import services from 'src/services/**/*.{js,ts}' - import { db } from 'src/lib/db' import { logger } from 'src/lib/logger' +import services from 'src/services/**/*.{js,ts}' export const handler = createGraphQLHandler({ loggerConfig: { logger, options: {} },